【WSL2】Linuxカーネルのビルド+カーネルの入れ替え手順
WSL2上でLinuxカーネルのビルドをしたことが無かったので練習がてらやってみた。
ビルド手順とビルドしたカーネルを手動で入れ替える方法も調べてやってみたのでまとめる。
手順
1.カーネルのソースをダウンロードする
まずはビルドしたいLinuxカーネルのソースを取得してくる。
私の場合はとりあえず今入っているWSLのカーネルと同じバージョンのソースでやってみた。
以下のコマンドで現在インストールされているLinuxカーネルのバージョンを確認。
$ uname -r
私の環境では現在のLinuxカーネルのバージョンは以下。
5.15.133.1-microsoft-standard-WSL2
WSL2のLinuxカーネルのソースは以下のgithubでタグ付けされているのでここからビルドに使いたいバージョンのソースを探す。
探したらビルドしたいディレクトリで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_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