初心者向けKernelのビルド手順
Linuxを使っていると、カーネルの再構築が必要な場合も出てきます。かなり手順が複雑なのでメモしておきます。
★注意★
この記事では特にカーネルをいじってはいません。ただ、カーネルをビルドして入れ替えるだけの手順です。
記事の環境
以下の環境でビルドしました。
・Ubuntu17.10 Desktop
・4.13.0-16-generic(元のカーネル)
・4.13.4-10(入れ替えたカーネル)
ビルド手順
必要なパッケージのインストール
sudo apt-get -y update
sudo apt-get -y install build-essential
sudo apt-get -y install libncurses-dev
sudo apt-get -y install fakeroot
sudo apt-get -y install kernel-package
sudo apt-get -y install linux-source
sudo apt-get -y install libssl-dev
★カーネル4.16以降では下記のパッケージも必要です。
sudo apt-get -y install bison
sudo apt-get -y install flex
ソースをコピーして展開
/usr/src/linux-source-4.13.0.tar.bz2というファイルを作業フォルダにコピーします。
mkdir ~/src
cp /usr/src/linux-source-4.13.0.tar.bz2 ~/src/
.configファイルの作成
/bootからconfigファイルの元をコピーして下記の手順で作成します。
①フォルダを移動し、解凍
cd ~/src
tar xvf linux-source-4.13.0.tar.bz2
cd linux-source-4.13.0
cp /boot/config-4.13.0-16-generic ./.config
make oldconfig
②カーネル設定やソース変更
カーネルの設定を変更する場合は「make menuconfig」等を実行します。カーネルソースへ変更を行うのもこの段階でします。
③ビルド
make-kpkgコマンドを実行してカーネルをビルドします。
sudo -s
# 実コア+1が良いという記事があったので5
export CONCURRENCY_LEVEL=5
# 次のコマンドが時間かかります。
make-kpkg -j 8 --rootcmd fakeroot --initrd --append_to_version=-hoge1 --revision=001 kernel_image kernel_headers
★引数について★
-j 8
8個のジョブを並列で実行します。マルチコアのCPUで有効です。コア数×2が良いようです。
--initrd
作成するカーネルにinitrdを付けてくれます。これをしないと再起動後にKernel Panicを起こし起動しません。
--append_to_version -hoge1
パッケージ名のサフィックスです。
バージョン名は自分で分かりやすいものを付けましょう。
--revision 001
リビジョンを指定できます。
ビルドされたカーネルをインストール
ビルドした一つ上のディレクトリにカーネルのパッケージが作成されるのでdpkgコマンドでインストールします。
cd ..
dpkg -i linux-image-4.13.4-hoge1_001-amd64.deb
dpkg -i linux-headers-4.13.4_hoge1_001-amd64.deb
バージョンを確認
リブートしてインストールしたカーネルで起動したか確認してください。
reboot
$uname -r
ビルド時間について
カーネルビルド時間はPCの速度に依存します。私の場合は、Core-i7 920のPCで1時間、Atom Z8700のPCで4時間かかりました。
2回目以降のビルド
開発時はカーネルのソースを複数回ビルドする必要がありますが、以下の手順で再構築します。
cd ~/src/linux-source-4.13.0
sudo -s
export CONCURRENCY_LEVEL=5
make-kpkg -j 8 --rootcmd fakeroot --initrd --append_to_version -hoge2 --revision=002 kernel_image kernel_headers
cd ..
dpkg -i linux-image-4.13.4-hoge2_002-amd64.deb
dpkg -i linux-headers-4.13.4_hoge2_002-amd64.deb
reboot
というのを繰り返せばカーネルを入れ替えることができます。
★hoge2と002は適当に変えてください。
不要なカーネルパッケージの削除
不要になったカーネルは下記の手順で削除できます。
★動作中のカーネルを間違えて削除しないように注意しましょう。
インストールされている一覧を表示
dpkg --get-selections | grep linux- | grep -v deinstall
パッケージ名を指定して削除
sudo apt-get autoremove --purge linux-headers-4.13.4-hoge1
sudo apt-get autoremove --purge linux-image-4.13.4-hoge1
reboot
リストを再確認して削除されたか確認をします。