Raspberry Pi 5を、改造しやすい(?)Ubuntu22.04でいろいろ制御してみあたい。
カーネルビルドに関して、個人的にはマスターしたい苦行ポイントが4つある。
- カーネル設定ファイルを正しく設定したい
- カーネルが起動しないとき、速やかに解決できるようになりたい
- 既存デバイスの動作をカスタマイズしたい
- 新規デバイスを開発して、Linuxで動かしたい
A. カーネルコードを取得
-
Ubuntu 22.04に近いカーネルコードを探す。極端にバージョンに差があると、カーネル以外のものが動かなくなるかも。
-
Ubuntuサイトから取得したカーネルコードはビルドできなかった(なんで?)
# uname -r
6.5.0-21-generic
# cd /home
# wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.5.13.tar.xz
# tar xvf linux-6.5.13.tar.xz
# cd linux-6.5.13/
B. カーネル設定ファイルを編集
# cp /boot/config-6.5.0-21-generic .config
# vi .config
変更前
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
変更後
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
C. ビルド環境を準備
# apt install make gcc flex bison libssl-devel libelf-dev
D. カーネル設定ファイルを適用する
- 途中、対話があったら、[ENTER]する
- ちゃんと理解して、正しく編集するべき【苦行ポイント1】
# make localmodconfig
E. メイクしてインストールする
# make
# make INSTALL_MOD_STRIP=1 modules_install
# make INSTALL_MOD_STRIP=1 install
-
INSTALL_MOD_STRIP=1を付けないと、大量のデバッグシンボルでramdiscがパンクして起動できないことがある
-
INSTALL_MOD_STRIP=1は初回のビルド時だけでよい?(不明)
F. 起動してみる
- メイクとインストールが完了したら、再起動してみる
- 新しいカーネルで動作していることを確認する
# uname -a
Linux ubu22.morifuku.com 6.5.13 #1 SMP PREEMPT_DYNAMIC Sat Mar 2 08:25:34 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
- 起動しなかったら、
- 強制リブートして、起動オプションで「最終正常起動カーネル」を選択し、起動する
- 問題点を自力で直す【苦行ポイント2】
G. カーネルコードをいじってみる
- ソースコードを変更したら、手順E〜手順Fを行う
H. なぜカーネルコードをいじるのか
- カーネルの動作内容を詳細に観察するためのprintk文を挿入する(初級者)
- 既存デバイスの動作をカスタマイズする(中級者)【苦行ポイント3】
- 新規デバイスを開発して、Linuxで動かす(上級者)【苦行ポイント4】
以上