kernel module insmod错误
kernel模块配置
Enable loadable module support
打开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安装在/lib/modules/中
Forced module loading
允许模块强制加载
Module unloading
允许卸载已经加载的模块
Forced module unloading
允许强制卸载正在使用中的模块(比较危险)
Module versioning support
允许使用其他内核版本的模块(可能会出问题)
Source checksum for all modules
为所有的模块校验源码,如果你不是自己编写内核模块就不需要它
一般仅选择“Module unloading”即可。
当insmod模块时报错version或modversion错误,是因为模块版本问题,去掉内核配置项“Module versioning support”即可。
常见错误如下:
dido: disagree about version of symbol cdev_add
dido:Unknown symbol cdev_add (err -22)
dido: disagree about version of symbol cdev_init
dido:Unknown symbol cdev_init (err -22)
dido: disagree about version of symbol cdev_del
dido:Unknown symbol cdev_del (err -22)
insmod: can’t insert ‘dido.ko’: Invalid argument
# insmod main.ko
[ 894.541900] main: version magic '3.2.0-g9d89df8 mod_unload ARMv7 p2v8 ' should be '3.2.0-g31e746c-dirty mod_unload ARMv7 p2v8 '
insmod: can't insert 'main.ko': invalid module format
内核版本不同,导致模块加载不成功,解决方法:
1. 重新编译内核、驱动,即内核、驱动版本一致。
2. 简单修改内核版本文件,与现有系统相同。
3.2内核在include/generated/utsrelease.h
2.6内核在include/linux/utsrelease.h
3. 修改内核。根据内核中utsrelease.h内容产生的过程修改内核Makefie,仅向kernel.release输出内核版本,而不用脚本setlocalversion。
kernelrelease = $(KERNELVERSION)$(localver-full)include/config/kernel.release: include/config/auto.conf FORCE
$(Q)rm -f $@
$(Q)echo $(kernelrelease) > $@