1

我开始浏览内核代码,其中一个绊脚石是如何跟踪函数调用、结构定义等。有没有一种能够快速跳转到函数定义并退出的好方法?

我已经尝试过 Source Navigator,虽然我认为它很好,但只要您右键单击并要求它查找定义,它就会在多个文件中为您提供定义。如果我在 foo.c 中从其中一个包含调用 bar(),我希望能够直接转到 foo 引用的 bar(),而不是花时间确保我要去正确的定义(例如,如果我的源代码树中的多个文件具有 foo 未引用的 bar() 函数)。

我宁愿不使用grep。我明白了,它是命令行,是的,但它比 Source Navigator 更辛苦。

我愿意使用 IDE、命令行或任何最好的东西(尽管我更喜欢 IDE)。那么,请问,寻找和探索内核源代码的最佳方法是什么?

4

2 回答 2

2

如果您的最佳意图只是浏览代码,您可以使用一些 linux 交叉引用网站。http://lxr.linux.no/是一个非常好的站点,服务于它的目的。优点是您可以通过下拉菜单轻松地在标签之间切换和浏览,并且它们具有从 Linux .01 开始的任何内容,您不必保留内核树的本地副本。他们已经下降了一段时间,现在又恢复了。

如果您打算进行内核黑客攻击,则需要拥有内核源代码的本地副本。然后最好的选择是 cscope。cscope -R您可以使用 vim创建和使用数据库。您也可以使用ctags. 这个解决方案是我在编码时通常使用的。cscope 在查找当前活动的#defines 并仅显示活动代码方面不是很聪明,因此如果您有多个相同函数的定义,它会显示所有这些,您可以选择您实际查找的定义为了。

如果您对 IDE 感兴趣,那么我建议您使用eclipse. 它是一个免费软件,重量轻,可扩展,功能非常丰富。它适用于 Linux、Mac 和 Windows。与 cscope 类似,它也可以基于预构建数据库工作,并且数据库的大小完全基于源代码树。除非您有巨大的系统内存可用,否则我不建议将它用于整个树。

我通常对代码浏览所做的是,我将内核源代码放在网络位置,我在我的 mac 中映射 eclipse 的位置,并在 eclipse 中设置仅创建软链接选项(这样它就不会尝试创建它的自己的本地副本)和bam!您已准备好使用 IDE。如果您映射整个配置树,您将获得所有#defines,并且同一函数/变量的多个声明也得到解决。

于 2013-11-14T21:06:11.177 回答
1

在内核源代码中,执行

make cscope
cscope -p9 -d
于 2013-11-14T21:46:05.940 回答