You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu24.04下insmod报Invalid module format错误求助

内核模块插入失败:Invalid module format 问题排查与解决

问题原因

  • 核心问题是模块的.gnu.linkonce.this_module段(对应内核的struct module结构)大小与当前运行内核的结构大小不匹配,导致内核无法正确加载模块。
  • 手动在Makefile中指定CC=gcc-13破坏了内核构建系统的工具链一致性:Ubuntu官方内核编译使用的是经过定制的工具链(可能包含特定补丁或编译参数),手动指定编译器会导致模块的ABI与内核不兼容。
  • 也可能是内核头文件安装不完整或/lib/modules/$(uname -r)/build目录未正确关联到内核源码配置。

解决步骤

  1. 修正Makefile,移除手动指定的编译器
    删除Makefile中的CC=gcc-13行,让内核构建系统自动调用匹配的工具链。修改后的Makefile如下:

    obj-m += main.o
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    
    all:
        make -C $(KERNELDIR) M=$(PWD) modules
    clean:
        make -C $(KERNELDIR) M=$(PWD) clean
    
    gen_compile_commands:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) compile_commands.json
    
  2. 重新安装内核相关包,确保文件完整
    先卸载现有内核头文件、镜像和模块包,再重新安装:

    sudo apt purge linux-headers-$(uname -r) linux-image-$(uname -r) linux-modules-$(uname -r)
    sudo apt install linux-headers-$(uname -r) linux-image-$(uname -r) linux-modules-$(uname -r)
    

    注意:执行此操作会卸载当前运行的内核,请确保系统中有其他可用内核,或者重启后能正常进入重新安装的内核版本。

  3. 清理旧编译产物并重新编译模块

    make clean
    make all
    
  4. 重新尝试插入模块

    sudo insmod main.ko
    

补充说明

内核模块的编译严格依赖内核编译时的完整环境,包括编译器版本、编译选项、内核配置等。即使内核版本号相同,不同构建环境下的内核结构体大小可能因为编译器ABI变化、内核配置差异而不同,因此必须使用内核构建系统提供的默认工具链编译模块,不能手动指定编译器。

内容的提问来源于stack exchange,提问作者horc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:22:19