打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Linux字符设备驱动insmod version错误备注
userphoto

2014.05.09

关注

Linux字符设备驱动insmod version错误备注

(2012-05-17 09:35:00)
标签:

it


  在基于bf609开发驱动时,先做了最简单的字符型设备驱动尝试。编译环境是在PCxp下运行的vmware ubuntu10.04。交叉编译环境为bfin-uclinux,linuxkernel为ADI网站提供的最新代码。

 在驱动代码写好后,配置好konfig文件和makefile文件,设置为module。make menuconfig后,进行makemodules SUBDIRS=drivers/char。将module型的驱动生成.ko文件。

  将.ko文件下载到板上后,进行insmod操作。发现反馈的信息为:

mydevice: version magic '3.3.0-ADI-2012R1-pre+ mod_unloadmodversions ' should be '3.3.0-ADI-2012R1-pre-00619-gab55153-dirtymod_unload '
insmod: can't insert 'mydevice.ko': invalid module format

 在网上查了很多资料,知道是模块的编译工具版本和内核的编译工具版本不对所导致。但是之前没有做过驱动开发。很多知识不太清楚。不知道哪儿出错了。由于进行blackfin开发时,软件开发环境根据官网提供的信息,可有两种情况。一种是通过官网提供的uClinux包来开发uClinux。一种是通过官网提供的buildroot包来开发linux。由于ADI从bf60X开始,对于bf60X的开发支持只在buildroot上进行。因为我的开发包为buildroot。针对刚才insmod的问题,经过仔细检查,发现在环境变量设置toolschain时,出现了问题。板上下载好的uImage文件是buildroot编译所得,模块编译是在linuxkernel下编译所得,而环境变量设置时又出现了问题,导致了版本信息不同。

  不过从给出的message来看,模块的vermagic信息为3.3.0-ADI-2012R1-pre+ mod_unload modversions。它是有kernel目录下的include/linux/vermagic.h文件决定的。其中具体的信息又由文件中vermagicstring决定。

另外在进行menuconfig时,进行module设置时,有以下几项:
再由打印出来的module vermagic:3.3.0-ADI-2012R1-pre+ mod_unloadmodversions 可知。3.3.0-ADI-2012R1-pre+为kernelversion信息。至于后面的那个+号是没有显示kernel的补丁信息。mod_unload 为上图modulemenuconfig时设置的,保证模块与内核此处一致就行,还有后面的modversions与此类似。但是非常重要的一点是,在vermagicstring里面的第一条UTS_RELEASE,规定了模块中kernelversion的信息,UTS_RELEASE在include/generated/UTSRELEASE.h中可以查看。但是该文件只有在menuconfig时,配置了
此项才会生成。这样编译生成的.ko文件vermagic信息才会对应kernel完整的version信息。
至此,insmod关于版本信息的问题解决了。
但是这个问题后,insmod时,又出现
Unknown symbol _mcount (err 0)的错误。
目前正在处理中。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux驱动程序入门—Hello World - 蓝博芯科
Linux内核模块编程指南(一)
Linux驱动Invalid module format错误解决
Linux e1000e 网卡驱动
海康威视嵌入式软件工程师笔试题分享(含解答)
网上看到的一篇很好的讲解linux驱动的文章
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服