【问题标题】:How to find stuff in the kernel如何在内核中找到东西
【发布时间】:2014-03-12 11:25:09
【问题描述】:

我在 linux 内核上执行各种任务,并且不时地阅读源代码。我还没有真正需要更改内核(我很擅长所谓的“可加载内核模块”)所以我没有下载内核的源代码,只是使用 http://lxr.free-electrons.com/ 。很多时候,我发现自己找到了一个有很多实现的函数,然后开始猜测我需要哪一个。

例如,我在第 496 行查看文件 Linux/virt/kvm/kvm_main.c 是对 list_add 的调用,单击它会给我两个选项:drivers/gpu/drm/radeon/mkregtable.c, line 84include/linux/list.h, line 60 - 很明显 kvm 不会发送我在“gpu”下的东西,但情况并非总是如此。我查看了文件的包含 - 没有太大帮助。

所以我的问题是:给定一个来自内核的文件和第 ### 行的函数调用,找到一个函数调用实际继续的最佳方法是什么?

(我也很乐意听到不包括网站和\或要求我下载源代码的方式)

【问题讨论】:

  • 或者要求我下载源代码 你想不下载就浏览linux内核的源码吗?并且不使用一些 lxr 网站?我在这里看到过类似的请求clientsfromhell.net
  • 我确实想使用 lxr。如果不能,我会下载代码。我也对任何其他解决方案持开放态度。只是指出这两个是我的第一和第二偏好。
  • @Martin 我首先使用lxr.free-electrons.com/source 站点。您还可以使用 C-tags 和 C-scope 来检查内核源、搜索它等。要按补丁、版本、分支等进行浏览,请参阅:git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git
  • @PeterL。感谢 C-tag 和 C-scope。他们看起来很有希望。

标签: linux-kernel kernel reverse-engineering


【解决方案1】:

内核中有很多东西是#define'd 或typedef'd 或映射到结构内部的函数(驱动程序中的fop 结构)。因此,没有简单的方法可以浏览内核源代码。 lxr 站点可以帮助您,但是当您遇到上述任何数据结构时,它就不能再进一步了。使用cscope/ctags 也是如此。尽管您明确提到反对它,但最好的方法是下载源代码并浏览它。

另一种方法是使用kgdb 并逐个检查代码功能,但这需要您对要介入的功能有一定的了解,以节省大量时间。最后但并非最不重要的一点,增加内核log 级别,并打印可通过dmesg 访问的日志。但是这些都需要你有内核源码。

【讨论】:

  • LXR 和一些思考通常可以完成工作。查看找到的所有定义并删除没有意义的定义。
  • 谢谢大家。值得一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多