2017-02-10 2 views
0

Я пишу базовый модуль ядра в C для экспериментов на виртуальной машине. В настоящее время весь мой код работает нормально, однако при компиляции я также получаю предупреждения из файлов заголовков ядра, которые заставляют меня очень трудно увидеть какие-либо из моих собственных ошибок, которые я мог бы случайно игнорировать.Makefile игнорирует флаг «-системы» при компиляции модуля ядра

Я нашел ответ 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

Если вы явно выполняете '-систему/usr/src/kernels/{мое ядро}/arch/x86/include/asm/apic.h', вы избавляетесь от предыдущих предупреждений? – fedepad

ответ

1

Добавить V=1 в командную строку макияжем, чтобы увидеть фактические команды выполняется.

Вы найдете, что марка не расширяет подстановочный шаблон для вас. Путь, который вы указали, с литералом *, не указывает на какой-либо реальный каталог. См. Использование $(wildcard), чтобы сделать расширение или поместить правильный путь.

+0

Изменение флага 'isystem' на' -систему/usr/src/kernels/{мое ядро}/arch/x86/include/'сделал трюк, спасибо :) – Paradoxis

Смежные вопросы