当前位置: 首页 > 面试题库 >

insmod错误:插入'./hello.ko':-1无效的模块格式”

空成天
2023-03-14
问题内容

我刚刚制作了我的第一个驱动程序模块,即LDD3之后的hello world模块。但是不幸的是遇到了这个错误:

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

我正在Ubuntu 11.04和我的环境上执行此操作:

$ uname -r
2.6.38-8-generic

我得到这样的内核源代码

sudo apt-cache search linux-source
linux-source - Linux kernel source with Ubuntu patches
linux-source-2.6.38 - Linux kernel source for version 2.6.38 with Ubuntu patches
$sudo apt-get install linux-source-2.6.38

我的/ usr / src:

$ls /usr/src/
linux-headers-2.6.38-8          linux-source-2.6.38          vboxguest-5.0.10
linux-headers-2.6.38-8-generic  linux-source-2.6.38.tar.bz2

然后我编译内核

$sudo cp /boot/config-2.6.38-8-generic ./.config
$sudo make menuconfig -- load the .config file
$make
$make modules

然后编译我的内核模块

$make -C /usr/src/linux-source-2.6.38/linux-source-2.6.38 M=`pwd` modules

使用Makefile:

obj-m := hello.o

最后,当我插入模块时:

$sudo insmod hello_world.ko
insmod: error inserting 'hello_world.ko': -1 Invalid module format

我在dmesg中发现了什么:

hello: disagrees about version of symbol module_layout

所以有什么问题?

我还注意到,linux-header is -2.26.38-generic源代码版本是-2.26.38,这是问题吗?但是我真的没有linux- source-2.26.38-generic在网络上找到一个软件包。

状态更新:我发现文件/ lib / moduels / $(name -r)/ build / Makefile指示我正在运行的内核版本:

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 38
EXTRAVERSION = .2

因此,我下载了linux-2.6.38.2并进行了编译,但是仍然出现相同的错误。

我还发现/ boot / config-$(uname -r)中有一行:

CONFIG_VERSION_SIGNATURE="Ubuntu 2.6.38-8.42-generic 2.6.38.2"

有人知道这是什么意思吗?我在构建的内核的配置文件中没有看到它。


问题答案:

从其构建内核模块和向其插入模块的内核应具有相同的版本。如果您不想照顾这件事,可以使用以下Makefile。

obj−m += hello−world.o

all:
 make −C /lib/modules/$(shell uname −r)/build M=$(PWD) modules
clean:
 make −C /lib/modules/$(shell uname −r)/build M=$(PWD) clean

现在,您可以构建并尝试插入模块。

我建议您尽可能在此行之前成为root

$ sudo cp /boot/config-2.6.38-8-generic ./.config

$su
#cp /boot/config-2.6.38-8-generic ./.config
#insmod hello_world.ko

另外,您也可以使用以下make文件

TARGET  := hello-world
WARN    := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
CFLAGS  := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
CC      := gcc-3.0

${TARGET}.o: ${TARGET}.c

.PHONY: clean

clean:
    rm -rf ${TARGET}.o


 类似资料:
  • 我想在我的网站上打开我的预订表单页面,但我出现了这个错误: 下面是我的代码:

  • 我是PyCharm的新手,很难将我编写的模块导入Python控制台。如果我尝试导入Python自带的模块,我可以毫无困难地导入该模块,但是如果我尝试导入我编写的模块,我会得到一个导入错误:没有名为“ModuleITriedToImportName”的模块。例如,这里有一个简单的自我编写的模块pickle文件称为“文件pickle”: 如果我尝试在PyCharm Python控制台上“导入pickl

  • 问题内容: 目前,我正在开发一项功能,该功能涉及解析从另一产品收到的XML。我决定对一些实际的客户数据进行一些测试,看起来其他产品正在允许来自用户的输入被认为是无效的。无论如何,我仍然必须尝试找出一种解析它的方法。我们正在使用,但输入出现错误,如下所示。 如你所知,说明中包含似乎是无效标签的内容。现在,此描述标签被称为是叶子标签,并且其中不应包含任何嵌套标签。无论如何,这仍然是一个问题,并且会在

  • 问题内容: 我一直在使用python dns模块。我试图在新的Linux安装上使用它,但该模块未加载。我试图清理并安装,但安装似乎无法正常进行。 更新了python版本和pip版本命令的输出 非常感谢你的帮助。 注意:-我在新计算机上安装了防火墙。我不确定它是否会影响导入。但我试图禁用它,但它似乎仍然无法正常工作。 问题答案: 我遇到了与dnspython相同的问题。 我的解决方案是从他们的官方G

  • 当我在Kubuntu 17.04上使用Ionic 3安装了Java8时,我在签署一个Ionic android apk时遇到了这个错误 我得到的错误是: java版本 我已经安装了Android Studio,它运行良好,我测试了应用程序源代码,它在模拟器上运行没有问题。