Kernel内核模块加载模块加载失败

错误的原因,使用 dmesg 查看一下,错误提示为当前编译出来的内核模块的 “Magic Number” 和系统内核的”Magic Number”不一致,拒绝加载。这是为了保证编译出来的内核模块和当前正在运行的Linux内核是使用同一个内核源码树编译出来的。

解决方法,找到当前设备上烧录运行的内核时基于哪一个内核源码树编译的,拉取到这个内核源码树,基于这个内核源码树编译出内核模块。

通过”/proc/version” 文件确认当前内核编译的Magic Number

cat /pro/version  

通过 'modinfo ' 查看内核模块的信息

这里的内核模块的 Version Magic 信息中显示的这些值来自于哪里?

vermagic: 5.15.41-00032-gf7aa45d9a356

问下Chatgpt 内核编译时的 Vermagic 是如何生成的。

cat include/generated/utsrelease.h

问下Chatgpt “utsrelease.h” 文件时如何生成的?

问了Chatgpt提示说这个Kernel内核编译生成的 Vermagic (version magic)信息是在内核编译时由build子系统调用 “scripts/setlocalversion" 脚本生成的

scripts/setlocalversion 

使用 VSCode编辑器查看修改了一下这个脚本文件,它是一个Linxu Shell Script 脚本文件,他根据当前的一些信息包括 git 信息生成编译内核的的 vermaigc。

最简单的的可以直接注释掉这个脚本里生成 vermagic 的逻辑,替换成想要的vermaigc 信息。这样生成的 .ko 文件就总是和当前内核匹配的。 

需要注意的是在 “scripts/setlocalversion” 只需要写 vermagic 的后半段(从第一个 “-” 开始),前面的内版本号Version “5.15.41”是根据主Makefile自动添加上的,两者拼接在一起构成了vermagic.

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