WSL2でカスタムKernelを使う

  • LINEで送る

こんばんにちは

WSL2からネイティブのLinux Kernelが動くようになったのですが,そのおかげでカスタムカーネルを指定して起動することができるようになりました.

現在,Microsoftからは 4.195.4 が提供されているので,今回は5.4をビルドして起動してみます.

事前に

デフォルトバージョン

デフォルトの状態では 4.19.104 でした.

root@K-san:~# uname -a
Linux K-san 4.19.104-microsoft-standard #1 SMP Wed Feb 19 06:37:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

ビルド環境

root@K-san:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:        20.04
Codename:       focal

必要パッケージインストール

root@K-san:~# apt install build-essential flex bison libssl-dev libelf-dev

kernelのダウンロード

5.4.51のカーネルがここにあります.

git clone

root@K-san:~# ls
root@K-san:~# git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
Cloning into 'WSL2-Linux-Kernel'...
remote: Enumerating objects: 8338041, done.
remote: Total 8338041 (delta 0), reused 0 (delta 0), pack-reused 8338041
Receiving objects: 100% (8338041/8338041), 1.48 GiB | 6.41 MiB/s, done.
Resolving deltas: 100% (7039063/7039063), done.
Updating files: 100% (61777/61777), done.
root@K-san:~# ls
WSL2-Linux-Kernel

checkout

root@K-san:~/WSL2-Linux-Kernel# git branch --list --all
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/linux-msft-wsl-4.19.y
  remotes/origin/linux-msft-wsl-5.4.y
  remotes/origin/master
root@K-san:~/WSL2-Linux-Kernel# git checkout linux-msft-wsl-5.4.y
Updating files: 100% (50286/50286), done.
Branch 'linux-msft-wsl-5.4.y' set up to track remote branch 'linux-msft-wsl-5.4.y' from 'origin'.
Switched to a new branch 'linux-msft-wsl-5.4.y'

ビルド

root@K-san:~/WSL2-Linux-Kernel# make KCONFIG_CONFIG=Microsoft/config-wsl -j$(nproc)
・・・
Setup is 16412 bytes (padded to 16896 bytes).
System is 9477 kB
CRC 46836a6b
Kernel: arch/x86/boot/bzImage is ready  (#1)

WSL2-Linux-Kernel/vmlinuxWSL2-Linux-Kernel/arch/x86/boot/bzImage のどちらも使用できます.

カーネルイメージの配置

Windowsから直接参照出来る場所にカーネルイメージをコピーしておきます.

root@K-san:~/WSL2-Linux-Kernel# cp ./vmlinux /mnt/d/Users/k-san/MEGA/wsl/linux-msft-wsl-5.4.51.vmlinux

カーネルイメージの指定

WSL共通の設定ファイルにて,カーネルイメージへのファイルパスを指定します.

PS C:\> notepad.exe $env:USERPROFILE/.wslconfig
PS C:\> cat $env:USERPROFILE/.wslconfig
[wsl2]
kernel=D:\\Users\\k-san\\MEGA\\wsl\\linux-msft-wsl-5.4.51.vmlinux

新しいカーネルで起動

PS C:\> wsl -l -v
  NAME         STATE           VERSION
* Ubuntu       Stopped         1
  CentOS8.2    Stopped         2
  Ubuntu2      Stopped         2
PS C:\> wsl --shutdown
PS C:\> wsl -d Ubuntu2 -- uname -a
Linux K-san 5.4.51-microsoft-standard-WSL2+ #1 SMP Sun Sep 6 02:37:58 JST 2020 x86_64 x86_64 x86_64 GNU/Linux

ビルドしたカーネルで起動できました.

最後に

カスタムしたカーネル使うような必要があればWSL2より普通に仮想マシンや実機使ったほうが良い気がしますが,特別な事情があればWSL2でも可能ということですね.

  • LINEで送る

コメントを残す

*