2017-02-10 72 views
0

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

我找到了一个答案here关于如何禁用来自外部库的警告,该状态我需要使用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; 
      ^~~~ 
+0

如果您明确执行'-isystem/usr/src/kernels/{my kernel}/arch/x86/include/asm/apic.h',您是否摆脱了以前的警告? – fedepad

回答

1

添加V=1向在make命令行查看正在执行的实际命令。

您会发现make不会为您扩展通配符。您提供的路径(文字为*)不会指向任何实际目录。请参阅使用$(wildcard)进行扩展或放入正确的路径。

+0

将'isystem'标志更改为'-isystem/usr/src/kernels/{我的内核}/arch/x86/include /'做了窍门,谢谢:) – Paradoxis