我正在尝试为 mcp251xfd 构建并安装 Linux 内核驱动程序。构建似乎成功(我得到了 .ko 文件),但是当我调用 insmod 来安装它时,我得到:
insmod: ERROR: could not insert module mcp251xfd.ko: Invalid module format
在谷歌搜索中,最常见的建议似乎是对您尝试构建的确切内核版本使用完全相同的源代码。所以 uname -a 返回:
Linux fedora 5.11.3-300.fc34.x86_64 #1 SMP Thu Mar 4 19:03:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux.
因此,我下载了版本 5.11.3 的内核源代码,运行 make oldconfig,编辑 .config 文件以包含驱动程序,运行 make prepare,然后进入驱动程序源代码目录并调用:
make -C ~/linux-5.11.3 -M=`pwd` modules
这是成功的,因为它生成了文件 mcp251xfd.ko。之后立即 insmod ,然后出现错误。我调用 dmesg,它返回:
mcp251xfd: version magic '5.11.3 SMP mod_unload ' should be '5.11.3-300.fc34.x86_64 SMP mod_unload '
所以我不知道下一步该做什么。 5.11.3 到底是不是正确的版本?
我注意到在我的 .config 文件中,我看到“CONFIG_BUILD_SALT=”5.11.3-300.fc34.x86_64”。所以它看起来与我的系统版本号匹配。在“make module”期间是否有一个额外的命令行选项来指示使用“盐”版本号?
答案1
解决方案是打开 Makefile(Linux 源代码树中的 Makefile)并修改以下行:
EXTRAVERSION = -300.fc34.x86_64
它与已安装操作系统的uname -r
文本相匹配。