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のバージョンによってもうまく行かないものがあった(これはバグかも)。
  • とりあえず、これでカーネルビルドする手順と仕組みが分かったので、また一つ前進したと思う。
  • 今度はカーネルのソースをいじってから、ビルドしてみて、どうなるかをやってみたいと思う。

comments powered by Disqus