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

编译内核模块时添加-I参数仍无法搜索到include目录头文件

问题根因

你编译内核模块时用的make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules命令,会先把工作目录切换到-C指定的内核构建目录下。你写的-Iinclude是相对路径,GCC会去内核构建目录下找include子文件夹,根本不会扫描你当前项目里的include目录,自然报找不到头文件的错误。

排查方法
  • 临时在EXTRA_CFLAGS里加-v参数,编译时查看GCC输出的头文件搜索路径列表(对应#include <...> search starts here:段落),就能确认你写的-Iinclude实际指向的是内核目录下的路径,根本没包含你项目的头文件目录。
  • 也可以临时把-Iinclude换成你项目include目录的绝对路径测试,如果替换后编译通过,就能确定是相对路径解析错位导致的问题。
修复方案

内核构建系统预定义了$(src)变量,专门指向你传入的M=参数对应的模块源码根目录,把EXTRA_CFLAGS里的头文件路径改成用这个变量拼接的绝对路径即可,修改后的配置如下:

EXTRA_CFLAGS += -I$(src)/include -Werror -Wall \
                -Wno-missing-braces -Wno-error=unused-function

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

注意:写内核模块Makefile时,所有指向项目内文件的路径都不要直接用裸相对路径,优先用$(src)拼接,避免因为make切换工作目录导致路径失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:09:22