Skip to main content
适用于 Linux 的 Windows 子系统(WSL)是一项 Windows 功能,可在不使用虚拟化软件的情况下在 Windows 上运行 Linux 发行版。WSL 允许 Linux 用户空间与 Windows 应用程序在同一主机上并行运行,无需单独的虚拟机。 下图显示了设置 WSL 并安装 Ubuntu 所涉及的任务:
验证 Windows 主机系统要求、启用 WSL 并安装 Ubuntu,以及在 WSL 中配置 Ubuntu 设置

图:在 Windows 上设置 WSL 并安装 Ubuntu 的工作流

验证 Windows 主机系统要求

下表列出了 WSL 环境进行 Qualcomm Linux 构建所需的最低硬件资源:

启用 WSL 并安装 Ubuntu

Qualcomm Linux 使用 Ubuntu 22.04 Linux 发行版。启用 WSL 和安装 Ubuntu 的步骤因 Windows 版本而异。请按照适用于您版本的说明操作:
有关如何启用 WSL 2 并安装 Ubuntu 22.04 的说明,请参阅在 WSL 2 上安装 Ubuntu。

在 WSL 中配置 Ubuntu 设置

要设置 WSL 环境,请在 WSL 中配置 WSL 特定设置。使用 wsl.conf 文件为您安装的 Linux 发行版配置以下 WSL 特定设置:
  • [automount] options = "metadata":启用 Linux 风格的文件权限
  • [boot] systemd = true:在 WSL 中启用 systemd
  • [boot] command = systemctl start docker:在 WSL 启动时自动启动 Docker 服务
每次打开 WSL 时,WSL 都会自动应用 wsl.conf 文件中的设置。 要配置 WSL 特定设置,请执行以下操作:
  1. 在 Ubuntu 终端中,使用 sudo 命令将以下内容添加到 /etc/wsl.conf 文件中:
    /etc/wsl.conf
  2. 在 Windows PowerShell 中,运行以下命令以重启 WSL:
    PowerShell

为 WSL 启用 USB 设备访问

WSL 2 运行在一个轻量级 VM 中,默认无法访问 USB 设备。因此,lsusb 等命令和烧录工具无法检测到目标设备。 要为 WSL 启用 USB 访问,请使用 usbipd-win 通过 USB/IP 将 USB 设备的流量从 Windows 传递到 WSL:
  1. 以管理员身份打开 Windows PowerShell,并运行以下命令来安装 usbipd-win:
    PowerShell
  2. 可选:要启用镜像网络(mirrored networking),请在 Windows PowerShell 中运行以下命令,在您的用户配置文件中创建 .wslconfig 文件:
    PowerShell
    在公司管理或受组策略管理的计算机上,默认的网络地址转换(NAT)网络模式可能会阻止 usbipd 所需的防火墙规则,导致设备附加失败。切换到镜像网络会通过环回(loopback)路由连接,从而绕过该限制。
    文件必须命名为 .wslconfig,而不是 .wslconfig.txt。记事本可能会附加 .txt 扩展名。因此,请使用 Windows PowerShell 创建文件并应用正确的扩展名。
  3. 要重启 WSL,请运行以下命令:
    PowerShell
  4. 在 Ubuntu 终端中,运行以下命令来安装 USB/IP 客户端工具:
    Ubuntu terminal
  5. 以管理员身份打开 Windows PowerShell,并运行以下命令列出已连接的 USB 设备:
    PowerShell
  6. 记下要烧录设备的 BUSID。对于烧录 Qualcomm 设备,BUSID 通常是 QDLoader 9008 设备(05c6:9008,EDL 模式)或 Fastboot 设备。
    Sample output
  7. 以管理员身份打开 Windows PowerShell,并运行以下命令绑定设备一次。将 <busid> 替换为第 6 步中的 BUSID(例如 1-4):
    PowerShell
绑定在重启后仍然有效,因此每个设备只需绑定一次。
  1. 验证设备的 STATE 是否变为 Shared。
  2. 在 Windows PowerShell 中,运行以下命令将设备附加到 WSL:
    PowerShell
    • 每次重新插拔或模式切换后需重新附加:当设备在烧录期间更改模式时(例如正常 → EDL 9008,或 → fastboot),Windows 会重新枚举该设备,通常会分配新的 BUSID,并且 WSL 附加会断开。请重新运行 usbipd list,然后运行 usbipd attach --wsl --busid <new-busid>。这是在 WSL 中烧录 Qualcomm 设备时的常见错误来源。
    • 每次 WSL 重启后需重新附加:附加不会在 wsl --shutdown 或系统重启后保留;只有绑定会保留。
  3. 在 Ubuntu 终端中,运行以下命令确认 Ubuntu 检测到该设备:
    Ubuntu terminal
    该设备必须出现在列表中,例如如下所示:
    在 WSL 内运行的烧录工具现在可以检测到该设备。有关烧录说明,请参阅烧录软件镜像。
  4. 要在烧录后分离设备,请在 Windows PowerShell 中运行以下命令:
    PowerShell

