我正在Eclipse IDE中为C / C ++ Linux开发人员(Indigo SR2)开发嵌入式系统的Linux内核模块(驱动程序)。我已将内核的include目录添加到我的项目的索引路径(项目>属性> C / C ++一般>路径和Sybmols - >包含(选项卡) - >添加...(按钮)。)但是,几个内核的头文件引用了asm目录,它实际上是linux / asm-powerpc目录(在我的例子中)覆盖linux / asm-generic目录的顶层,其中特定版本覆盖了泛型。
我怎样才能告诉Eclipse的索引器首先将“asm”解释为“asm-powerpc”,如果失败,那么再看一下“asm-generic”,而不只是寻找“asm”?将asm-powerpc符号化为asm有助于一些,但只有通用位置存在太多的头文件才能使其可用。
谢谢!
答案 0 :(得分:1)
正如我所发现的,指导Eclipse与内核构建过程类似的索引需要很多部分。但是,这个具体问题的答案很简单:
假设您的Linux内核构建目录定义为${KDIR}
,并且您的内核架构为${ARCH}
,那么您需要为项目添加以下包含路径:
${KDIR}/include
${KDIR}/arch/${ARCH}/include
您可以在Project Explorer
中执行此操作,方法是右键单击项目,然后Properties > C/C++ General > Paths and Symbols > Includes (tab) > Add ... (button)
。
我错过了第二个条目。添加它解决了这个问题。通过这两个条目,检查未解决的包括(右键单击Project > Index > Search for Unresolved Includes
)产生了0个错误。
现在我遇到了另一个绊脚石。 Eclipse中仍然未定义某些类型(如u32和bool)。 (我的Makefile不会产生任何错误。)我认为这与Eclipse头解析中未定义的某些内核特定变量有关,导致include的IFDEF与内核模块编译期间的评估不同。但是,我还没有解决这个问题,这与另一个问题有关。 :)
答案 1 :(得分:1)
除了为每个项目添加路径外,还可以向Eclipse CDT添加全局环境变量。
对于Eclipse Kepler,在Window > Preferences > C/C++ > Build > Environment
中添加变量:
C_INCLUDE_PATH
= /usr/include/c++/${gcc-version}
CPLUS_INCLUDE_PATH
= /usr/include:${KDIR}/include:${KDIR}/include/linux:${KDIR}/arch/${ARCH}/include
将上面的${var}
替换为真实条目,例如将${gcc-version}
替换为4.6.3
。
然后重启Eclipse并正确解析变量。
对于内核模块开发,这些可能就足够了。
如果需要阅读整个内核源代码,请阅读以下链接: http://wiki.eclipse.org/HowTo_use_the_CDT_to_navigate_Linux_kernel_source