【WSL2】Linuxカーネルのビルド+カーネルの入れ替え手順

2023/12/24に公開

WSL2上でLinuxカーネルのビルドをしたことが無かったので練習がてらやってみた。
ビルド手順とビルドしたカーネルを手動で入れ替える方法も調べてやってみたのでまとめる。

手順

1.カーネルのソースをダウンロードする

まずはビルドしたいLinuxカーネルのソースを取得してくる。
私の場合はとりあえず今入っているWSLのカーネルと同じバージョンのソースでやってみた。
以下のコマンドで現在インストールされているLinuxカーネルのバージョンを確認。

$ uname -r

私の環境では現在のLinuxカーネルのバージョンは以下。

5.15.133.1-microsoft-standard-WSL2

WSL2のLinuxカーネルのソースは以下のgithubでタグ付けされているのでここからビルドに使いたいバージョンのソースを探す。
https://github.com/microsoft/WSL2-Linux-Kernel/tags

探したらビルドしたいディレクトリでwgetコマンドを実施して対象のソースをダウンロードする。

$ https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.133.1.zip

zipなのでダウンロードしたら解凍する。

$ unzip linux-msft-wsl-5.15.133.1.zip

2.ビルドする

まずは以下のコマンドでビルドに必要なツール類をインストールする。

$ sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev

インストールしたら解凍したディレクトリ内に移動してwsl用のconfigファイルをコピーする。

$ cp Microsoft/config-wsl .config

コピーしたらファイルを開き、自分がビルドしたカーネルだと分かるようにCONFIG_LOCALVERSIONの設定値に目印をつけておく。

.config
-CONFIG_LOCALVERSION="-microsoft-standard-WSL2"
+CONFIG_LOCALVERSION="-microsoft-standard-WSL2-meloq"

保存したらmakeしてカーネルをビルドする。

$ make

エラーが出ずにmakeが終わったらビルド完了。
lsを実行してディレクトリ内にvmlinuxのバイナリファイルが作成されていればOK。

3.ビルドしたカーネルを入れ替える

ビルドしたカーネルをマウントしているWindowsディレクトリにコピーする。
コピー先の場所はどこでも良いが私はとりあえずWindowsのホームディレクトリに置いた。

$ cp vmlinux /mnt/c/Users/<username>/

次にwslのconfigファイル(.wslconfig)をWindowsのホームディレクトリに作成する。

$ touch /mnt/c/Users/power/.wslconfig

このファイルを編集して以下のように追記する。

[wsl2]
kernel=C:\\Users\\<username>\\vmlinux

追記したらファイルを保存し、WSLを再起動すればビルドしたカーネルで起動される。

WSL再起動後に以下のコマンドを実行して自分がビルドしたカーネルが使用されていることを確認できればOK。

$ uname -r
5.15.133.1-microsoft-standard-WSL2-meloq+

Discussion