Linux kernel 如何在内核中查找内容

Linux kernel 如何在内核中查找内容,linux-kernel,kernel,reverse-engineering,Linux Kernel,Kernel,Reverse Engineering,我在linux内核上执行各种任务,最终我会时不时地阅读源代码。我还没有真正需要更改内核(我擅长所谓的“可加载内核模块”),所以我没有下载内核的源代码,只是使用。我发现自己找到了一个有很多实现的函数,并开始猜测我需要哪一个 例如,我查看了第496行的文件是对list\u add的调用,点击它会给我两个选项:drivers/gpu/drm/radeon/mkregtable.c,第84行和include/linux/list.h,第60行——很明显,kvm不会将我的信息发送到“gpu”下的某个位置,

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

例如,我查看了第496行的文件是对
list\u add
的调用,点击它会给我两个选项:
drivers/gpu/drm/radeon/mkregtable.c,第84行
include/linux/list.h,第60行
——很明显,kvm不会将我的信息发送到“gpu”下的某个位置,但情况并非总是如此。我看了一下文件的内容,没有多大帮助

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


(我也很高兴听到关于不包括网站和/或要求我下载源代码的方法)

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


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

或者要求我下载源代码您想浏览linux内核的源代码而不下载它吗?不使用lxr站点?我在这里看到过类似的请求,我确实希望使用lxr。如果不可能,我将下载代码。我也愿意接受任何其他解决方案。刚才指出这两个是我的第一个和第二个偏好。@Martin我使用该网站作为第一个通行证。您还可以使用C-tags和C-scope检查kerne源代码,搜索它,等等。要按补丁、版本、分支等进行浏览,请参阅:@PeterL。谢谢你的C-tag和C-scope。他们看起来很有希望。LXR和一点思考通常能完成工作。看看所有找到的定义,去掉那些没有意义的。谢谢大家。值得一试。