在下也是从网上搜索到的这样的解决的方法。

遇到这样的情况后,通过dmesg看一下内核日志。

假设发现有例如以下日志。那就好办了。

hello: version magic '2.6.33.3 ' should be '2.6.33.3-85.fc13.i686.PAE SMP mod_unload 686 '

改动内核源代码文件include/linux/vermagic.h

把例如以下VERMAGIC_STRING宏的定义删掉

#define VERMAGIC_STRING


UTS_RELEASE " "\ 

MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT


MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS\ 

MODULE_ARCH_VERMAGIC

然后,从新定义一个VERMAGIC_STRING宏

#define VERMAGIC_STRING  "should be '2.6.33.3-85.fc13.i686.PAE SMP mod_unload 686 "

注意,双引號中的内容,要与dmesg输出的日志中should be后面的单引號中的内容,全然同样。别漏掉了那个空格哦。

好了,如今又一次编译一下你的模块,再载入一次吧。

基本上应该会OK啦。

须要指出的是,这样的方法非常不正规。

假设你仅仅是急于开发验证模块,不想又一次编译安装新内核,能够暂时使用一下。

并且,用的时候,也要注意一下,模块编译所用的内核版本号与实际执行的内核版本号。

大体上也要比較接近才行。否则可能会出问题的。

假设是正式的产品。请务必保证。模块是基于实际执行的内核编译出来的。

好了。问题攻克了。以下再闲说几句模块的载入。

实际上。Linux下模块的载入。是通过系统调用sys_init_module完毕的。

对于2.6的内核。sys_init_module的代码在kernel/module.c中

sys_init_module调用load_module,load_module则检查模块的vermagic是否与内核的一样。

modmagic = get_modinfo(sechdrs, infoindex, "vermagic");

/* This is allowed: modprobe --force will invalidate it. */

if (!modmagic) {

tainted |= TAINT_FORCED_MODULE;

printk(KERN_WARNING "%s: no version magic, tainting kernel.\n",

      mod->name);

} else if (!same_magic(modmagic,vermagic)) {

printk(KERN_ERR "%s: version magic '%s' should be '%s'\n",

      mod->name, modmagic, vermagic);

err = -ENOEXEC;

goto free_hdr;

}

vermagic是内核中保存的magic。其定义例如以下。可见他的值也就来自于我们上面定义的宏。

static const char vermagic[] = VERMAGIC_STRING;

除了检查vermagic。load_module还会检查模块的许可证的兼容性,

详细调用链是:load_module->set_license->license_is_gpl_compatible

从以下license_is_gpl_compatible的代码,能够看出内核支持的许可证类型。

static inline int license_is_gpl_compatible(const char *license)

{

        return (strcmp(license, "GPL") == 0

                || strcmp(license, "GPL v2") == 0

                || strcmp(license, "GPL and additional rights") == 0

                || strcmp(license, "Dual BSD/GPL") == 0

                || strcmp(license, "Dual MIT/GPL") == 0

                || strcmp(license, "Dual MPL/GPL") == 0);

}

因此,我们的模块代码中MODULE_LICENSE("Dual MIT/GPL")这一项,也要注意符合license_is_gpl_compatible中的要求才行。否则的话。载入模块时。可能又要看到例如以下的告警了
:)

hello: module license  'xxx'  taints kernel.

