我在hid模块中做了一些修改。
我可以在内核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
**
此致
答案 0 :(得分:3)
您无法加载为其他内核版本编译的模块。模块的源代码没有改变并不意味着二进制文件对于另一个内核版本是相同的。内核内部API的任何接口更改(即使不直接可见)都会破坏模块......
因此,内核通过禁止加载为另一个内核版本构建的模块来保持安全。或者,您可以在构建内核时设置MODVERSIONS配置选项。这会将版本信息嵌入到模块使用的所有符号中,幸运的是,您可以将其加载到另一个内核版本上。
如果您的模块使用的任何接口发生了变化,那么结果将是相同的。
答案 1 :(得分: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身份)重建模块依赖项。
答案 2 :(得分: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