LoginSignup
1
0

Ubuntu 22.04 カーネルビルド手順

Last updated at Posted at 2024-03-02

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】

以上

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0