排查 WSL 问题

解决在使用 WSL 进行 Qualcomm Linux 构建时可能出现的与性能、磁盘空间、域名系统(DNS)、构建错误和 USB 直通相关的常见问题。

WSL 中的性能问题

如果您在 WSL 中遇到性能问题,请使用 .wslconfig 文件调整全局资源限制,例如内存、CPU 和交换空间。这些资源限制适用于所有 WSL 2 发行版。 请逐步调整设置,并在每次更改后验证结果。有关更多信息,请参阅 WSL 中的高级设置配置。
不要将内存和 CPU 值配置为与主机规格一致。过度分配可能会降低稳定性并对 Windows 性能产生不利影响。

C 盘磁盘空间不足以进行 Qualcomm Linux 构建

默认情况下,Ubuntu 安装在 C 盘上。如果 C 盘没有足够的可用空间进行 Qualcomm Linux 构建,请将 Ubuntu 安装移动到其他驱动器。 要移动 Ubuntu 安装,请以管理员身份在 Windows PowerShell 中运行以下命令:
PowerShell
例如:
PowerShell

WSL 中的 DNS 解析失败

WSL 可能无法解析域名,导致依赖网络的操作(例如获取软件包或克隆仓库)因 DNS 错误而失败。 要修复 DNS 解析失败,请使用 resolv.conf 文件手动配置 DNS 设置:
  1. 要禁用自动生成 resolv.conf,请在 Ubuntu 终端中运行 sudo 命令,将以下内容添加到 /etc/wsl.conf 文件中:
    /etc/wsl.conf
  2. 要在 resolv.conf 中设置 DNS 服务器,请在 Ubuntu 终端中运行 sudo 命令,将 /etc/resolv.conf 的内容替换为您的内部 DNS 服务器,并以公共 DNS 服务器作为后备:
    /etc/resolv.conf
    WSL 会按顺序查询 nameserver。将内部 DNS 服务器放在前面可确保域名、私有软件包注册表和仅限虚拟专用网络(VPN)的资源能够正确解析。
  3. 要重启 WSL 并应用更改,请在 Windows PowerShell 中运行以下命令:
    PowerShell

Yocto 构建中的 Git Filename too long 错误

在 WSL 中运行 Qualcomm Linux Yocto 构建时,Git 可能会失败并报 Filename too long 错误。发生此错误的原因是 Windows 强制执行默认的 MAX_PATH 限制(260 个字符),而 Yocto 构建路径可能会超过该限制。 要修复此错误,请在 Ubuntu 终端中运行以下命令为 Git 启用长路径支持:
Ubuntu terminal

USB 设备无法附加到 WSL

如果 usbipd attach 失败、无响应,或设备未出现在 lsusb 中,请执行以下操作:
  1. 要确认 usbipd 已绑定设备,请以管理员身份在 Windows PowerShell 中运行 usbipd list,并验证 STATE 列显示 Shared。如果显示 Not shared,则附加会失败。请以管理员身份在 Windows PowerShell 中使用 usbipd bind --busid <busid> 命令进行绑定。
  2. 要检查网络模式,请确认 usbipd attach 输出报告 Detected networking mode mirrored。如果报告 nat,则在受管计算机上是公司防火墙或组策略正在阻止连接。要解决此问题,请执行以下操作: a. 按照为 WSL 启用 USB 设备访问第 2 步中的说明启用镜像网络。 b. 验证 .wslconfig 文件名和路径是否正确。 c. 运行 wsl --shutdown 使更改生效。
  3. 拔下设备或切换模式时,BUSID 可能会改变。如果 BUSID 已更改,请执行以下操作: a. 重新运行 usbipd list 以确认当前的 BUSID。 b. 重新运行 usbipd attach --wsl --busid <new-busid>。 c. 确认 WSL 已安装 USB/IP 客户端工具。
如果启用镜像网络后附加仍然失败,则可能是组策略完全阻止了 usbipd 防火墙规则。在这种情况下,请改为在原生 Ubuntu 主机上进行烧录,因为那里不需要 USB 直通。

下一步