これは、lxr.free-electrons.com の背後にあるエンジンである LXR の制限のようです: 前方宣言 ( struct task_struct;
) と完全な定義を区別しません。
私の選択の方法は、常にファイル名を見ることです。これは、通常、特定の構造定義がどこにあるべきかが明らかであるためです(たとえば、あなたの場合、それはスケジューリングに関連しているためsched.h
、ファイルリストにあるはずです)。ただし、Linux カーネルのソース コードに慣れていないため、どこに行けばよいか分からないという人もいるでしょう。
Linux ソース ツリーで構造定義を見つける最善の方法は、文字どおりに検索することです。
struct struct_name {
Linux の貢献者は厳密なコーディング スタイルに従っているため、構造体の定義は常にこの形式を取る必要があります。
LXR には、その制限に対処するためのフリーテキスト検索があります。残念ながら、ほとんどの句読点を無視する Google 検索を使用しています。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
この構造を定義するファイル (通常は 1 つだけ) が結果に表示されるので、LXR の適切なファイルに移動して調査を続けることができます。
最初の結果を使用して適切な LXR ページに移動するシェル関数を次に示します。
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 {'
それが役に立てば幸い。