2021/03/21

WSL2のカーネルをカスタムビルドする

 WSL2のLinuxカーネルを、コンフィグ設定してビルド・使用します。

●今回の環境

 Windows10


 ディストリビューション

 カーネルバージョン

 環境は前回と同じです。
 前回のビルド環境をそのまま使う場合は、下記の手順3から始めてください。

●ビルド手順

手順1:カーネルソースをダウンロード

 カーネルのソースコードはGitHubのMicrosoft公式のものを使用します。
$ curl -OL https://github.com/microsoft/WSL2-Linux-Kernel/archive/linux-msft-5.4.72.tar.gz
 → linux-msft-5.4.72.tar.gz ファイルができる

 解凍します。
$ tar -zxf linux-msft-5.4.72.tar.gz
 → WSL2-Linux-Kernel-linux-msft-5.4.72 ディレクトリができる

手順2:カーネルのビルドに必要なソフトをインストール

 カーネルソース内の README-Microsoft.WSL2 ファイルの2に書かれているツールをインストールします。
 ただし、これaptでインストールするのに、sudo とinstall の間に apt が抜けているので、aptを追記して実行すること(昔から抜けてる。いいかげん直しなよ。。。)
$ sudo apt install build-essential flex bison libssl-dev libelf-dev

手順3:.configファイルの準備

 ソースのディレクトリへ入り、Microsoft/config-wsl ファイルをコピーする
$ cd WSL2-Linux-Kernel-linux-msft-5.4.72
$ cp Microsoft/config-wsl .config


手順4:.configファイルを編集

 方法はいくつかありますが、今回はmenuconfigを使ってGUIで編集します。

 事前にmenuconfig用ツールのインストールが必要
$ sudo apt install libncurses-dev

 上記のツールが入っていれば、以下のコマンドを実行
$ make menuconfig


 ここで、カーネルに組込む、またはカーネルモジュールの有効・無効を切り替えます。

 今回は、カーネルの名前を変えることとします。
 以下の項目を設定します。

 General setup   --->
   Local version - append to kernel release

 WSL2のデフォルトは「-microsoft-standard-WSL2」なので、この名前を適当に変えます。
 今回は例として「-microsoft-standard-WSL2-custom」とします。
 この設定は、「uname -r」 で表示される名前が変ります。

 書き換え出来たら、セーブして終了します。

手順5:カーネルをビルド

$ make
 → vmlinuxファイルができる

 前回はコンフィグファイルを指定しましたが、今回は先ほど作った .config を使います。

手順6:vmlinuxファイルをWindows側へコピー

 コピー先は任意の場所を使用できるが、Windowsの領域へコピーする。
 今回の例では、Windowsの%USERPROFILE%ディレクトリの下にwsl2/5.4.72-microsoft-standard-WSL2-customディレクトリを作って、そこへコピーすることにします。
 ※(Windowsのユーザー名)は各環境で変えること
 ※%USERPROFILE%ディレクトリ = c:\Users\(Windowsのユーザー名) のディレクトリ
$ mkdir -p /mnt/c/Users/(Windowsのユーザー名)/wsl2/5.4.72-microsoft-standard-WSL2-custom
$ cp vmlinux /mnt/c/Users/(Windowsのユーザー名)/wsl2/5.4.72-microsoft-standard-WSL2-custom

手順7:.wslconfigファイルで使用するlinuxカーネルを指定する

 %USERPROFILE%ディレクトリの直下に .wslconfigファイルを、以下の内容で作る。
 ※"\"はエスケープシーケンスになるので2つ続けること
[wsl2]
kernel = c:\\Users\\(Windowsのユーザー名)\\wsl2\\5.4.72-microsoft-standard-WSL2-custom\\vmlinux

手順8:wslをシャットダウンする

 PowerShellで、wslをシャットダウンする。
PS > wsl --shutdown

手順9:wslを起動し、unameでバージョンを確認する

$ uname -a
Linux earth 5.4.72-microsoft-standard-WSL2-custom #1 SMP Wed Mar 21 15:20:57 JST 2021 x86_64 x86_64 x86_64 GNU/Linux

 ビルド日時などから、今作ったカーネルで起動できていることを確認する。


以上で、カーネルのカスタムビルドから起動するまででした。

次回は、Linuxカーネルの仮想CAN通信を有効にします。

0 件のコメント:

コメントを投稿