0

隠しモジュールにいくつかの変更を加えました。

私はそれを作成し、カーネル v 2.6.27.14 で正常にロード (insmod) できます

今、カーネル v 2.6.27.11 に同じカーネル モジュールをロードします。

両方のカーネル バージョンの kerbel ソース ファイルに違いはないため、

成功することはできますが、この .11 カーネル バージョンでは /insmod を追加できません。

**

                ERROR: Module myhid does not exist in /proc/modules

               insmod: error inserting 'myhid.ko': -1 Invalid module format

**

よろしく、

4

3 に答える 3

3

別のカーネルバージョン用にコンパイルされたモジュールをロードすることはできません。モジュールのソースコードが変更されていないということは、バイナリが別のカーネルバージョンで同じになることを意味するわけではありません。カーネル内部APIのインターフェイスを変更すると(直接表示されていない場合でも)、モジュールが破損します...

したがって、別のカーネルバージョン用に構築されたモジュールのロードを禁止することにより、カーネルは安全な側にとどまります。または、カーネルを構築するときにMODVERSIONS構成オプションを設定することもできます。これにより、モジュールで使用されるすべてのシンボルにバージョン情報が埋め込まれ、運が良ければ別のカーネルバージョンにロードできます。

モジュールで使用されているインターフェイスが変更された場合でも、結果は同じになります。

于 2009-07-15T14:24:01.987 に答える
0

「modinfo」がモジュールについて教えてくれることを確認してください。

正しくコンパイルされ、適切なカーネルにリンクされていることを確認してください。

$ modinfo hid
filename:       /lib/modules/2.6.27.7/kernel/drivers/hid/hid.ko
license:        GPL
depends:        
vermagic:       2.6.27.7 mod_unload 486 
parm:           pb_fnmode:Mode of fn key on Apple keyboards (0 = disabled, 1 = fkeyslast, 2 = fkeysfirst) (int)

モジュールをコンパイル/インストールするときは、insmod / modprobeを実行する前に、「depmod」(rootとして)を実行してモジュールの依存関係を再構築する必要があることを忘れないでください。

于 2009-07-15T14:21:18.747 に答える
0

ありがとう !これがmakeファイルです。HID.Oのすべての依存ソースファイルをダウンロードして名前を変更します

MAKEFILE

obj-m:= myhid.o

myhid-objs:= my-hiddraw.o my-hid-core.o my-hid-input.o my-hid-input-quirk.o

KDIR:= / lib / modules / $(shell uname -r)/ build

PWD:= $(shell pwd)

デフォルト:

$(MAKE) -C $(KDIR) M=$(PWD) modules
于 2009-07-15T14:25:56.180 に答える