こんばんにちは
WSL2からネイティブのLinux Kernelが動くようになったのですが,そのおかげでカスタムカーネルを指定して起動することができるようになりました.
現在,Microsoftからは 4.19
と 5.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/vmlinux
と WSL2-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でも可能ということですね.