Arch Linuxでカーネルビルドをした話
- Arch Linuxでカーネルビルドしたので、その時のメモ。
- archwikiを参考にビルドを行った。今回はtraditionalな方法を使ったので、手動でやることが多い。
ビルド方法
- まずはkernel.orgから最新のカーネルのソースを取って来てから解凍。
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.6.14.tar.xz
tar xJf linux-5.6.14.tar.xz
- gccのバージョンが10.1.0だと新しすぎるせいかエラーが出たので、gcc-8をインストールした。
yay -S gcc8
export CC=gcc-8
- 念の為、一度きれいにしておく。このコマンドで初期状態に戻せる。
make mrproper
- archのデフォルトのconfigを取ってくる。他のディストリだとconfigはboot以下にあることが多いらしいがarchだと以下にある。
zcat /proc/config.gz > .config
- ここからカーネルのコンパイル。初め、yes ' ‘とスペースを渡していたので失敗していた笑。
- make oldconfigをすると、configを更新できる。yesを渡さないと色々設定を聞かれる。
yes ''| make oldconfig
make > ../linux5-6-14.log 2>&1 &
- モジュールをインストール。
make modules_install
- コンパイルしたカーネルをbootディレクトリにコピー。コンパイルしたカーネルはarch以下にbzImageとして生成されるので、それをboot以下にコピーする。vmlinuzという名前を慣習的に付けるらしい。
cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-chika
-
RAMディスクの作成はarchwikiの通り。これでinitramfsができる。
-
System.mapのコピーもarchwikiの通り。
-
あとはブートローダの設定。grubを使っているので以下で新しいgrub.cfgに書き換える。
grub-mkconfig -o /boot/grub/grub.cfg
- これでrebootするとビルドしたカーネルで立ち上がった。
感想
- archwikiの通りにやるだけで簡単にカーネルビルドできるかと思ったら、そう簡単には行かなかった。gccのバージョンであったり、karnelのバージョンによってもうまく行かないものがあった(これはバグかも)。
- とりあえず、これでカーネルビルドする手順と仕組みが分かったので、また一つ前進したと思う。
- 今度はカーネルのソースをいじってから、ビルドしてみて、どうなるかをやってみたいと思う。