Linuxカーネルソースコードを読むツール (2):Eclipse編

前回はcscope編でしたが、今回はEclipse編をお届けします。普段 cscope+ctags で困っているわけではありませんが、IDEを便利そうに使っているを見て、Linuxカーネルのプログラミングにも便利なのかなぁ、でも使ったことがないからどうすれば良いのかわからない、という方もきっといるのではと思います。というか、自分がそうでした。ということで、IDEにもいろいろありますが、ここではEclipseを取り上げます。理由は、ちゃんとした方法の解説があるからです 🙂

LinuxカーネルのソースコードをEclipseのプロジェクトに導入する方法はこちらです。
https://wiki.eclipse.org/HowTo_use_the_CDT_to_navigate_Linux_kernel_source
ここに書かれている手順に従えば、ばっちりです。

以上!

では、あんまりですので、順を追ってやってみましょう。

まず、Linuxカーネルをコンパイルしておきます。コンパイルする必要があるのは、.config に定義されているカーネルのコンフィグレーションをC言語のファイルに変換した autoconf.h が必要となるからです。

では、Eclipseを起動してEclipseのプロジェクトを作成します。EclipseにはCDTが必要です。

起動したら、メニューのFile→New→C Projectとたどって、C Projectのダイアログボックスを開きます。Project nameに適当なプロジェクト名を入れ、その下の Use default location のチェックを外して、Linuxカーネルのソースコードがあるディレクトリを指定します。その下のProject typeでは、Makefile projectからEmpty Projectを選択します。右側のToolchainsではLinux GCCを選択します。そして、Nextをクリックします。

Advanced settings… をクリックすると、Propertiesのダイアログボックスが表示されます。左側の C/C++ General をクリックし、その下に現れた Preprocessor Include Paths, Macros etc. を選択します。右側で、Languages には GNU C を選択肢、その右の Setting Entries からは CDT Setting Entries を選択します。ここで、その右側の Add… をクリックすると、ダイアログボックスが現れますので、ドロップダウンメニューからPreprocessor Macros Fileを選び、その下のFileに /usr/include/kconfig.h を入力し、OKをクリックします。

C/C++ General の下のIndexerをクリックします。右側のIndexer optionsにあるIndex source files not included in the buildのチェックを外します。

C/C++ General の下のPaths and Symbolsをクリックします。右側のIncludesタブを選び、その下でGNU Cを選びます。ここで、右側の Add… をクリックして現れるAdd directory pathダイアログボックスで、Workspace… をクリックします。すると、Folder selectionというダイアログボックスが出てきますので、Linuxカーネルの include ディレクトリを選択して追加すます。これを繰り返して include/uapi, arch/<arch>/include, arch/<arch>/include/uapi も追加します。

Includesタブの隣にある#Symbolsタブをクリックします。右側の Add… をクリックして現れるAdd symbolダイアログボックスで、Name: に __KERNEL__、Value: に 1 を入れ、OK をクリックします。

#Symbolsタブの右側の方にある > を何度かクリックすると、Source Location タブが表示されますので、それをクリックします。ディレクトリ名の左側の▶をクリックすると下にFilterと表示されますので、それを選択し、右側のEdit Filter…をクリックします。Source Folder Exclusion Patternsダイアログボックスが表示されるので、Add Multipe…をクリックします。Exclusion Pattern Selectionダイアログボックスが表示されるので、arch ディレクトリ以下の使用しないアーキテクチャ名を全て選択します。複数選択するには、シフトキーを押したり、コントロールキーを押したりしたまま選択します。選択したらOKをクリックします。

左側で、Paths and Symbolsの下のPreprocessor Include Paths, Macros etc.を選び、右側でProviderタブをクリックします。CDT GCC Built-in Compiler Settingsを選択し、下側のLanguage Settings Provider OptionsのCommand to get compiler specs: に -nostdinc を追加します。また、Allocate console in the Console Viewにチェックを入れます。OKをクリックして、Propertiesダイアログボックスへの入力はやっと終わりです。

C ProjectダイアログボックスでFinishをクリックすると、インデックスを開始しますので、しばらく待ちます。

これでやっと使える状態になりました。では、前回と同様に do_page_fault を検索してみましょう。SearchメニューからC/C++を選んで表示されるSearchダイアログボックスにシンボルを入れ、Searchをクリックします。

下側のSearch結果のウィンドウに結果が表示されるので、do_page_faultをクリックすると、上にエディタウィンドウが開き、ファイルが表示されます。

do_page_faultが選択された状態で右クリックして表示されるメニューからOpen Call Hierarchyを選択すると、do_page_faultへの&からの呼び出し階層を表示することができます。これは便利そうですね。

今回は、ソースコードを読む、という観点からEclipseにLinuxカーネルのソースコードを取り込む方法を紹介しました。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です