内核模块插入报错Invalid module format,求可行解决方法
解决insmod提示"Invalid module format"的内核模块加载问题
问题根源
内核模块的编译必须与当前运行的内核版本完全匹配——你用4.15.0-23-generic版本的内核头文件编译的hello.ko,无法适配当前运行的5.4.0-132-generic内核,二者的内核ABI(应用二进制接口)不兼容,导致模块格式验证失败。
解决步骤
安装当前运行内核的对应头文件
执行以下命令自动安装匹配版本的内核头文件:sudo apt install linux-headers-$(uname -r)其中
$(uname -r)会自动读取当前运行的内核版本(即5.4.0-132-generic),确保安装的头文件版本完全一致。重新编译内核模块
- 清理之前的编译产物:
make clean - 执行编译命令(确保你的Makefile使用系统默认的内核头文件路径,比如
/lib/modules/$(shell uname -r)/build,无需手动修改路径):make - 编译完成后,会生成适配5.4.0-132-generic内核的新
hello.ko文件。
- 清理之前的编译产物:
重新加载模块
执行插入命令:sudo insmod bin/hello.ko
额外注意事项
- 内核ABI与内核版本强绑定,哪怕是同一主版本下的小版本差异,都可能导致模块加载失败,必须保证编译环境的内核头文件版本与运行内核版本完全一致。
- 如果需要在多个内核版本下使用该模块,可以使用DKMS工具,它能自动为已安装的所有内核版本编译适配的模块。
内容的提问来源于stack exchange,提问作者Venu Aditya
相关产品推荐
相关产品推荐

