Как настроить clang_complete для разработки модулей ядра Linux? - PullRequest
4 голосов
/ 22 марта 2012

Я пытался получить gcc для дампа включаемых путей , и мой .clang_complete файл теперь выглядит так:

-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 все еще жалуетсятонн ошибок и предупреждений при редактировании простого модуля ядра hello world.

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

1 Ответ

4 голосов
/ 25 марта 2012

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

...