2009-09-30 96 views
6

我正在做一些Linux内核开发,我试图使用Netbeans。尽管宣布支持Make-based C项目,但我无法创建功能完备的Netbeans项目。尽管编译时有Netbeans分析了一个内核二进制文件,该二进制文件是用完整的调试信息编译的。问题包括:设置Netbeans/Eclipse的Linux内核开发

  • 文件被错误地排除:有些文件在项目,这意味着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进行这种开发方面有一些专业知识,所以我当然会很欣赏他的(当然也包括所有的)答案。

干杯

回答

0

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

我真的不能评论,关于if它正在挑选正确的定义并且不会使相应的部分灰白,因为我没有真正关注内核本身的文件。(到目前为止)

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

0

,我认为这会工作(做每一个步骤为各种项目):

[1]修改内核构建scr ipts离开.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”作为前缀。

+0

感谢您的建议。我尝试了一些类似于make-log文件的方法,但最终仍然出现了相同的问题。使用你指定的CFLAGS将是一个PITA,因为它会大大增加编译时间。 – 2010-06-09 16:22:11

+0

它应该基于过去的经验。会试试看。虽然有些符号有时会丢失并再次出现,这纯粹是Netbeans的内部问题。 – Minghua 2010-06-09 17:50:59

+0

[Here](https://github.com/minghuascode/Nbk/blob/master/note-nbkparse)我创建了一个脚本来生成适合NetBeans的make-log文件,以便从make输出和dep文件。是的,你需要修改linux makefiles来保留dep文件。它对我来说非常好(几乎没有丢失的符号)。这些步骤有点冗长,但一旦完成,一切都将变得简单。希望这个帮助。 – minghua 2012-02-07 05:19:37

2

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

它涉及几个步骤。


[1]的第一个步骤是修改Linux脚本离开在DEP文件。在默认情况下在构建使用后,这些DEP文件都被删除。这些dep文件包含有关C文件依赖哪些其他文件的确切依赖关系信息。我们需要他们创建构建中涉及的所有文件的列表。因此,修改linux下X.Y.Z文件/脚本,使他们不删除这样的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]运行镜像命令将相关源文件硬链接到单独的树中,并为NetBeans生成一个生成日志文件以供使用。


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