在部署WSL2时,遇到0x80370102问题
前言
一直以来笔者的嵌入式开发环境都是在Windows下的Linux虚拟机,最近想折腾一下基于WSL2的开发环境部署。
关于WSL的部署,巨硬官方的文档《在 Windows 10 上安装 WSL》已经说的很详细。一般来说照着官方文档都没什么问题的,但偏偏笔者的两台机器部署都出现了同一个0x80370102的错误,而且按照文档没法解决,于是便有了本文,旨在记录一下这个问题的解决过程。
问题场景
1、在参考巨硬的官方文档部署WSL2,执行到步骤6:安装所选的 Linux 分发时,发生错误0x80370102;
2、在将WSL1版本的Linux分发转换到WSL2时,发生错误0x80370102。
问题分析
1、根据巨硬的官方文档,0x80370102是因为未启用BIOS虚拟化所引发的错误。网上搜这个错误,大部分都是说要在BIOS中启用CPU的虚拟化功能。
- 安装失败,出现错误 0x80070003 或错误 0x80370102
- 请确保在计算机的 BIOS 内已启用虚拟化。 有关如何执行此操作的说明因计算机而异,并且很可能在 CPU 相关选项下。
- WSL2 要求 CPU 支持二级地址转换 (SLAT) 功能,后者已在 Intel Nehalem 处理器(Intel Core 第一代)和 AMD Opteron 中引入。 即使成功安装了虚拟机平台,旧版 CPU(例如 Intel Core 2 Duo)也无法运行 WSL2。
2、奇怪的是,我的机器跑虚拟机都好好的,理论上CPU的虚拟化功能应该是打开的才对。遂打开任务管理器的性能界面,确实显示虚拟化已启用。
3、再次查看巨硬的文档《有关适用于 Linux 2 的 Windows 子系统的常见问题》,虽然没有直接描述这个问题,但是知道了WSL2是基于Windows的hyper-v虚拟平台的。会不会有可能是hyper-v平台出了问题?
WSL 2 是否使用 Hyper-V? 它是否可用于 Windows 10 家庭版?
WSL 2 在当前可使用 WSL 的所有 SKU 上都可使用,包括 Windows 10 家庭版。
最新版本的 WSL 使用 Hyper-V 体系结构来实现其虚拟化。 此体系结构将在“虚拟机平台”可选组件中提供。 此可选组件在所有 SKU 上都将可用。 当我们更深入地了解 WSL 2 版本时,可以看到有关此体验的更多详细信息。
4、顺道又看了下hyper-v的文档《Hyper-V 体系结构》,发现hyper-v平台依赖底层的Hypervisor(虚拟机监控程序?)和硬件打交道。
5、顺着Hypervisor这条线索,想起很久之前安装VMware的时候,因为冲突关掉了hyper-v《解决VMware Workstation 的虚拟化与window10自带的Hyper-V 服务冲突问题,完美卸载关闭(Hyper-V)》。好家伙,该不会是这个原因引起吧?当时博文中提到使用bcdedit这个工具查看和配置启动加载项。
2.第一个方法重启之后无效的话,进入方法二:用管理员权限打开CMD或window powershell 关闭 启动项
bcdedit /set hypervisorlaunchtype off
之后输入bcdedit 查看启动管理器,查看hypervisorlaunchtype是不是off状态的,重启之后生效。
6、通过hypervisor和bcdedit找到了BCDEdit的文档《BCDEdit /set - Windows drivers》,发现原来是没有启动虚拟机监控程序,导致hyper-v运行不了。
虚拟机监控程序设置
…
hypervisorlaunchtype [ Off | Auto ]
控制虚拟机监控程序启动选项。 如果要设置调试器以在目标计算机上调试 Hyper-V,请在目标计算机上将此选项设置为“自动”。…
问题解决
1、用管理员权限打开cmd或者powershell,执行下面的命令:
bcdedit /set hypervisorlaunchtype Auto
2、提示操作成功之后,重启即可解决问题。