c - 编译linux内核时展开单个文件的宏

标签 c gcc linux-kernel kbuild

我有兴趣扩展单个 Linux 内核文件 (arch/x86/kernel/nmi.c) 的宏。 我知道通常可以使用 gcc -E 来扩展宏。 然而,由于该文件是 Linux 内核的一部分,因此需要将许多选项传递给 gcc。然后我尝试修改内核 Makefile 以传递 -E 标志。

我当前正在修改/arch/x86/kernel/Makefile,该文件用于编译 nmi.c 并通过以下方式调用此特定子 Makefile 使 M=arch/x86/kernel

我发现可以使用 CFLAGS_nmi.o 传递额外的 gcc 标志。 然而添加 CFLAGS_nmi.o := -E 修改Makefile没有达到预期的效果

这是修改Makefile后的输出

~/git/linux$ make M=arch/x86/kernel
CC      arch/x86/kernel/nmi.o
AR      arch/x86/kernel/built-in.a
Building modules, stage 2.
MODPOST 3 modules

我希望在“CC arch/x86/kernel/nmi.o”行之后有扩展的代码。 我还尝试了“CFLAGS_nmi.o := -E > nmi.out”来尝试重定向输出,但生成的文件是空的。

最佳答案

添加

CFLAGS_nmi.o := -save-temps=obj

成功了。谢谢!

关于c - 编译linux内核时展开单个文件的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56429389/

相关文章:

linux - ethercat 模块的以太网驱动程序

c - C 中从 'int*' 到 'off_t*' 的转换无效?

c - 在循环排序数组中找到最小元素

macos - Mac 上的汇编和 Linux 上的汇编有什么区别?

无法设置堆栈边界gcc

performance - rdpmc 的 CR4.PCE 已清除

c - 如何访问结构数组中的变量

c++ - codegen matlab 到 c++ :- Problems when attempting to build a c++ based . exe 而不是 c?

c++ - 为什么 sqrt() 在没有为 int 定义的 int 变量上工作正常?

assembly - AARCH64 上不存在 MCR 和 MRC?