7

我正在做一些 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 进行此类开发方面具有一定的专业知识,因此我当然会感谢他(当然还有您的所有)的回答。

干杯

4

6 回答 6

2

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

它涉及几个步骤。


[1] 第一步是修改 linux 脚本以保留 dep 文件。默认情况下,在构建中使用它们后,那些 dep 文件将被删除。这些 dep 文件包含有关 C 文件依赖的其他文件的确切依赖关系信息。我们需要他们创建一个构建中涉及的所有文件的列表。因此,修改 linux-xyz/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] 运行镜像命令,将相关源文件硬链接到单独的树中,生成一个make-log文件供NetBeans使用。


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

于 2012-02-07T05:47:02.907 回答
1

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

于 2012-08-15T14:42:51.543 回答
0

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

我无法真正评论它是否选择了正确的定义并且没有将相应的部分变灰,因为我并没有真正关注内核本身的文件。(到目前为止)

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

于 2009-10-02T01:55:27.567 回答
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。基本上它要求你在 make 前面加上 CFLAGS="-g3 -gdwarf-2" 。

于 2010-06-09T01:05:18.027 回答
0

我发现这个链接对于在 Eclipse 中设置正确的索引很有帮助。在我的情况下,它需要运行一个脚本来改变 Eclipse 环境以匹配您的内核选项

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

在 Eclipse 中索引 linux 内核的图解指南

于 2012-01-17T19:53:40.033 回答