分享

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

 mrjbydd 2014-05-09

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

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

it


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

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

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

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

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

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

Linux字符设备驱动insmod <wbr>version错误备注
另外在进行menuconfig时,进行module设置时,有以下几项:
Linux字符设备驱动insmod <wbr>version错误备注
再由打印出来的module vermagic:3.3.0-ADI-2012R1-pre+ mod_unload modversions 可知。3.3.0-ADI-2012R1-pre+为kernel version信息。至于后面的那个+号是没有显示kernel的补丁信息。mod_unload 为上图module menuconfig时设置的,保证模块与内核此处一致就行,还有后面的modversions与此类似。但是非常重要的一点是,在vermagic string里面的第一条UTS_RELEASE,规定了模块中kernel version的信息,UTS_RELEASE在include/generated/UTSRELEASE.h中可以查看。但是该文件只有在menuconfig时,配置了
Linux字符设备驱动insmod <wbr>version错误备注
此项才会生成。这样编译生成的.ko文件vermagic信息才会对应kernel完整的version信息。
至此,insmod关于版本信息的问题解决了。
但是这个问题后,insmod时,又出现
Unknown symbol _mcount (err 0)的错误。
目前正在处理中。Linux字符设备驱动insmod <wbr>version错误备注

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多