History:2012-02-17
Author:yingru

移植rt3070的AP驱动到装有fedora14的PC机上时,模块编译完毕后,加载时提示invalid module format。

PC机环境介绍:
内核版本:2.6.35.6-45.fc14.i686
命令行输入dmesg查看最后的日志,发现如下错误记录:
rtutil3070ap:version magic '2.6.35.14-96.fc14.i686 SMP mod_unload 686 ' should be '2.6.35.6-45.fc14.i686 SMP mod_unload 686'
其余几个模块也是同样错误
version magic真的是个很恶心的东西。。
既然提示出错了就去找原因。
查证AP驱动的makefile里内核目录变量指向的是当前PC机所用内核目录。/lib/modules/`uname -r`/build
这一步没有错。那么说明驱动的makefile是正确的
切换到/lib/modules/`uname -r`/目录下,查看build(build在此处是一个符号链接), ls -al 发现build指向的目录是/usr/src/kernels/2.6.35.14-96.fc14.i686,问题在这里,虽然我用的目录是/lib/modules/`uname -r`/build 这个目录貌似与我当前内核版本(uname -r 即2.6.35.6-45.fc14.i686)一致,但是build这个符号链接指向的内核源码却是2.6.35.14-96.fc14.i686的,这样造成了编译出来的模块所带的version magic是2.6.35.14-96.fc14.i686这一版本,加载时与uname -r不符。
那么要解决这一问题,就需要“篡改”一下内核源码里的version magic 。
驱动模块的version magic信息是怎么生成的:
2.6 内核下,在linux/vermagic.h中定义有VERMAGIC_STRING,VERMAGIC_STRING不仅包含内核版本号,还包含有内核 使用的gcc版本,SMP与PREEMPT等配置信息。模块在编译时,我们可以看到屏幕上会显示"MODPOST"。在此阶段, VERMAGIC_STRING会添加到模块的modinfo段。在内核源码目录下scripts\mod\modpost.c文件中可以看到模块后续处 理部分的代码。模块编译生成后,通过`modinfo mymodule.ko`命令可以查看此模块的vermagic等信息。2.6 内核下的模块装载器里保存有内核的版本信息,在装载模块时,装载器会比较所保存的内核vermagic与此模块的modinfo段里保存的 vermagic信息是否一致,两者一致时,模块才能被装载。譬如Fedora core 4 与core 2 使用的都是2.6 版本内核,在Fedore Core 2下去加载Fedora Core4下编译生成的hello.ko,会出现"invalid module format" 错误。
http://www.ibm.com/developerworks/cn/linux/l-module26/
既然是这个道理,那么只需要把/usr/src/kernels/2.6.35.14-96.fc14.i686/目录下源码中的include/linux/vermagic.h中的VERMAGIC_STRING修改成与当前PC内核uname -r一致即可。
修改如下:
#define VERMAGIC_STRING                 \
"2.6.35.6-45.fc14.i686" ""      \
MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT  \
MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS \
MODULE_ARCH_VERMAGIC
(描红为修改处)
具体的格式可以在modinfo yourmodule.ko查看之后 再确定修改哪里 修改完后重新make即可 加载后没有version magic报错提示。

