7

私は Linux カーネルの開発を行っており、Netbeans を使用しようとしています。Make ベースの C プロジェクトのサポートが宣言されているにもかかわらず、完全に機能する Netbeans プロジェクトを作成することはできません。これは、完全なデバッグ情報を使用してコンパイルされたカーネル バイナリを Netbeans が分析するようにコンパイルしているにもかかわらずです。問題は次のとおりです。

  • ファイルが間違って除外されている: 一部のファイルがプロジェクトで誤ってグレー表示されています。これは、実際にはカーネルにコンパイルされているにもかかわらず、Netbeans がプロジェクトに含める必要があると認識していないことを意味します。主な問題は、Netbeans がこれらのファイルに存在する定義 (データ構造や関数など) を見逃すだけでなく、マクロ定義も見逃すことです。
  • 定義が見つかりません: かなり自明です - 多くの場合、Netbeans は何かの定義を見つけることができません。これは、部分的に上記の問題の結果です。
  • ヘッダーファイルが見つかりません:自明です

Linux カーネル開発用の Netbeans のセットアップに成功した人がいるかどうか、もしそうなら、どのような設定を使用したかを知りたいです。最終的には、Netbeans が Makefile を解析する (推奨) か、バイナリからデバッグ情報を抽出する (コンパイルが大幅に遅くなる可能性があるためあまり望ましくない) ことができ、どのファイルが実際にコンパイルされ、どのファイルがマクロは実際に定義されています。次に、これに基づいて、データ構造、変数、関数などの定義を見つけて、完全なオートコンプリートを実現したいと考えています。

この質問の前に、いくつかの点を述べさせてください。

  • Vim/Emacs を含むソリューションには興味がありません。彼らが好きな人がいることは知っていますが、私はその一人ではありません。
  • タイトルが示すように、必要なことを実行するために Eclipse をセットアップする方法も教えていただければ幸いです。
  • 私は完璧なカバレッジを望んでいますが、100 万分の 1 の定義しか見逃していないものは明らかに問題ありません

SO の便利な「関連する質問」機能により、次の質問が関連していることがわかります: https://stackoverflow.com/questions/149321/what-ide-would-be-good-for-linux-kernel-driver-development。それを読むと、問題はIDE間の比較ですが、特定のIDEをセットアップする方法を探しています。それでも、ユーザーの Wade Mealing は、この種の開発で Eclipse を使用することについてある程度の専門知識を持っているようです。そのため、彼の (そしてもちろんあなたのすべての) 回答に感謝します。

乾杯

4

6 に答える 6

4

Linux カーネル開発では Eclipse がかなり人気があるようです。

于 2009-10-04T14:21:24.757 に答える
2

私は以前に答えを書きました。今、私は解決策のすべての詳細を思いついたので、それを共有したいと思います. 残念ながら、stackoverflow では以前の回答を編集できません。だから私はこの新しい答えにそれを書きます。

これにはいくつかの手順が含まれます。


[1] 最初のステップは、Linux スクリプトを変更して dep ファイルを残すことです。デフォルトでは、ビルドでそれらを使用した後、それらの dep ファイルは削除されます。これらの dep ファイルには、C ファイルが依存する他のファイルに関する正確な依存情報が含まれています。ビルドに関係するすべてのファイルのリストを作成するには、それらが必要です。したがって、linux-xyz/scripts の下のファイルを変更して、次のように dep ファイルを削除しないようにします。

linux-3.1.2/scripts

Kbuild.include: echo do_not_rm1 rm -f $(depfile);
Makefile.build: echo do_not_rm2 rm -f $(depfile);

他の手順は、私の github コード プロジェクト ファイルhttps://github.com/minghuascode/Nbk/blob/master/note-nbkparseで詳しく説明されています。大まかに次のようにします。

[2] 設定方法で設定しますが、「O=」オプションを使用して、obj ファイルを別のディレクトリに構築してください。

[3] 次に、同じ "O=" オプションと "V=1" オプションを使用して Linux をビルドし、make の出力をファイルに保存します。

