2021/03/18

WSL2のカーネルを自分でビルドして使う

 WSL2でubuntuをインストールすると、/lib/modules以下がカラなので、PC上で仮想CAN、仮想GPIOなどのドライバが使えなかったり、ローダブルカーネルモジュール(LKM)のビルドができません。
 このため、Linuxカーネルのコンフィグからこれらのオプションを有効にしたり、LKMをビルドできる環境を用意する必要があります。
 まずは、WSL2のLinuxカーネルを自分でビルドして使えることを確認します。

●今回の環境

 Windows10


 ディストリビューション

 カーネルバージョン

今回はカーネルのコンフィグはWSL2デフォルトのままビルドします。
今のカーネルバージョンが5.4.72なので、同じ5.4.72を使います。
仮想CANを有効にしたカスタムビルドは次回行います。

●ビルド手順

手順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:カーネルをビルド

$ cd WSL2-Linux-Kernel-linux-msft-5.4.72
$ make KCONFIG_CONFIG=Microsoft/config-wsl
 → vmlinuxファイルができる

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

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

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

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

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

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

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

$ uname -a
Linux earth 5.4.72-microsoft-standard-WSL2 #1 SMP Wed Mar 17 20:42:16 JST 2021 x86_64 x86_64 x86_64 GNU/Linux

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

以上で終わりです。

次回は、カーネルのカスタムビルドを行います。

0 件のコメント:

コメントを投稿