WSL2开启kvm

最新版win10 wsl2 开启kvm的方法

WSL2开启kvm

0x00 前言

之前想着用wsl2去跑qemu,发现很多内核pwn题给的环境需要开启-enable-kvm选项,还有自己编译的内核也没法,然而wsl2没法开启kvm,解决办法就是去把hype-v给关了,老老实实用vmware/vmbox开个虚拟机,这样每次都要切来切去很麻烦。

直到看到vmware和vmbox都可以与hype-v并存,以为看到了曙光,没想到是没法开启虚拟化选项的。

后来看到WSL上这个Issues,当时也没这么多评论,不过暂且能用脚本实现。不过还是很麻烦。

最后看了这篇文章,跟着试了一遍,一直没报错,最后还是不行。某天又去看了看issuse,发现这个办法要最新阅览版。更新后一个新的发现就是wsl2速度明显变快了。。

0x01 环境

  • Windows 10 2004 20175.1000

  • Windows Feature Experience Pack 120.18201.0.0

  • wsl2 - Ubuntu 20

  • Intel i7-8550U

  • WSL-Linux-kernel: 4.19.121-microsoft-standard

  • qemu 5.0

0x02 编译Kernel

1
2
3
4
5
sudo apt -y install build-essential libncurses-dev bison flex libssl-dev libelf-dev cpu-checker qemu-kvm
tar -xf WSL2-Linux-Kernel-4.19.121-microsoft-standard.tar.gz
cd WSL2-Linux-Kernel-4.19.104-microsoft-standard/
## cp Microsoft/config-wsl .config 有bug 使用最新版commit已修复
make menuconfig

.config文件用这个 或者这个

确保里面的选项kvm的选项。

img

这里可选的编译为< M > 模块或者< * > 内置,建议内置吗模块的话后续每次重启都得自己加载一次。

确保Linux guest support enable选项。

img

退出保存。

1
make -j8

waitting…………

1
2
3
4
cp arch/x86/boot/bzImage /mnt/c/Users/<username>/bzImage
nano /mnt/c/Users/<username>/.wslconfig
### 如果是 <M> 模块编译
sudo make modules_install
1
2
3
4
5
[wsl2]
nestedVirtualization=true
kernel=C:\\Users\\<username>\\bzImage
debugConsole=true  ##可选
pageReporting=true ##可选
1
2
3
wsl.exe --shutdown Ubuntu
wsl.exe -d Ubuntu
nano /etc/modprobe.d/kvm-nested.conf

mod加载的话还要写入:

1
2
3
4
options kvm-intel nested=1
options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=1
options kvm-intel ept=1

之前模块编译的有bug版本的图 mount无法挂载。

img

成功的图 可以挂载。。无需手动加载mod

img

要先配置界面以及GPU支持可以参考这篇文章后续的部分,没这个需求。。

issuse

还是会遇到奇奇怪怪的坑。

An error occurred mounting one of your file systems. Please run 'dmesg' for more details.

报错信息:

1
2
3
4
5
6
7
8
[    2.268879] init: (1) ERROR: MountPlan9WithRetry:282: mount drvfs on /mnt/c (cache=mmap,noatime,msize=262144,trans=virtio,aname=drvfs;path=C:\;uid=0;gid=0;symlinkroot=/mnt/
[    2.268880] ) failed: 22
[    2.277772] 9pnet: Could not find request transport: virtio
[    2.280962] init: (1) ERROR: MountPlan9WithRetry:282: mount drvfs on /mnt/d (cache=mmap,noatime,msize=262144,trans=virtio,aname=drvfs;path=D:\;uid=0;gid=0;symlinkroot=/mnt/
[    2.280964] ) failed: 22
[    2.305491] init: (8) ERROR: CreateProcessParseCommon:874: Failed to translate D:\openSRC\WSL2-Linux-Kernel-4.19.121-microsoft-standard
[    2.312584] init: (8) ERROR: UtilTranslatePathList:2624: Failed to translate D:\Life_Tools\Sys_Tools\cmder\bin
[    2.319445] init: (8) ERROR: UtilTranslatePathList:2624: Failed to translate D:\Life_Tools\Sys_Tools\cmder\vendor\bin

这是内核的问题,很坑的地方。是官网没切换新的config文件造成的,换成新的重新编译即可。具体看着这个issuse 修复

重新编译内核。

参考

Licensed under CC BY-NC-SA 4.0
最后更新于 2023-08-17 17:30 UTC
(*╹▽╹*)
Built with Hugo
主题 StackJimmy 设计