0

我在隐藏模块中做了一些修改。

我可以成功地将它加载(insmod)到内核 v 2.6.27.14

现在我愿意在内核 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

谢谢 !这是制作文件。我下载了 HID.O 的所有依赖源文件并重命名它们

制作文件

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

密码 := $(shell 密码)

默认:

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