【发布时间】:2020-03-27 11:50:19
【问题描述】:
我正在尝试“制作”并将“/drivers/md/raid0.ko”模块加载到我的 linux 内核中,但出现此错误。
# modprobe raid0 --force-vermagic
modprobe: ERROR: could not insert 'raid0': Exec format error
dmesg
[Dec 2 15:10] raid0: version magic '5.0.0 SMP mod_unload ' should be '5.0.0-36-generic SMP mod_unload '
我的内核版本是
# uname -a
Linux ubuntu1 5.0.0-36-generic #39-Ubuntu SMP Tue Nov 12 09:46:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
我尝试加载的代码取自链接https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.0.tar.xz
因此版本是 5.0.0,没有 EXTRAVERSION -36
我尝试了很多方法,但都失败了。
- 在构建模块之前使用命令
make EXTRAVERSION=-1 modules_prepare设置EXTRAVERSION - 加载内核时使用
--force-vermagic,但失败。 - 在构建内核之前从
/usr/lib/modules/$(uname -r)/build/Makefile复制 Makefile。
我同时使用了make SUBDIRS=drivers/md modules 和make M=drivers/md 进行构建,但两者的结果相同。
需要帮助!
【问题讨论】:
-
你必须使用正在运行的内核中的头文件(kernel-headers / linux-headers 包,或者,如果它需要一些内部,kernel-sources / linux-sources 之一。无论哪个适合发行版你正在使用。
-
对于 Ubuntu:askubuntu.com/questions/159833/…(实际上这个主题对 StackExchange 的 Ubuntu 部分很有用)
-
@0andriy,我正在使用askubuntu.com/questions/515407/… 中的步骤,但面临一些其他问题.. 所以认为可能有一种通用的方法。
-
@Haris:“通用方式”是针对构建树对应到您的目标内核构建模块。也就是说,如果你想在
5.0.0-36-generic内核(Ubuntu中提供)中运行模块,那么你需要使用构建树/usr/lib/modules/5.0.0-36-generic/build(由相应的Ubuntu包提供)。如果您在采用该方法时遇到了问题,请描述该问题。 -
@Tsyvarev。我正在尝试,但起初它不起作用。现在,我通过更改主 Makefile 中的
EXTRAVERSION更改使其工作。
标签: linux-kernel kernel-module device-driver