2009-09-30 5 views
6

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

  • ファイルが誤ってを除外されています。いくつかのファイルが誤っNetBeansは実際にそれらがカーネルにコンパイルされたとき、彼らは、プロジェクトに含まれるべきであると信じていないことを意味しており、プロジェクトで淡色表示されています。主な問題は、Netbeansは、データ構造や関数などのファイルに存在する定義を見落としますが、マクロ定義が見つからないことです。
  • 定義が見つかりません:わかりやすく - よくNetbeansは何かの定義を見つけることができません。これは、部分的に上記の問題の結果です。
  • は、ヘッダファイルを見つけることができません:自明誰でもLinuxカーネル開発のためのNetBeansを設定して成功を収めている場合、私は思ったんだけど

、そうであれば、どのような設定は彼らが使用していました。最終的には、Makefile(推奨)を解析するか、バイナリからデバッグ情報を抽出する(あまり望ましくないのでコンパイルを大幅に遅くする可能性がある)ためにNetbeansを探していて、実際にコンパイルされたファイルマクロは実際に定義されます。そして、これに基づいて、データ構造、変数、関数などの定義を見つけて、完全な自動補完をしたいと考えています。

は、私はいくつかの点でこの質問を前書きしてみましょう:

  • 私はVimの/ Emacsのを含むソリューションに興味がないんです。私はそれらのような人々を知っていますが、私はそれらのひとりではありません。タイトルとして
  • 示唆、私は完璧なカバレッジを好むだろうが、万人の定義の中で一つだけを逃す何かが明らかに細かい
  • でセットアップする方法Eclipseを私は
  • 必要なものを行うために知っても幸せになります

有用な「関連する質問」機能は、次の質問が関連していることを通知しました:https://stackoverflow.com/questions/149321/what-ide-would-be-good-for-linux-kernel-driver-development。それを読むと、IDEは特定のIDEをセットアップする方法を探しているのに対し、IDEの比較はもっと重要です。それでも、ユーザーのWade Mealingはこの種の開発でEclipseを扱う専門知識を持っているようですので、彼とあなたのすべての答えに感謝します。

乾杯お待ちください

答えて

0

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

私は本当にコメントできません私は実際にカーネル内のファイルに多くの注意を払っていないので、正しい定義を取り出し、対応するセクションをグレーアウトしていません。(これまで通り)

NetbeanをJavaのGUI開発用に好むので、私はLinuxの「C」IDEとしてNetbeansを使用することについても不思議でした。

0

私はこれが働くだろうと思います(様々なプロジェクトのための各ステップを実行されます):

[1]カーネルビルドscrを変更する.dファイルを残す。デフォルトでは削除されます。 [2]ビルドプロセスをファイルに記録します。 [3]ビルドログを解析するスクリプトを作成します。 [3.1]ビルドログから、すべての.cファイルを知っています。 [3.2] .cファイルから、whichが対応する.dファイルであることがわかります。 [3.3] .dファイルを調べ、インクルードされている.hファイルをすべて探します。 [3.4]完全な.cと.hファイルリストを作成します。 [4]新しいディレクトリを作成し、 "ln -s"または "ln"を使用して対象のファイルを選択します。

[4]に既存のソースコード用のNetbeansプロジェクトを作成します。 make-logファイルを使用するコードアシスタンスを設定します。 は、[2]でビルドするときのように、実際のソースコードとまったく同じです。

上記の手順にいくつかの説明:[2]で

ので、実際のビルドを行い、ログ・ファイルは、関心のある正確なファイルとフラグが含まれています。 後でnetbeansは正確なフラグを使って解析することができます。

[4]では、表示するファイルのみを選択します。カーネルツリー全体をネットビーンに組み込むことは実用的ではありません。

.dファイルを解析するトリックがあります:依存する項目の多くは、.hファイルへの実際のパスではなく、auto configファイルのlinux configセクションの一部の変更されたエントリです。どのヘッダが実際のヘッダファイルであるかを知るには、変更を元に戻す必要があります。

実際には、netbeansサイトに関するトピックがあります。これはディスカッションURL:http://forums.netbeans.org/ntopic3075.htmlです。そして、議論からリンクされたwikiページがあります:wiki.netbeans.org/CNDLinuxKernel。基本的にはmakeにCFLAGS = " - g3 -gdwarf-2"の接頭辞を付けてください。

+0

ありがとうございます。私はmake-logファイルと同様のものを試しましたが、結局同じ問題を抱えていました。指定したCFLAGSを使用すると、コンパイル時間が大幅に増加するため、PITAになります。 –

+0

これは過去の経験に基づいて動作するはずです。試してみましょう。いくつかのシンボルは時には紛失して再び現れますが、これは純粋にNetbeansの内部問題です。 – Minghua

+0

[Here](https://github.com/minghuascode/Nbk/blob/master/note-nbkparse)NetBeansがmake出力とdepから読み込んで解釈するのに適したmake-logファイルを生成するためのスクリプトを作成しましたファイル。はい、depファイルを残すためにLinuxのmakefileを変更する必要があります。ステップは少し長いですが、いったん完了すればすべてが簡単になります。この助けを願います。 – minghua

0

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

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

An illustrated guide to indexing the linux kernel in eclipse

2

私は、以前の答えを書きました。今私はソリューションのすべての詳細を思いつき、それを共有したいと思います。残念ながら、stackoverflowは以前の回答を編集することはできません。だから私はこの新しい答えにそれを書きます。

これにはいくつかのステップがあります。


[1]最初のステップは、DEPにファイルを残すために、Linuxのスクリプトを修正することである。デフォルトでは、ビルドでそれらを使用した後、それらのDEPのファイルが削除されます。それらのdepファイルには、Cファイルが依存する他のファイルに関する正確な依存関係情報が含まれています。ビルドに関係するすべてのファイルのリストを作成する必要があります。

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で詳述されています。したがって、このようなDEPファイルを削除しないようにそれらを作るためのlinux-X.Y.Z /スクリプトの下にあるファイルを変更します。おおよそあなたが行う:

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

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

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


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

関連する問題