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

遇到这样的情况后,通过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. NFS 开机自动挂载共享目录

    开机自动挂载: 如果服务端或客户端的服务器重启之后需要手动挂载,我们可以加入到开机自动挂载 在服务端/客户端的/etc/fstab里添加 192.168.22.204:/opt/filestore  ...

  2. 常用图片、文字轮播插件SuperSlide

    SuperSlide 是致力于实现网站统一特效调用的函数,能解决大部分标签切换.焦点图切换等效果,还能多个slide组合创造更多的效果.(兼容ie内核(包括无敌的ie6).webkit内核.ff.op ...

  3. 学习js与css 写个2048

    学习阶段,还是写点小东西练练手学的有意思一点,今天用栅格布局做了一个2048,但是移动动画和合并特效没有做,只简单的实现了一下功能. 记录一下学习的过程. 1.入口函数,初始化界面,我这里是直接是一个 ...

  4. JavaScript获取非行间样式

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  5. 数据结构——栈的实现(数组、Java)

    巩固数据结构 栈是一种有限制的线性表 只能对表尾进行操作 package com.shine.test.datastruct; import java.util.Arrays; public clas ...

  6. WP - 控件基础-按钮控件

    Button:HyperlinkButton:RepeatButton:ToggleButton 1.Button:    <button content="Button" ...

  7. ML:自然语言处理NLP面试题

    自然语言处理的三个里程碑: http://blog.csdn.net/sddamoke/article/details/1419973 两个事实分别为: 一.短语结构语法不能有效地描写自然语言. 二. ...

  8. bzoj 1189: [HNOI2007]紧急疏散evacuate 分层图最大流_拆点_二分

    Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一 块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是 ...

  9. pyhton的selenium的搭建

    一.好记性不如烂笔头,小伙伴们.让我们做下笔记吧 1.首先要安装pycharm  激活注册码地址:http://idea.lanyus.com/ 2.下载python3.6   python下载地址: ...

  10. Bash 如何取得当前正在执行的脚本的绝对路径?

    转自:http://blogread.cn/it/article/6549?f=wb Bash 如何取得当前正在执行的脚本的绝对路径? 如题,一般我们写Shell脚本的时候,都倾向使用绝对路径,这样无 ...