我正在做一些Linux内核开发,我正在尝试使用Netbeans。尽管宣布支持基于Make的C项目,但我无法创建功能齐全的Netbeans项目。这是尽管编译Netbeans分析使用完整调试信息编译的内核二进制文件。问题包括:
我想知道是否有人在为Linux内核开发设置Netbeans方面取得了成功,如果是,那么他们使用了什么设置。最后,我正在寻找Netbeans能够解析Makefile(首选)或从二进制文件中提取调试信息(不太理想,因为这会大大减慢编译速度),并自动确定哪些文件实际编译了哪些文件宏实际上是定义的。然后,基于此,我希望能够找到任何数据结构,变量,函数等的定义,并完成自动完成。
让我以一些观点为这个问题做准备:
SO的有用“相关问题”功能告诉我,以下问题是相关的:https://stackoverflow.com/questions/149321/what-ide-would-be-good-for-linux-kernel-driver-development。在阅读它之后,问题更多的是IDE之间的比较,而我正在寻找如何设置特定的IDE。即便如此,用户Wade Mealing似乎在使用Eclipse进行此类开发方面也有一些专业知识,所以我一定会感谢他(当然还有你所有的)答案。
干杯
答案 0 :(得分:4)
Eclipse似乎非常受Linux内核开发的欢迎:
答案 1 :(得分:2)
它涉及几个步骤。
[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