1

カーネル コードを閲覧し始めていますが、つまずきのブロックの 1 つは、関数呼び出しや構造体定義などを追跡する方法です。関数定義にすばやくジャンプして元に戻すことができる良い方法はありますか?

私は Source Navigator を試してみましたが、いいと思いますが、右クリックして定義を検索するように要求すると、複数のファイルに定義が表示されます。インクルードの 1 つから bar() を呼び出す foo.c にいる場合、foo によって参照される bar() に直接移動できるようにしたいと考えています。正しい定義 (たとえば、ソース ツリー内の複数のファイルに foo が参照しない bar() 関数がある場合)。

grep は使用しない方がよいでしょう。わかりました。これはコマンド ラインであり、そのためのイエーイですが、Source Navigator よりもさらに手間がかかります。

私は、IDE、コマンド ライン、または最適なものを使用することにオープンです (ただし、IDE の方が好きです)。では、カーネルのソース コードを探し回る最良の方法は何ですか?

4

2 に答える 2

2

コードを参照することが最善の目的である場合は、Linux 相互参照 Web サイトのいくつかを使用できます。http://lxr.linux.no/は非常に優れたサイトで、その目的を果たしています。利点は、ドロップダウン メニューの簡単な方法でタグを切り替えてブラウズできることです。それらには Linux .01 以降のものがあるため、カーネル ツリーのローカル コピーを保持する必要はありません。彼らはしばらくダウンしていましたが、今は回復しています。

カーネルのハッキングを計画している場合は、カーネル ソースのローカル コピーが必要です。そして、最良の選択肢は cscope です。db を作成しcscope -Rて vim で使用できます。も使用できますctags。このソリューションは、コーディング中に私が通常使用するものです。cscope は、現在アクティブな #defines を見つけてアクティブなコードのみを表示するという点であまりインテリジェントではありません。そのため、同じ関数の複数の定義がある場合、それらすべてが表示され、実際にどの定義を探しているかを選択するのはユーザー次第です。為に。

IDE に興味がある場合は、 をお勧めしeclipseます。これはフリーウェアで、軽量で拡張可能で、非常に機能が豊富です。Linux、Mac、および Windows で使用できます。cscope と同様に、ビルド前のデータベースに基づいて動作し、データベースのサイズは完全にソース ツリーに基づいています。巨大なシステム メモリが利用可能でない限り、ツリー全体に使用することはお勧めしません。

コードブラウジングで通常行うことは、カーネルソースをネットワーク上の場所に配置し、Mac で Eclipse の場所をマッピングし、Eclipse で作成のみのソフトリンクオプションを設定することです (そのため、作成しようとしません)。独自のローカル コピー) とバム !! IDE を使用する準備が整いました。また、構成されたツリー全体をマップすると、すべての #defines が取得され、同じ関数/変数に対する複数の宣言も解決されます。

于 2013-11-14T21:06:11.177 に答える
1

カーネルソース内で、実行

make cscope
cscope -p9 -d
于 2013-11-14T21:46:05.940 に答える