このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
前回は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カーネルのソースコードを取り込む方法を紹介しました。
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...