メインコンテンツまでスキップ

カーネルのインストール(Arch Linux 版)

Arch Linux で Linux カーネルの開発をしたときのメモです.基本的に研究では無難に Ubuntu を使用していますが,なんとなく Arch Linux にカスタムカーネルをインストールしようとしたら Ubuntu と同じ手順ではうまく行かないことがわかりました.Arch Build System を使う方法もありますが,ここでは PKGBUILD などは使わずにコンパイル,インストールする方法を紹介します.

Download Source Code

ソースコードは下記のページからダウンロードしました.

https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.17.tar.gz

curl -O  https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.17.tar.gz
tar xf linux-5.17.tar.gz

Install Neccesary Packages

コンパイルに必要なパッケージをインストールします.

sudo pacman -S bc cpio

Build

Generate .config file

.config ファイルは make olddefconfig などで作るのではなく Arch のデフォルト設定を使用します.

zcat /proc/config.gz > .config

Compile & Install

カーネルイメージとモジュールのコンパイル,モジュールのインストールを行います.

make -j5 && make modules_install

作成したイメージを /boot に移動しておきます.

cp arch/x86/boot/bzImage /boot/vmlinuz-linux517

initramfs

initramfs のイメージを作成するために設定ファイルを 2 つ作成します.1 つ目は /etc/mkinitcpio.conf をコピーして作ったファイルで,モジュールや圧縮形式の変更をします.

vfat を入れなかったときに FAT32 でフォーマットした EFI パーティション /boot のマウントが失敗したので vfat を追加しています.また,/boot のパーティションにあまり大きな領域を割り当てておらず,ディスク容量が足りなくなってしまったため圧縮率の高い xz で圧縮するように指定しています.

cp /etc/mkinitcpio.conf /etc/mkinitcpio-linux517.conf
- MODULES=()
+ MODULES=(vfat)
...
- #COMPRESSION="xz"
+ COMPRESSION="xz"

2 つ目の設定ファイルとして /etc/mkinitcpio.d/linux517.preset を作成します.これは mkinitcpio で initramfs を作成するときのテンプレートのようなもので,もともとある linux.preset を修正して使います.変更点はカーネルイメージのファイルパスや /etc/mkinitcpio-linux517.conf のファイルパスを変える点です.

cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux517.preset
# mkinitcpio preset file for the 'linux' package

ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux517"

PRESETS=('default')

default_config="/etc/mkinitcpio-linux517.conf"
default_image="/boot/initramfs-linux517.img"
#default_options=""

#fallback_config="/etc/mkinitcpio.conf"
fallback_image="/boot/initramfs-linux517-fallback.img"
fallback_options="-S autodetect"

initramfs を下記のコマンドで作成します.

mkinitcpio -p linux517

GRUB Config & Reboot

最後に GRUB の設定を更新して再起動します.

grub-mkconfig -o /boot/grub/grub.cfg
reboot