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

相关文章

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp