为Linux内核开发设置Netbeans / Eclipse

时间:2009-09-30 21:16:37

标签: c eclipse linux-kernel

我正在做一些Linux内核开发,我正在尝试使用Netbeans。尽管宣布支持基于Make的C项目,但我无法创建功能齐全的Netbeans项目。这是尽管编译Netbeans分析使用完整调试信息编译的内核二进制文件。问题包括:

    错误地排除了
  • 文件:某些文件在项目中显示为灰色,这意味着Netbeans不相信它们应该包含在项目中,而实际上它们已编译到内核中。主要问题是Netbeans将错过这些文件中存在的任何定义,例如数据结构和函数,但也会错过宏定义。
  • 无法找到定义:相当不言自明 - 通常,Netbeans无法找到某些内容的定义。部分原因是上述问题。
  • 找不到头文件:不言自明

我想知道是否有人在为Linux内核开发设置Netbeans方面取得了成功,如果是,那么他们使用了什么设置。最后,我正在寻找Netbeans能够解析Makefile(首选)或从二进制文件中提取调试信息(不太理想,因为这会大大减慢编译速度),并自动确定哪些文件实际编译了哪些文件宏实际上是定义的。然后,基于此,我希望能够找到任何数据结构,变量,函数等的定义,并完成自动完成。

让我以一些观点为这个问题做准备:

  • 我对涉及Vim / Emacs的解决方案不感兴趣。我知道有些人喜欢他们,但我不是其中之一。
  • 正如标题所示,我也很高兴知道如何设置Eclipse以满足我的需求
  • 虽然我更喜欢完美的报道,但是只错过百万分之一的定义显然很好

SO的有用“相关问题”功能告诉我,以下问题是相关的:https://stackoverflow.com/questions/149321/what-ide-would-be-good-for-linux-kernel-driver-development。在阅读它之后,问题更多的是IDE之间的比较,而我正在寻找如何设置特定的IDE。即便如此,用户Wade Mealing似乎在使用Eclipse进行此类开发方面也有一些专业知识,所以我一定会感谢他(当然还有你所有的)答案。

干杯

6 个答案:

答案 0 :(得分:4)

答案 1 :(得分:2)

我之前写过一个答案。现在我想出解决方案的所有细节,并希望分享它。不幸的是,stackoverflow不允许我编辑以前的答案。所以我在这个新答案中写下来。

它涉及几个步骤。


[1]第一步是修改linux脚本以保留dep文件。默认情况下,在构建中使用它们后,这些dep文件将被删除。这些dep文件包含有关C文件所依赖的其他文件的确切依赖关系信息。我们需要它们来创建构建中涉及的所有文件的列表。因此,修改linux-x.y.z / scripts下的文件,使它们不要删除这样的dep文件:

linux-3.1.2/scripts

Kbuild.include: echo do_not_rm1 rm -f $(depfile);
Makefile.build: echo do_not_rm2 rm -f $(depfile);

其他步骤在我的github代码项目文件https://github.com/minghuascode/Nbk/blob/master/note-nbkparse中有详细说明。大概你这样做:

[2]配置您的配置方法,但一定要使用“O =”选项将obj文件构建到一个单独的目录中。

[3]然后使用相同的“O =”选项和“V = 1”选项构建linux,并将make输出保存到文件中。

[4]从上面的github项目运行我的nbkparse脚本。它确实: [4.1]读入make日志文件和dep文件。生成镜像命令。 [4.2]运行mirroring命令将相关源文件硬链接到单独的树中,并生成供NetBeans使用的make-log文件。


现在使用镜像源树和生成的日志文件创建NetBeans C项目。 NetBeans应该能够解析所有内核符号。而且您只会看到构建中涉及的文件。

答案 2 :(得分:1)

Eclipse wiki有一个关于此的页面:HowTo use the CDT to navigate Linux kernel source

答案 3 :(得分:0)

我一直在做一些嵌入式linux开发。包括内核模块开发并将整个linux内核源代码导入到Eclipse中,作为一个单独的项目。我一直在Eclipse之外构建内核(到目前为止),但我没有任何理由为什么我不能在Eclipse中设置构建环境来构建内核。对于我的项目,只要我将PATH属性设置为指向适当的linux源包含目录,对于struct字段等的名称完成似乎相当不错。

我无法评论,如果它正在拾取正确的定义而不是灰化对应的部分,因为我没有真正关注内核本身的文件。(到目前为止)< / p>

我也想知道将Netbeans用作Linux的'C'IDE,因为我更喜欢Netbean用于Java GUI开发。

答案 4 :(得分:0)

我认为这样可行(为各种项目完成每一步):

[1]修改内核构建脚本以保留.d文件。默认情况下,它们会被删除 [2]将构建过程记录到文件中。 [3]编写一个脚本来解析构建日志。 [3.1]从构建日志中,您知道每个.c文件。 [3.2]从.c文件中,您知道哪个是相应的.d文件。 [3.3]查看.d文件以找出所有包含的.h文件。 [3.4]形成一个完整的.c和.h文件列表。 [4]现在创建一个新目录,并使用“ln -s”或“ln”来选择感兴趣的文件。

现在,在[4]中为现有源代码创建一个Netbeans项目。 配置代码帮助以使用make-log文件。你应该看到 完全有效的源代码,就像你在[2]中构建它一样。

对上述步骤的一些解释:

在[2]处,进行真正的构建,以便日志文件包含确切的文件和感兴趣的标志。 后来的netbeans将能够使用确切的标志进行解析。

在[4]处,只选择您想要查看的文件。将整个内核树合并到netbeans中将是不切实际的。

解析.d文件有一个技巧:许多依赖项不是.h文件的真实路径,它们是自动配置文件中部分linux配置部分的修改条目。您可能需要反转修改以确定哪个是真正的头文件。

实际上netbeans网站上有一个话题。这是讨论网址:http://forums.netbeans.org/ntopic3075.html。并且讨论中链接了一个wiki页面:wiki.netbeans.org/CNDLinuxKernel。基本上它要求你使用CFLAGS =“ - g3 -gdwarf-2”作为前缀。

答案 5 :(得分:0)

我发现此链接在Eclipse中设置正确的索引非常有用。在我的情况下,它需要运行一个脚本来改变Eclipse环境以匹配你的内核选项

  

$ autoconf-to-eclipse.py ./include/generated/autoconf.h。

An illustrated guide to indexing the linux kernel in eclipse