先上干货:
1. 打开cmd
2. 运行 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
3. 运行 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
4. 运行 wsl --shutdown
5. 运行 bash
----
6. 运行bcdedit /set hypervisorlaunchtype auto (部分同学需要补充这条命令,见评论区)
下面我讲讲过程:
我遇到该问题的背景:
我的Windows需要使用一些linux机的功能,所以安装了wsl2的ubuntu子系统。(看这篇文章的同学应该都安装了wsl2了吧,我就不赘述了。)
小米机械狗产品cyberdog铁蛋,遥控器必须是装了APP的小米手机,还必须是小米10以上的一些新机子(有强制消费的嫌疑)。
买手机之前,我想到可以用电脑模拟器的方式来解决,于是安装了夜神模拟器。但是可惜没有小米10的支持(10月27号仅仅支持到小米9,以后更新可能会有支持。)
时间2021.10.27
第一次运行模拟器时的情况:
在第一次运行夜神模拟器时,弹窗提醒我的电脑打开了Hyper-V功能,模拟器无法正常工作。并提供了一键处理功能。

我对这种一键(黑箱)处理一向比较畏惧,了解Hyper-v后(windows自带的虚拟机),也猜到了大概是wsl2启动了它,并跟模拟器冲突了。但没办法哪怕弄坏wsl2也得试试这个模拟器,毕竟少买一个手机太香了。结果就是使用了一键处理后,不出意外地发现我的wsl没法使用了(不作就不会die)。
此处省略亿点点折腾。。
-------------------------------------------------
一、确认bios设置虚拟机功能仍旧打开。(这一步后来看没什么必要)
wsl 官网曾提醒设置bios虚拟机支持:
Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.
按住shift点击重启按钮,可以打开高级启动页面,选择BIOS。
重启后我发现BIOS虚拟机(VT)设置一直是开启的状态,所以那个一键处理,应该没有关闭这里的设置。
二、重新打开"适用于Linux的Window子系统"选项。
下一步是重新打开子系统允许。
方法一:cmd输入optionalfeatures,弹窗"Windows功能" ,可以 手动勾选"启用或关闭Windows功能"中的"适用于Linux的Window子系统",
方法二:直接运行一下命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
三、重新打开Hyper-v。
上一步完成后,wsl2子系统仍旧提示BIOS设置有问题,经查询资料其实是没有打开Hyper-V的原因:
注意这里不要在"启用或关闭Windows功能"(命令optionalfeatures)中勾选Hyper-v。
因为最新版的VM是自依赖HyperV的。下面是wsl官网的提示:
Additionally, if you have 3rd party hypervisors installed (Such as VMware or VirtualBox) then please ensure you have these on the latest versions which can support HyperV (VMware 15.5.5+ and VirtualBox 6+) or are turned off.
请直接cmd运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
四、重启wsl。
好了,看到这里基本已经解决问题了,但还差一步。
在我重启计算机之后ubuntu不报错了,但是仔细一看,怎么连账户都不显示了!直接黑屏卡死。 直接在命令行中单独输入wsl,也出现了同样卡死现象。

黑屏
这时我输入wsl -l -v 查看子系统状态,输出是正常的。其实此时只差最后一步,重启wsl。
先(关闭wsl功能)cmd运行命令:
wsl --shutdown
再运行: bash
到这里我的wsl恢复了正常,问题解决。
----
补充:(经过评论区反应)
部分同学还需要增加这条指令,恢复hypervisor
bcdedit /set hypervisorlaunchtype auto