如何在Eclipse中包含用于Linux内核开发的asm头目录?

时间:2012-04-30 18:13:37

标签: linux eclipse kernel driver header-files

我正在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有助于一些,但只有通用位置存在太多的头文件才能使其可用。

谢谢!

2 个答案:

答案 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