这似乎是 lxr.free-electrons.com 背后的引擎 LXR 的一个限制:它不区分前向声明 ( struct task_struct;
) 和完整定义。
我选择的方法始终是查看文件名,因为给定结构定义的位置通常很明显(例如,在您的情况下,它与调度有关,因此sched.h
在文件列表中应该有它)。但是,我知道有人可能不熟悉 Linux 内核源代码,因此不知道该去哪里。
在 Linux 源代码树中查找结构定义的最佳方法是按字面搜索:
struct struct_name {
由于Linux 贡献者遵循严格的编码风格,因此结构定义应始终采用这种形式。
LXR 有一个自由文本搜索来应对它的局限性。不幸的是,它使用谷歌搜索,它忽略了大多数标点符号。GitHub 似乎也忽略了它们,还有 Google Code。
我的建议是克隆主线 Linux Git 存储库:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
然后grep
(或者,更好,ag
)您在include
目录中查找的内容:
grep -rin 'struct task_struct {' include
或者,使用ag
:
ag 'struct task_struct {' include
您将在结果中看到定义此结构的文件(通常只有一个),然后您可以转到 LXR 上的相应文件并继续您的研究。
这是一个使用第一个结果转到相应 LXR 页面的 shell 函数:
lxr() {
chromium "http://lxr.free-electrons.com/source/$(grep -rl "$1" include | head -1)"
}
或者,使用ag
:
lxr() {
chromium "http://lxr.free-electrons.com/source/$(ag -l "$1" include | head -1)"
}
替换chromium
为您最喜欢的浏览器命令。像这样使用它:
lxr 'struct task_struct {'
希望能帮助到你。