Linux の初心者でも、とりあえず kernel configuration を行う方法を説明したいと思います。自分がまだ慣れていない頃にハマった点などを織り込んで記載しています。
一般的にカーネルを開発する場合、開発者は以下のステップを踏んでいます。
- 開発目的に近い Linux BSP (Board Support Package)の kernel source と configuration を入手する。
- 開発項目を実装していく。
この記事では、開発項目としてデバイスドライバーを開発することを目的とした例を記載しています。
最初に menuconfig を起動した画面
ここで重要なことは、全部理解(調査)しようとしないということです。初めてのときは、どの部分を詳しく理解すべきかが分からず、全て細かく理解しようとして時間を大きく浪費する傾向があります。実際に自分もそうでした。ここで覚えるべきことは以下の4点です。
- Linux/x86 5.14.0 Kernel Configuration
現在の画面の階層(項目)を表しています。この画面がトップの画面で、バージョン番号がありますが、 Kernel Configuration と記載されていればトップ画面ということを表しています。 - Device Drivers
ここは、開発項目が Device Drivers に含まれることという理由だからです。 - < Select > < Exit >
menuconfig の項目を選択するか、その画面を抜けるときに使用します。よく間違うのが、選択したつもりで抜けていたということです。
Device Drivers 画面
ここでも重要なことは、全部理解しようとしないことです。ドライバ項目がスクロールが必要なくらいに大量にあるため、全部知ろうとしたら時間がいくらあっても足りません。開発で必要な項目がどこのドライバに属するかを調べます。
ここでは、開発対象にジョイスティックを追加することを例に説明します。
ジョイスティックは既に一般的に普及しているデバイス(言葉)なので、このデバイスドライバーの項目に現れています。従って、この画面から選択して階層を掘っていくことが一般的ですが、menuconfig には検索機能が備わっていることを説明したいので、ここで検索することにします。
- / (スラッシュキー)を押すと検索画面が表れます。
その画面に検索文字列を入力します。今回は joystick と入力しました。
- 検索結果画面でロケーションを知ります。
この画面でどこのデバイスを有効にするかの場所が分かります。もし初めて開発するハードウェアがある場合は、カテゴリーがどこに属するかがわかると思います。
- 開発機能を有効化します。
有効化で使用するキーの説明が上部にあります。Y/N/M の代わりにスペースキーも使うことができます。
- 変更したら階層をトップまで戻した保存します。
configuration ファイルの変更箇所
menuconfig 実行後の変更箇所を確認します。一般的には linux で diff コマンドを使いますが、ここでは分かりやすく説明するため Windows上にコピーした後で WinMerge を使います。
デバイスドライバーの上位層を有効化すると下層にあるシンボルが一挙に現れますが、ここでは CONFIG_INPUT_JOYSTICK が y になっていることを確認します。
上位層を有効化すると、依存した機能も自動的に有効化されます。この有効化の部分は不具合ではそのまま使用します。
CONFIG 使用箇所
configで定義されているシンボルは、カーネルソース内で使用されています。今回の JOYSTICK は Makefileで使用されています。実際に grep した例を掲載します。