我在linux内核上做了各种各样的任务,最后我不断阅读源代码。我还没有真正需要更改内核(我很喜欢所谓的“可加载内核模块”)所以我没有下载内核的源代码,只使用http://lxr.free-electrons.com/。而且我发现自己找到了一个有很多实现的函数,并开始猜测哪一个是我需要的函数。
例如,我在第496行查看文件Linux/virt/kvm/kvm_main.c是对list_add
的调用,点击它会给我两个选项:drivers/gpu/drm/radeon/mkregtable.c, line 84
和include/linux/list.h, line 60
- 很明显,kvm不会将我发送到“gpu”下的东西,但情况并非总是如此。我查看了文件的包含 - 没什么帮助。
所以我的问题:给定来自内核的文件,以及###行的函数调用,找到一个函数调用实际上继续的最佳方法是什么?
(我也很高兴听到有关不包含网站和/或要求我下载源代码的方法)
答案 0 :(得分:1)
内核中有很多东西是#define
' d或typedef
' d或映射到结构内部的函数(驱动程序中的fop
结构)。因此,浏览内核源代码并不容易。 lxr
网站可以帮助您,但当您遇到上述任何数据结构时,它无法继续使用。使用cscope/ctags
也是如此。尽管你明确提到反对它,但最好的方法是下载源代码并浏览它。
另一种方法是使用kgdb
并按功能检查代码功能,但这需要您了解您想要介入的功能,以节省大量时间。最后但并非最不重要的是,增加内核log
级别,并打印可通过dmesg
访问的日志。但这些都要求你拥有内核源代码。