部署WSL2时遇到0x80370102问题

在部署WSL2时,遇到0x80370102问题

文章目录

前言

​ 一直以来笔者的嵌入式开发环境都是在Windows下的Linux虚拟机,最近想折腾一下基于WSL2的开发环境部署。

​ 关于WSL的部署,巨硬官方的文档《在 Windows 10 上安装 WSL》已经说的很详细。一般来说照着官方文档都没什么问题的,但偏偏笔者的两台机器部署都出现了同一个0x80370102的错误,而且按照文档没法解决,于是便有了本文,旨在记录一下这个问题的解决过程。

问题场景

1、在参考巨硬的官方文档部署WSL2,执行到步骤6:安装所选的 Linux 分发时,发生错误0x80370102;

2、在将WSL1版本的Linux分发转换到WSL2时,发生错误0x80370102。

部署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的虚拟化功能应该是打开的才对。遂打开任务管理器的性能界面,确实显示虚拟化已启用

部署WSL2时遇到0x80370102问题

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(虚拟机监控程序?)和硬件打交道。

部署WSL2时遇到0x80370102问题

5、顺着Hypervisor这条线索,想起很久之前安装VMware的时候,因为冲突关掉了hyper-v《解决VMware Workstation 的虚拟化与window10自带的Hyper-V 服务冲突问题,完美卸载关闭(Hyper-V)》。好家伙,该不会是这个原因引起吧?当时博文中提到使用bcdedit这个工具查看和配置启动加载项。

2.第一个方法重启之后无效的话,进入方法二:用管理员权限打开CMD或window powershell 关闭 启动项

bcdedit /set hypervisorlaunchtype off

之后输入bcdedit 查看启动管理器,查看hypervisorlaunchtype是不是off状态的,重启之后生效。

部署WSL2时遇到0x80370102问题

6、通过hypervisor和bcdedit找到了BCDEdit的文档《BCDEdit /set - Windows drivers》,发现原来是没有启动虚拟机监控程序,导致hyper-v运行不了。

虚拟机监控程序设置

hypervisorlaunchtype [ Off | Auto ]
控制虚拟机监控程序启动选项。 如果要设置调试器以在目标计算机上调试 Hyper-V,请在目标计算机上将此选项设置为“自动”。

问题解决

1、用管理员权限打开cmd或者powershell,执行下面的命令:

bcdedit /set hypervisorlaunchtype Auto

部署WSL2时遇到0x80370102问题

2、提示操作成功之后,重启即可解决问题。

上一篇:windows 10 中安装 WSL2


下一篇:PL2303芯片在android上的串口通信应用开发中的注意内容