linux移植驱动insmod时所遇到的问题
Posted 程诚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux移植驱动insmod时所遇到的问题相关的知识,希望对你有一定的参考价值。
insmod时可能出现的错误:(问题5为自己遇到的实际问题,其他则为借鉴他认经验)
1.warning: function declaration isnt a prototype
这种错误也是很常见的,主要是对一些函数固定格式的错误使用。比如int function()改称int function(void)
static int xxxx_init(void)记住不要缺少static,而static void xxxx_exit(void)
2.出现 warning: assignment makes pointer from integer without a cast 的原因
第一可能是类型转换的问题。函数的返回值类型等等
第二、在源文件中没有发现函数的声明,可能是忘加头文件了。(未经声明的函数原型一律默认为返回int值
3、makefile:4: *** missing separator. Stop.
最近常用SourceInsight3.5编辑程序,里面直接编辑保存的是word格式。用WinHex或UltraEdit以二进制方式打开,里面的
Tab字符对应0x09而不应该是几个0x20。这是主要用vi打开文件,切入到底行模式,使用":set ff =unix"
4.hello: version magic 2.6.30.4 mod_unload ARMv4 should be2.6.30.4-EmbedSky mod_unload ARMv4
insmod:cannot insert hello.ko: invalid module format
出错原因:模块版本与内核版本不匹配!
解决办法:导入预设配置信息,进入menuconfig 继续配置General config ->( )Local version ->
括号中加入如下内容:“-EmbedSky”退出保存为 .config ,重新编译内核、驱动模块,再来加载模块
5# insmod buttons.ko
buttons: Unknown symbol __aeabi_unwind_cpp_pr0 (err 0)
insmod: can‘t insert ‘buttons.ko‘: unknown symbol in module or invalid parameter
原因:驱动模块与内核镜像不匹配
解决办法:找到与下载到板子上的内核镜保持一致:修改Makefile
将(原来默认路径的内核镜像)KERN_DIR = /work/system/linux-3.4.2
改为(下载到板子上的路径的内核镜像)KERN_DIR = /work/system/linux_suspend/linux-3.4.2即可
以上是关于linux移植驱动insmod时所遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章
Linux问题:触摸屏驱动运行出现insmod: cannot insert `ucb1x00-ts.ko': File exists (-1): File exists
STM32 USB转串口驱动移植到SylixOS中遇到的问题总结
Linux-insmod/rmmod/lsmod驱动模块相关命令(10)