1

Eclipse IDE for C / C ++ Linux Developers(Indigo SR2)の組み込みシステム用のLinuxカーネルモジュール(ドライバー)を開発しています。カーネルのインクルードディレクトリをプロジェクトのインデックスへのパスに追加しました([プロジェクト]>[プロパティ]>[C / C++一般]>[パスとSybmols]->[インクルード](タブ)-> [追加...](ボタン))。ただし、カーネルのヘッ​​ダーのいくつかはファイルはasmdirを参照します。これは、実際にはlinux / asm-powerpcディレクトリ(私の場合)をlinux / asm-genericディレクトリの上にオーバーレイしたもので、特定のバージョンがジェネリックをオーバーライドします。

Eclipseのインデクサーに、最初に「asm」を「asm-powerpc」として解釈し、それが失敗した場合は、単に「asm」を探すのではなく、次に「asm-generic」を調べるように指示するにはどうすればよいですか。asm-powerpcをasmにシンボリックリンクすることはいくつかの助けになりますが、これを使用可能にするには、一般的な場所にのみ存在するヘッダーファイルが多すぎます。

ありがとう!

4

2 に答える 2

1

プロジェクトごとにパスを追加する代わりに、グローバル環境変数を Eclipse CDT に追加することもできます。Eclipse Kepler の場合、 でWindow > Preferences > C/C++ > Build > Environment変数を追加します。

  • C_INCLUDE_PATH=/usr/include/c++/${gcc-version}
  • CPLUS_INCLUDE_PATH=/usr/include:${KDIR}/include:${KDIR}/include/linux:${KDIR}/arch/${ARCH}/include

${var}上記を実際のエントリに置き換えます。たとえば、 に置き換え${gcc-version}ます4.6.3。次に、Eclipse を再起動すると、変数が適切に解決されるはずです。カーネル モジュールの開発には、おそらくこれらで十分です。

カーネル ソース全体を読む必要がある場合は、次のリンクをお読みください: http://wiki.eclipse.org/HowTo_use_the_CDT_to_navigate_Linux_kernel_source

于 2014-05-27T09:48:00.847 に答える
1

私が発見したように、カーネル ビルド プロセスと同様に、Eclipse にインデックスを付けるように指示するには、多くの要素が必要です。ただし、この特定の質問に対する答えはかなり単純でした。

Linux カーネル ビルド ディレクトリが として定義され${KDIR}、カーネル アーキテクチャが${ARCH}であると仮定すると、次のインクルード パスをプロジェクトに追加する必要があります。

  • ${KDIR}/include
  • ${KDIR}/arch/${ARCH}/include

でこれを行うにはProject Explorer、プロジェクトを右クリックしてからProperties > C/C++ General > Paths and Symbols > Includes (tab) > Add ... (button).

2番目のエントリがありませんでした。それを追加すると、この質問は解決しました。これらの 2 つのエントリを使用して、未解決のインクルードをチェックすると (右クリックProject > Index > Search for Unresolved Includes)、エラーは発生しませんでした。

今、私は別のつまずきにぶつかりました。一部のタイプ (u32 や bool など) は、Eclipse ではまだ定義されていません。(私の Makefile はエラーを生成しません。) これは、カーネル固有の変数が Eclipse ヘッダーの解析で定義されていないことに関連していると考えられます。これにより、インクルードの IFDEF がカーネル モジュールのコンパイル時と同じように評価されません。しかし、私はこれをまだ解決していません。それは別の質問に関係しています。:)

于 2012-05-05T03:27:23.933 に答える