c语言 - 编译内核模块时忽略'-isystem'标志的生成文件



我正在用C编写一个基本的内核模块,以便在虚拟机上进行实验。目前,我所有的代码都运行良好,但在编译时,我也收到了来自内核头文件的警告,这让我发现很难看到我自己可能意外忽略的任何错误。

我在这里找到了一个关于如何禁用来自外部库的警告的答案,即我需要使用GCC-isystem {dir}标志的状态,但这似乎不起作用。有人能指出我做错了什么吗?这是我当前的Makefile:

obj-m += module.o
module-objs := 
src/main.o 
src/logger.o
EXTRA_CFLAGS += -fno-stack-protector
EXTRA_CFLAGS += -fno-pie
EXTRA_CFLAGS += -isystem /usr/src/kernels/*  # This doesn't seem to work, I still end up getting warnings
all:
make -C /lib/modules/{my kernel}/build M=$(PWD) modules
clean:
make -C /lib/modules/{my kernel}/build M=$(PWD) clean

我收到的警告示例:

make -C /lib/modules/{my kernel}/build M=/root/Documents/Projects/TestKernelMod modules
make[1]: Entering directory '/usr/src/kernels/{my kernel}'
/usr/src/kernels/{my kernel}/arch/x86/Makefile:81: stack protector enabled but no compiler support
CC [M]  /root/Documents/Projects/TestKernelMod/src/main.o
In file included from /usr/src/kernels/{my kernel}/arch/x86/include/asm/smp.h:13:0,
from /usr/src/kernels/{my kernel}/arch/x86/include/asm/mmzone_64.h:12,
from /usr/src/kernels/{my kernel}/arch/x86/include/asm/mmzone.h:4,
from include/linux/mmzone.h:850,
from include/linux/gfp.h:4,
from include/linux/kmod.h:22,
from include/linux/module.h:13,
from /root/Documents/Projects/TestKernelMod/src/main.c:2:
/usr/src/kernels/{my kernel}/arch/x86/include/asm/apic.h: In function ‘native_apic_msr_read’:
/usr/src/kernels/{my kernel}/arch/x86/include/asm/apic.h:150:11: warning: variable ‘high’ set but not used [-Wunused-but-set-variable]
u32 low, high;
^~~~
/usr/src/kernels/{my kernel}/arch/x86/include/asm/apic.h: In function ‘x2apic_enabled’:
/usr/src/kernels/{my kernel}/arch/x86/include/asm/apic.h:190:11: warning: variable ‘msr2’ set but not used [-Wunused-but-set-variable]
int msr, msr2;
^~~~

V=1添加到make命令行以查看实际执行的命令。

你会发现make并没有为你扩展通配符。您所给出的带有文本*的路径不指向任何实际目录。请参阅使用$(wildcard)使make展开或放入正确的路径。

最新更新