insmod: error inserting : -1 Invalid module format 解决办法

2024-01-06 21:58

本文主要是介绍insmod: error inserting : -1 Invalid module format 解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当最初开始LDD编程时,经常会碰到这种情况,下载编译的内核源代码和当前正在运行的内核不一样。

 

第一阶段

有时候你下载的内核版本相对正确,但却仍然不能insert成功,这有另一方面的东西要check:

1. gcc的版本,比较:

cat /proc/version和gcc -v

2. 内核config的比较,在关键的选项上不能相左

当前内核config:

/lib/modules/`uname -r`/build/.config

 

比如,在大内存机器上可能要打开PAE:CONFIG_X86_PAE=y

2.6.32-28-generic-pae #55-Ubuntu SMP Mon Jan 10 22:34:08

而默认的内核源代码是不会打开的,所以insert失败

PAE依赖于CONFIG_HIGHMEM64G=y,否则PAE选项是看不到的:

    High Memory Support (64GB)  --->                                            │ │ 

         -*- PAE (Physical Address Extension) Support       

 

同时可以把version signature设成一样:

CONFIG_VERSION_SIGNATURE="Ubuntu 2.6.32-28.55-generic-pae 2.6.32.27+drm33.12"

当运行内核中有检查的时候
CONFIG_CHECK_SIGNATURE=y

 

dkms需要装:

$ aptitude show dkms
Package: dkms
State: not installed
Version: 2.1.1.2-2ubuntu1
Priority: optional
Section: admin
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Uncompressed Size: 475k
Depends: module-init-tools, gcc, make | build-essential | dpkg-dev, patch
Recommends: fakeroot, lsb-release, menu | sudo, linux-headers-2.6-686 | linux-headers-2.6-amd64 |
            linux-headers-generic | linux-headers, linux-image
Description: Dynamic Kernel Module Support Framework
 DKMS is a framework designed to allow individual kernel modules to be upgraded without changing the
 whole kernel. It is also very easy to rebuild modules as you upgrade kernels.
Homepage: http://linux.dell.com/dkms

 

第二阶段

基本配置正确后,接下来是version和magic不匹配的问题:

[12151.939695] h: no symbol version for module_layout
[13544.669533] h: disagrees about version of symbol module_layout

以后一种更常见。

CONFIG_VERSION_SIGNATURE的设置丝毫不起作用,使用modinfo查看系统ko和自编ko:

 

$ sudo modinfo h.ko
filename:       h.ko
license:        Dual BSD/GPL
depends:       
vermagic:       2.6.32.41+drm33.18 SMP mod_unload modversions 686


系统ko

vermagic:       2.6.32-28-generic-pae SMP mod_unload modversions 586TSC
parm:           debug:Debug level (0=none,...,16=all) (int)
parm:           eeprom_bad_csum_allow:Allow bad eeprom checksums (int)
parm:           use_io:Force use of i/o access mode (int)

其定义在Makefile文件中,

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 32
EXTRAVERSION = .41+drm33.18
NAME = Man-Eating Seals of Antiquity


需要将EXTRAVERSION替换:-28-generic-pae

modversions是通过enable该选项编译内核出来的:CONFIG_MODVERSIONS=y

 

而586TSC则是ARCH,是通过设置CONFIG_M586TSC(Pentium-Classic)出来的,而现在编译的内核是686(Pentium-Pro)。

所以解决办法:

1. 编辑Makefile文件使前面基本的版本号一样

2. enable CONFIG_MODVERSIONS

3. 选择同样的cpu类型

 

第三阶段

做完了这一切以后,还是不能插入:disagrees about version of symbol module_layout

这种情况是有可能的,不仅仅是大小版本的差异,而且你不能保证你的:

This indicates you have compiled the module against a different version of the kernel than is running. Note that even if the running kernel and kernel source have the same numerical value (e.g. both are 2.6.31-20-server), if the two use different configuration options, you may see this error. Also check if there are multiple versions of this module on the machine and ensure you are loading the correct one.

 

只能采取终极办法了,自己从source里编一个,即:

apt-get install linux-source-2.6.32

cp /lib/modules/`uname -r`/build/.config .config  Or:

cp /boot/config-`uname -r` .config

 

make -j4

sudo make install

make modules

sudo make modules_install

$ cd /boot && sudo mkinitramfs -k -o initrd.img-2.6.32.41+drm33.18-pae 2.6.32.41+drm33.18-pae
Working files in /tmp/mkinitramfs_4KnPce and overlay in /tmp/mkinitramfs-OL_XRVNGw

 

/tmp/mkinitramfs_4KnPce$ ls
bin  conf  etc  init  lib  sbin  scripts

编辑grub.cfg加入新编译的内核

 

-EOF


这篇关于insmod: error inserting : -1 Invalid module format 解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577746

相关文章

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

笔记本电脑开机报错故障的原因及解决办法

笔记本电脑开机报错故障是指笔记本电脑开机自检时或启动操作系统前停止启动,在显示屏 出现一些错误提示的故障。   笔记本电脑开机报错故障的原因及解决办法   造成此类故障的原因一般是笔记本电脑在启动自检时,检测到硬件设备不能正常工作或在自 检通过后从硬盘启动时,出现硬盘的分区表损坏、硬盘主引导记录损坏、硬盘分区结束标志丢失 等故障,笔记本电脑出现相应的故障提示。   维修此类故障时