[4] 上記の github プロジェクトから nbkparse スクリプトを実行します。[4.1] make ログ ファイルと dep ファイルを読み込みます。ミラーリング コマンドを生成します。[4.2] ミラーリング コマンドを実行して、関連するソース ファイルを別のツリーにハード リンクし、NetBeans が使用する make-log ファイルを生成します。


次に、ミラー化されたソース ツリーと生成されたログ ファイルを使用して、NetBeans C プロジェクトを作成します。NetBeans は、すべてのカーネル シンボルを解決できる必要があります。また、ビルドに関係するファイルのみが表示されます。

于 2012-02-07T05:47:02.907 に答える
1

Eclipse wiki には、これに関するページがあります: CDT を使用して Linux カーネル ソースをナビゲートする方法

于 2012-08-15T14:42:51.543 に答える
0

このリンクは、Eclipse で適切なインデックス作成を設定するのに非常に役立ちます。私の場合、カーネルオプションに合わせてEclipse環境を変更するスクリプトを実行する必要があります

$ autoconf-to-eclipse.py ./include/generated/autoconf.h .

Eclipse で Linux カーネルをインデックス化するための図解ガイド

于 2012-01-17T19:53:40.033 に答える
0

これはうまくいくと思います(さまざまなプロジェクトの各ステップを実行します):

[1] .d ファイルを残すようにカーネル ビルド スクリプトを変更します。デフォルトでは、それらは削除されます。[2] ビルド プロセスをファイルに記録します。[3] ビルド ログを解析するスクリプトを記述します。[3.1] ビルド ログから、すべての .c ファイルがわかります。[3.2] .c ファイルから、対応する .d ファイルがどれかがわかります。[3.3] .d ファイルを調べて、含まれているすべての .h ファイルを見つけます。[3.4] 完全な .c および .h ファイル リストを作成します。[4] 新しいディレクトリを作成し、「ln -s」または「ln」を使用して対象のファイルを選択します。

次に、[4] にある既存のソース コードの Netbeans プロジェクトを作成します。make-log ファイルを使用するようにコード支援を構成します。[2] でビルドしたときとまったく同じ有効なソース コードが表示されるはずです。

上記の手順の説明:

[2] で実際のビルドを実行して、ログ ファイルに目的のファイルとフラグが正確に含まれるようにします。後の netbeans は、正確なフラグを使用して解析できるようになります。

[4] で、見たいファイルだけを選択します。カーネル ツリー全体を netbeans に組み込むのは非現実的です。

.d ファイルの解析にはコツがあります。依存項目の多くは .h ファイルへの実際のパスではなく、自動構成ファイルの Linux 構成セクションの一部の変更されたエントリです。変更を元に戻して、実際のヘッダー ファイルを特定する必要がある場合があります。

実はネットビーンズのサイトに話題があります。これはディスカッション URL: http://forums.netbeans.org/ntopic3075.htmlです。また、ディスカッションからリンクされた wiki ページがあります: wiki.netbeans.org/CNDLinuxKernel 。基本的に、make の前に CFLAGS="-g3 -gdwarf-2" を付けるよう求められます。

于 2010-06-09T01:05:18.027 に答える
0

私はいくつかの組み込み Linux 開発を行ってきました。カーネル モジュールの開発を含め、Linux カーネル ソース コード全体を別のプロジェクトとして Eclipse にインポートしました。私は(これまでのところ)Eclipse の外部でカーネル自体を構築してきましたが、カーネルを構築するために Eclipse 内で構築環境を設定できない理由はありません。私のプロジェクトでは、適切な Linux ソース インクルード ディレクトリを指すように PATH プロパティをセットアップする限り、構造体フィールドなどの名前補完についてはかなり良いようです。

カーネル自体内のファイルにあまり注意を払っていないため、正しい定義が選択され、対応するセクションがグレー表示されていないかどうかについては、コメントできません(これまでのところ)。

Java GUI 開発には Netbean の方が好きなので、Linux の「C」IDE として Netbeans を使用することについても疑問に思っていました。

于 2009-10-02T01:55:27.567 に答える