insmod hello.ko -1 Invalid module format最简单的解决的方法的更多相关文章

  1. 解决insmod: error inserting 'hello.ko': -1 Invalid module format

    编译自己的内核模块后,insmod出现error:error inserting 'hello.ko': -1 Invalid module format 出现这种情况的原因是因为Makefile种使 ...

  2. insmod: error inserting 'simp-blkdev.ko': -1 Invalid module format

    (一) 今天写了个块设备驱动例子,在虚拟机上加载模块insmod simp_blkdev.ko的时候,出现以下错误. insmod: error inserting 'simple-blk.ko': ...

  3. insmod: error inserting 'hello.ko': -1 Invalid module format

    在学习编写linux驱动程序的时候,一般都是从写一个helloworld的模块開始. 可是在编译完毕后,进行模块载入的时候,有时会出现例如以下错误: insmod: error inserting ' ...

  4. insmod: can't insert 'led.ko': invalid module format详细解释

    insmod: can't insert 'led.ko': invalid module format 之前在Imx257学习版固件编写的驱动想直接移植imx257核心板的开发板上.以为2个板子的源 ...

  5. 内核模块加载错误 “Invalid module format” 解决办法

    参考链接:  http://blog.chinaunix.net/uid-20448327-id-172345.html

  6. insmod: ERROR: could not insert module dm-snapshot.ko: Unknown symbol in module

    下面方法成功的前提是你的mod和你的操作系统版本是匹配的,也就是说你的mod之前成功过.说个多余的提示,mod在/lib/modules目录里面 insmod: ERROR: could not in ...

  7. jarsigner签名报错Invalid keystore format

    由于之前在魅族市场的APK包都不是自己上传的,而是魅族从其他安卓市场帮拉去过来了. 所以需要我们自己去认领APK包. 这个时候就需要按照魅族给的未签名测试包给重新签名然后提交审核了. 1:看完以下说明 ...

  8. [原] wmic: Invalid XSL format (or) file name错误解决方法

    之前运行wmic命令正确,今天在服务器上出现Invalid XSL format (or) file name的提示,搜索了一下,在这里找到了答案: http://www.ctkn.net/2011/ ...

  9. 配置tomcat连接器后,启动服务报错“No Certificate file specified or invalid file format"异常

    1:原来的配置是 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true&quo ...

随机推荐

  1. Gym-101915A Printing Books 模拟

    题面 题意:给你N,X,   X表示这本书从X开始编号,每个X是几位数,计数器就加几, 然后问你如果从X,开始编号,计数器为N的时候,翻了几页,不能刚好为N输出-1. (例如,5 99,答案为2,因为 ...

  2. Ajax+Java实现大文件切割上传

    技术体系:html5(formdata) + java + servlet3.0+maven + tomcat7 <!DOCTYPE html> <html> <head ...

  3. 基于mkdocs-material搭建个人静态博客

    基于mkdocs-material搭建个人纯静态博客,没有php,没有mysql 如果你只是想安安静静的放一些技术文章,发布到个人站点或github-pages,mkdocs-material很适合你 ...

  4. Hadoop MapReduce编程 API入门系列之网页流量版本1(二十一)

    不多说,直接上代码. 对流量原始日志进行流量统计,将不同省份的用户统计结果输出到不同文件. 代码 package zhouls.bigdata.myMapReduce.areapartition; i ...

  5. configparser (配置文件) 模块

    主要内容来自景女神博客 内涵:该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值). 常见文档格式: [DEFAULT] ...

  6. Jetty容器配置https

    Configuring the Jetty Container as a Https Connector Jetty版本:9.2.22.v20170606 Pom.xml <?xml versi ...

  7. 励志:98岁老爷爷用Windows系统自带画图软件制作的神作

    哈尔拉斯科,是一位很出名的老爷爷,他70岁才接触MS Paint(就是我们熟知的Windows自带的画图软件).他曾经是一名图形艺术家,但是之前他都是手工创作.他熟知怎么用双手进行艺术创作.但是后来, ...

  8. 4.4.2 OpenGL几何变换编程实例

    程序运行结果如下图: #include <GL/glut.h> #include <stdlib.h> #include <math.h> /* 初始化显示窗口大小 ...

  9. 杭电1229 还是A+B

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1229 解题思路,最开始想的是把输入的数据存入数组中,比如输入 1,在数组中就储存为1000(因为数据不 ...

  10. Discuz 3x 配置问题

    1.注意config里面配置的路径 2.注意ucenter里面 的密钥要一直 3.IP 的选择