2012-03-22 4 views
4

Я пытался получить куб.см до dump the include paths и мой .clang_complete файла теперь выглядит следующим образом:Как настроить clang_complete для разработки модуля ядра Linux?

-std=gnu89 
-nostdinc 
-I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include 
-I/lib/modules/3.0.0-16-generic/build/arch/x86/include/generated 
-I/lib/modules/3.0.0-16-generic/build/include 
-I/lib/modules/3.0.0-16-generic/build/ubuntu/include 
-I/usr/lib/gcc/i686-linux-gnu/4.6.1/include 
-D__KERNEL__ 
-DMODULE 

Но libclang все еще жалуется тонны ошибок & предупреждений при редактировании простого привета мира модуля ядра.

1 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|24 col 42 warning| declaration of 'struct list_head' will not be visible outside of this function 
2 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|26 col 6 error| incomplete definition of type 'struct list_head' 
3 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|24 col 42 info| forward declaration of 'struct list_head' 
4 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|27 col 6 error| incomplete definition of type 'struct list_head' 
5 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|24 col 42 info| forward declaration of 'struct list_head' 
6 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|37 col 38 warning| declaration of 'struct list_head' will not be visible outside of this function 
... 

определение struct list_head из <linux/types.h> уже включен <linux/list.h>. Оба находятся внутри /lib/modules/3.0.0-16-generic/build/include

ответ

4

Возможно, cc_args.py в комплекте с clang_complete был полезен для вас. Он должен создать действительный файл .clang_complete. К сожалению (я только что протестировал его, и я попытаюсь его исправить), он здесь не работает (файл .clang_complete не может быть создан).

Однако щипая сценарий и его результат, я был в состоянии произвести правильный файл .clang_complete:

-D__KERNEL__ 
-DCONFIG_AS_CFI=1 
-DCONFIG_AS_CFI_SIGNAL_FRAME=1 
-DCONFIG_AS_CFI_SECTIONS=1 
-DCONFIG_AS_FXSAVEQ=1 
-nostdinc 
-I/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.3/include 
-I/usr/src/linux-3.2.12-1-ARCH/arch/x86/include 
-I/usr/src/linux-3.2.12-1-ARCH/arch/x86/include/generated 
-I/usr/src/linux-3.2.12-1-ARCH/include 
-DMODULE 
-DKBUILD_STR(s)=#s 
-include /usr/src/linux-3.2.12-1-ARCH/include/linux/kconfig.h 

С этой .clang_complete, есть только одна ошибка слева, связанные с __kfree_rcu, для получения дополнительной информации об этом см .: https://lkml.org/lkml/2012/1/12/2