0

私はAndroid用のローダブルカーネルモジュール(LKM)を開発しました。

私は使用しますkzalloc

device = kzalloc(ndevices * sizeof (*device), GFP_KERNEL);

しばらくは動作しましたが、Androidをアップデートした後(4.1以降は動作しなくなりました)、次のエラーが発生しましたinsmod

insmod module.ko
insmod: init_module 'module.ko' failed (No such file or directory)

DMESG says:
Unknown symbol malloc_sizes (err 0)

これはinux/slab.h私が知っていることと関係があります。

私は何日もグーグルで検索しましたが、この問題を修正してLKMを再び機能させるための解決策が見つからないことに非常に不満を感じています。

多分誰かが私を助けることができますか?

結論:

受け入れられた答えは正しいです:slab.hを削除し、欠落しているメソッドを「extern」として定義してみてください。または、カーネルソースで、「make menuconfig」を使用して、SLABをSLUBに変更します(詳細については、回答の最初のコメントを参照してください)。

残りの問題は、新しい、より具体的なトピックで処理されます。

コンパイルされたLKMの互換性

4

1 に答える 1

0

したがって、カーネルのバージョンを教えてください。しかし、Linuxカーネルのバージョンとメモリアロケータを調べると、デフォルトのメインラインカーネルがSLABからSLUBに切り替えられたように見えます。

デフォルトでは、Linuxカーネルはバージョン2.6.23までSLAB割り当てシステムを使用していました。バージョン2.6.23では、SLUB割り当てがデフォルトになりました。

linux/slab.hSLABに依存するモジュールまたは何かを作成している場合を除いて(これは非常にまれです)、おそらくヘッダーを含めたくないでしょう。

于 2013-01-07T20:19:47.143 に答える