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

编译Linux内核模块失败无法生成.ko文件问题求助

错误根因

编译失败由两个独立问题共同导致:

  • 系统安装的5.16.0-kali7版本内核头文件包损坏/未完整安装,缺失内核模块构建必需的脚本、配置文件
  • 自定义Makefile配置错误,目标编译对象与实际源码文件名不匹配
错误细节说明
  1. 头文件缺失问题:
    报错中提到的/usr/src/linux-headers-5.16.0-kali7-common/scripts/pahole-flags.sh不存在、scripts/basic/Makefile不存在、include/generated/autoconf.h/include/config/auto.conf缺失,均为内核头文件安装不完整的典型表现。在文件残缺的头文件目录下执行make oldconfig && make prepare无法修复问题,因为构建流程依赖的基础脚本本身已经丢失,配置生成步骤根本无法运行。
  2. Makefile配置问题:
    你的源码文件名为hello_world.c,但Makefile中写的是obj-m = foo.o,该配置会让构建系统查找foo.c作为编译输入,就算头文件状态正常,也不会编译你编写的hello_world源码,自然无法生成对应的.ko模块文件。
修复步骤
  1. 重装完整内核头文件,补全所有缺失的构建依赖:
    执行以下命令彻底删除损坏的头文件包后重新安装:
    sudo apt update
    sudo apt remove --purge linux-headers-5.16.0-kali7-amd64 linux-headers-5.16.0-kali7-common
    sudo apt install linux-headers-$(uname -r)
    
    安装完成后可执行ls /usr/src/linux-headers-5.16.0-kali7-common/scripts/pahole-flags.sh验证,命令能正常返回文件路径即代表头文件修复完成。
  2. 修正Makefile配置:
    将Makefile中的目标对象名改为和源码文件名一致,修正后的完整内容如下:
    obj-m = hello_world.o
    KVERSION = $(shell uname -r)
    all:
    	make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
    clean:
    	make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
    
    注意:Makefile中make命令前的缩进必须使用Tab字符,不能用空格代替,否则会触发规则解析错误。
  3. 清理旧编译产物后重新构建:
    在源码目录执行以下命令:
    make clean
    make
    
    编译完成后当前目录会生成hello_world.ko文件,可执行modinfo hello_world.ko验证模块信息是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:03:39