😄

[Linux]: カーネルをコンパイルしてみる

に公開

[Linux]: カーネルをコンパイルしてみる

カーネルのコンパイルをやってみたメモです。
時間はある程度必要ですが、思ったよりも流れ作業のようにできて感動しました。

再起動後カーネルパニックになるのがどうしても解決できなかったので今後調査します。

1. 現在のカーネルのバージョンの取得

$ uname -r 
5.15.0-157-generic

2. 必要なパッケージのインストール

sudo apt update
sudo apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev bc

3. カーネルのソースコードを取得する

wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.12.51.tar.xz

4. ソースコードを解凍

cd /usr/local/src
sudo mv ~/linux-* .
sudo tar xvf *.tar.xz
rm -rf *.tar.xz

5. configファイルの作成

今回は学習用ということで現在のシステムをベースにする

cp /boot/config-$(uname -r) .config 
make olddefconfig

6. 設定ファイルの修正とカーネルのコンパイル

以下の2行をから文字列にしないとコンパイル時にエラーになる。

$ sudo vim .config

#------------------------------

# CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS=""

# CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_TRUSTED_KEYS=""

この時に発生するエラー文

make[3]: *** No rule to make target 'debian/canonical-revoked-certs.pem', needed by 'certs/x509_revocation_list'.  Stop.
make[2]: *** [scripts/Makefile.build:478: certs] Error 2
make[1]: *** [/usr/local/src/linux-6.12.51/Makefile:1945: .] Error 2
make: *** [Makefile:224: __sub-make] Error 2
vagrant@applewalk:/usr/local/src/linux-6.12.5

コンパイルを実行

sudo make 

# 全コア利用する場合
sudo make -j$(nproc)

7. カーネルモジュールのインストール

sudo make modules_install

8. カーネルのインストール

sudo make install

コンパイルエラーが発生した場合

make clean
make mrproper  # 完全にクリーンアップ

コンパイル時間をざっくり図ったところ以下のような感じでした。
マシンによってはまた違ってくるかもしれません。

コア数 時間
1 約10時間
3 約6時間
4 約4時間

またVirtualBox上で実行したのですが、ハードディスク容量が40GBでは容量不足でカーネルのインストールができないので、余裕をもって用意する必要があります。

最後に

何か間違っていることなどあれば、コメントに書いていただけると幸いです。
よろしくお願いいたします。

GitHubで編集を提案

Discussion