insmod hello.ko -1 Invalid module format最简单的解决的方法
在下也是从网上搜索到的这样的解决的方法。
遇到这样的情况后,通过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最简单的解决的方法的更多相关文章
- 解决insmod: error inserting 'hello.ko': -1 Invalid module format
编译自己的内核模块后,insmod出现error:error inserting 'hello.ko': -1 Invalid module format 出现这种情况的原因是因为Makefile种使 ...
- insmod: error inserting 'simp-blkdev.ko': -1 Invalid module format
(一) 今天写了个块设备驱动例子,在虚拟机上加载模块insmod simp_blkdev.ko的时候,出现以下错误. insmod: error inserting 'simple-blk.ko': ...
- insmod: error inserting 'hello.ko': -1 Invalid module format
在学习编写linux驱动程序的时候,一般都是从写一个helloworld的模块開始. 可是在编译完毕后,进行模块载入的时候,有时会出现例如以下错误: insmod: error inserting ' ...
- insmod: can't insert 'led.ko': invalid module format详细解释
insmod: can't insert 'led.ko': invalid module format 之前在Imx257学习版固件编写的驱动想直接移植imx257核心板的开发板上.以为2个板子的源 ...
- 内核模块加载错误 “Invalid module format” 解决办法
参考链接: http://blog.chinaunix.net/uid-20448327-id-172345.html
- insmod: ERROR: could not insert module dm-snapshot.ko: Unknown symbol in module
下面方法成功的前提是你的mod和你的操作系统版本是匹配的,也就是说你的mod之前成功过.说个多余的提示,mod在/lib/modules目录里面 insmod: ERROR: could not in ...
- jarsigner签名报错Invalid keystore format
由于之前在魅族市场的APK包都不是自己上传的,而是魅族从其他安卓市场帮拉去过来了. 所以需要我们自己去认领APK包. 这个时候就需要按照魅族给的未签名测试包给重新签名然后提交审核了. 1:看完以下说明 ...
- [原] wmic: Invalid XSL format (or) file name错误解决方法
之前运行wmic命令正确,今天在服务器上出现Invalid XSL format (or) file name的提示,搜索了一下,在这里找到了答案: http://www.ctkn.net/2011/ ...
- 配置tomcat连接器后,启动服务报错“No Certificate file specified or invalid file format"异常
1:原来的配置是 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true&quo ...
随机推荐
- linux系统在线搭建禅道
1.先安装wget:yum -y install wget 2.下载安装禅道:[root@zhaowen ~]# wget http://dl.cnezsoft.com/zentao/9.0.1/Ze ...
- linux下恢复被删除的文件
https://cloud.tencent.com/developer/article/1028317
- 小程序-wx:for
wx:for (列表渲染) index默认数组下标item默认数组当前项的变量名 数组是对象的形式,单纯写{{item}},结果是[object object]的形式,必须加对象名,并且对象名基本设置 ...
- vscode中eslint airbnb的简单配置
vscode可以直接在扩展中下载安装eslint,然后,还不能用,需要继续如下步骤: 1.npm install -g eslint 安装完后输入"eslint",有东西出来说明安 ...
- express jade ejs 为什么要用这些?
express是快速构建web应用的一个框架 线上文档 http://www.expressjs.com.cn/ 不用express行不行呢? 看了网上的回答:不用express直接搭,等你 ...
- javascript中模块化知识总结
JavaScript 模块化开发 1. 模块化介绍 掌握模块化基本概念以及使用模块化带来的好处 当你的网站开发越来越复杂的时候,会经常遇到什么问题? 恼人的命名冲突 繁琐的文件依赖 历史上,JavaS ...
- Django[pronounced dʒ] installation on windows
1.Install python, download python windows installer from http://www.python.org/download/ and do inst ...
- PhotoZoom Classic 7中的新功能
众所周知PhotoZoom Classic是家庭使用理想的放大图像软件.目前很多用户还在使用PhotoZoom Classic 6,对于PhotoZoom Classic 7还是有点陌生.其实在6代衍 ...
- 企业级任务调度框架Quartz(5) Quartz的声明式配置
前序: 前面我们已经通过编程的方式实现了多个作业任务执行具体操作的演示:但具体到实际的时候,如果我们要在 Job 启动之后改变它的执行时间和频度,则必须去修改源代码重新编译,我们很难去以编程的 ...
- 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之缓存融合技术和主要后台进程(四)
原文地址:http://www.cnblogs.com/baiboy/p/orc4.html 阅读目录 目录 Cache Fusion 原理 什么是 Cache Fusion? 什么是高可用 FA ...