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

基于lkmpg开发Linux内核模块,如何获取预处理器输出?

获取Linux内核模块预处理器输出的便捷方法

基于内核Kbuild系统(也就是你用的lkmpg示例Makefile依赖的构建框架),有几种便捷方式获取预处理器输出:

1. 直接通过内核Makefile生成单个文件的预处理结果

针对你的模块源文件(比如mymod.c),在模块代码目录下运行:

make -C /lib/modules/$(uname -r)/build M=$(pwd) cppsrc=mymod.c

执行完成后,同目录下会生成mymod.i文件,这就是经过宏展开、头文件全部包含后的预处理器输出。

2. 给Makefile添加自定义目标简化命令

如果不想每次都输入长命令,可以在lkmpg的示例Makefile中添加一个自定义目标:

# 新增预处理目标,格式为 cpp-<源文件名>
cpp-%: %.c
	$(MAKE) -C $(KERNELDIR) M=$(PWD) cppsrc=$<

之后只需要运行make cpp-mymod就能生成对应的mymod.i文件,更省心。

3. 手动调用预处理器(不推荐)

如果一定要手动操作,需要先获取内核构建所需的头文件路径,再调用cpp:

# 先确保内核构建脚本就绪
make -C /lib/modules/$(uname -r)/build scripts
# 调用cpp生成预处理文件
cpp -I/lib/modules/$(uname -r)/build/include \
    -I/lib/modules/$(uname -r)/build/arch/$(uname -m)/include/generated \
    -include linux/kconfig.h -include linux/compiler_types.h \
    mymod.c -o mymod.i

这种方法需要手动指定所有必要的头文件路径和强制包含的内核头,容易遗漏,远不如前两种方法可靠。

生成的.i文件可以直接用文本编辑器打开,或者用grep、less等工具查看,适合调试宏定义展开、条件编译逻辑等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:04:58