移植驱动完毕后加载时的version magic报错原因以及解决办法相关推荐

  1. 网站加载 Waiting (TTFB) 时间过长的原因和解决办法

    关注网页前端性能的朋友,在优化网页性能的时候都会遇到网站加载 Waiting(TTFB)时间过长的问题.对于没有优化过的 WordPress 站点,TTFB 时间经常超过了页面内容的下载时间,为用户带 ...

  2. 配置struts.xml时extends=struts-default会报错,原因和解决

    提示:此种解决方法只适用于Intellij IDEA,MyEclipse或者Eclipse还得另寻它法,但估计原因应该是类似的. 在Intellij IDEA 2017使用Struts2框架时,若新建 ...

  3. Linux系统安装驱动过程中ko文件加载错误(Required key not available)的解决办法

    Linux系统安装驱动过程中ko文件加载错误(Required key not available)的解决办法 问题描述 在Ubuntu上使用CP210x USB转UART设备时需要安装驱动程序(CP ...

  4. initpki.dll加载失败 找不到指定的模块的解决办法

    有用户在更新Win10系统时,收到提示"模块'initpki.dll'加载失败.请确保该二进制存储在指定的路径中,或者调试它以检查该二进制或相关的DLL文件是否有问题.找不到指定的程序.&q ...

  5. ci框架中引入css,php ci框架中加载css和js文件失败的原因和解决方法

    php ci框架中加载css和js文件失败的原因和解决方法 发布时间:2021-07-01 12:08:38 来源:亿速云 阅读:50 作者:chen 本篇内容介绍了"php ci框架中加载 ...

  6. 占书明:outlook发邮件时提示“出现意外错误”的原因及解决办法!

    占书明:outlook发邮件时提示"出现意外错误"的原因及解决办法! 有个使用者,在发送邮件时截了个图给我,如下"出现意外错误",便无法发送邮件: 使用环境:w ...

  7. ArcMap软件卡在加载界面且闪退无法打开的多种解决办法

      本文介绍ArcMap卡在加载界面,无法打开软件的多种解决方法.   最近,突然发现ArcMap软件打不开了,每次双击快捷方式后其会显示如下所示的加载界面,但是等待很久后加载界面消失,软件窗口却一直 ...

  8. php waiting ttfb,浅谈我们个人博客网站加载过程中Waiting(TTFB)时间过长的解决办法...

    最近,我发现博客访问速度已经放缓.我检查了控制台,发现所有静态资源都在200ms内加载.只有第一份文件达到了6.65s.它被称为等待(TTFB). )占用主要加载时间的东西.具体的控制台显示内容如下: ...

  9. android 模拟器 驱动,【新手指导】模拟器报错列表及解决办法!

    盗版ghost系统因系统文件精简缺失会在安装模拟器过程中出现: 报错:BigNoxVMMgr.exe-用用程序错误: 或者出现:应用程序无法正常启动0xc0150002解决: 或者出现:应用程序无法正 ...

最新文章

  1. 计算图像的标准差与方差(meanStdDev() 函数)
  2. 一文带你学会国产加密算法SM4的vue实现方案
  3. hdu 4529(状态dp)
  4. OpenCASCADE绘制测试线束:拓扑命令之复杂拓扑
  5. malloc,colloc,realloc内存分配,动态库,静态库的生成与调用
  6. 检索数据_19_按照字符串对结果排序
  7. 【渝粤教育】国家开放大学2018年秋季 2202T公共行政学 参考试题
  8. 通俗易懂!视觉slam第一部分——slam简介与相机介绍
  9. html页面的ajax请求,【提问】ajax请求返回整个html页面
  10. 项目期复习:JS操作符,弹窗与调试,凝视,数据类型转换
  11. 元数据管理在数据仓库的实践应用
  12. 基于java jsp的大学生奖学金管理系统
  13. vue中使用市区(地区)联动 复制三步完成
  14. python获取地图上经纬度_Python获取各大地图平台经纬度数据,哪家的数据最准确?...
  15. JavaScript 火焰
  16. 【拓扑排序+dp】Hzy's Rabbit Candy
  17. 计算机程序设计基础试题,2010计算机程序设计基础试题A2卷(考试时间:2010-7-1)new...
  18. 订阅发布功能Java实现
  19. eclipse-美化插件
  20. Python画圣诞树和烟花源代码

热门文章

  1. mysql 5.1由于Host为localhost的用户为空,密码为空,导致本地用户无法登陆。
  2. HDU 5691 Sitting in Line 状压dp
  3. documentbodyscrollTop的值总为零的解决办法
  4. Codeforces Round #277 (Div. 2) 题解
  5. 弹出打开/保存文件对话框 选择文件夹对话框
  6. poj2115C Looooops
  7. Automatic Reference Counting
  8. 设计模式笔记——Bridge
  9. Linux 引导管理器 grub2 使用简介
  10. 爬空气质量MySQL,mysql