このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
前回は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カーネルのソースコードを取り込む方法を紹介しました。
keisuke.kimura in Livox Mid-360をROS1/ROS2で動かしてみた
Sorry for the delay in replying. I have done SLAM (FAST_LIO) with Livox MID360, but for various reasons I have not be...
Miya in ウエハースケールエンジン向けSimulated Annealingを複数タイルによる並列化で実装しました
作成されたプロファイラがとても良さそうです :) ぜひ詳細を書いていただきたいです!...
Deivaprakash in Livox Mid-360をROS1/ROS2で動かしてみた
Hey guys myself deiva from India currently i am working in this Livox MID360 and eager to knwo whether you have done the...
岩崎システム設計 岩崎 満 in Alveo U50で10G Ethernetを試してみる
仕事の都合で、検索を行い、御社サイトにたどりつきました。 内容は大変参考になりま...
Prabuddhi Wariyapperuma in Livox Mid-360をROS1/ROS2で動かしてみた
This issue was sorted....