如何为linux内核模块开发configurationclang_complete?

我试图让gcc 转储包含path ,我的.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 

但编辑一个简单的hello world内核模块时, 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 ... 

<linux/types.h>struct list_head的定义已包含在<linux/list.h> 。 都在/lib/modules/3.0.0-16-generic/build/include里面

与clang_complete捆绑在一起的cc_args.py可能对您有用。 它应该建立一个有效的.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