> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 在 Windows 上设置 WSL 并安装 Ubuntu

适用于 Linux 的 Windows 子系统（WSL）是一项 Windows 功能，无需使用虚拟化软件即可在 Windows 上运行 Linux 发行版。WSL 允许 Linux 用户空间与 Windows 应用程序在同一主机上并行运行，从而无需单独的虚拟机。

下图展示了设置 WSL 并安装 Ubuntu 所涉及的任务：

<Frame caption="图：在 Windows 上设置 WSL 并安装 Ubuntu 的工作流程">
  <img src="https://mintcdn.com/qualcomm-prod/Im5W2pUR5LdqxAI6/Key-Documents/Virtual-Machine-Setup/media/k2c-qli-vm-setup/set-up-wsl.svg?fit=max&auto=format&n=Im5W2pUR5LdqxAI6&q=85&s=44f30fc939b7ababb32087abadfcc3a7" alt="验证 Windows 主机系统要求、启用 WSL 并安装 Ubuntu、在 WSL 中配置 Ubuntu 设置" width="816" height="100" data-path="Key-Documents/Virtual-Machine-Setup/media/k2c-qli-vm-setup/set-up-wsl.svg" />
</Frame>

## 验证 Windows 主机系统要求

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

| 要求     | 规格          |
| ------ | ----------- |
| 处理器架构  | X64         |
| CPU 核心 | 8 个或更多      |
| RAM    | 16 GB 或更多   |
| 存储     | 400 GB 可用空间 |

## 启用 WSL 并安装 Ubuntu

Qualcomm Linux 使用 Ubuntu 22.04 Linux 发行版。启用 WSL 和安装 Ubuntu 的步骤因 Windows 版本而异。请按照适用于您版本的说明进行操作：

<Tabs>
  <Tab title="WSL 2（Windows 10 2004+ 和 Windows 11）">
    有关如何启用 WSL 2 并安装 Ubuntu 22.04 的说明，请参阅[在 WSL 2 上安装 Ubuntu](https://documentation.ubuntu.com/wsl/latest/howto/install-ubuntu-wsl2/)。
  </Tab>

  <Tab title="WSL 1（较早的 Windows 版本）">
    较早版本的 Windows 不支持通过 Microsoft Store 安装 WSL，需要手动安装。有关说明，请参阅[较早版本 WSL 的手动安装步骤](https://learn.microsoft.com/en-us/windows/wsl/install-manual?source=recommendations)。
  </Tab>
</Tabs>

## 在 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` 文件中添加以下内容：

   ```ini title="/etc/wsl.conf" theme={null}
   [automount]
   options = "metadata"

   [boot]
   systemd=true
   command = systemctl start docker
   ```
2. 在 Windows PowerShell 中，运行以下命令以重启 WSL：

   ```powershell title="PowerShell" theme={null}
   wsl --shutdown
   ```

## 为 WSL 启用 USB 设备访问

WSL 2 在一个轻量级 VM 中运行，默认无法访问 USB 设备。因此，`lsusb` 等命令和烧录工具无法检测到目标设备。

要为 WSL 启用 USB 访问，请使用 [usbipd-win](https://github.com/dorssel/usbipd-win)，通过 USB/IP 将 USB 设备的流量从 Windows 传递到 WSL：

1. 以管理员身份打开 Windows PowerShell，并运行以下命令安装 `usbipd-win`：

   ```powershell title="PowerShell" theme={null}
   winget install --interactive --exact dorssel.usbipd-win
   ```

2. 可选：要启用镜像网络（mirrored networking），请在 Windows PowerShell 中运行以下命令，在您的用户配置文件中创建 `.wslconfig` 文件：

   ```powershell title="PowerShell" theme={null}
   @"
   [wsl2]
   networkingMode=mirrored
   "@ | Set-Content -Encoding ASCII $env:USERPROFILE\.wslconfig
   ```

   <Note>
     在企业或由组策略（Group Policy）管理的计算机上，默认的网络地址转换（NAT）网络模式可能会阻止 usbipd 所需的防火墙规则，导致设备连接失败。切换到镜像网络会通过环回（loopback）路由连接，从而绕过该限制。
   </Note>

   <Warning>
     文件名必须严格为 `.wslconfig`，而不是 `.wslconfig.txt`。记事本可能会附加 `.txt` 扩展名。因此，请使用 Windows PowerShell 创建该文件并应用正确的扩展名。
   </Warning>

3. 要重启 WSL，请运行以下命令：

   ```powershell title="PowerShell" theme={null}
   wsl --shutdown
   ```

4. 在 Ubuntu 终端中，运行以下命令安装 USB/IP 客户端工具：

   ```bash title="Ubuntu terminal" theme={null}
   sudo apt update
   sudo apt install -y linux-tools-virtual hwdata
   sudo update-alternatives --install /usr/local/bin/usbip usbip "$(ls /usr/lib/linux-tools/*/usbip | tail -n1)" 20
   ```

5. 以管理员身份打开 Windows PowerShell，并运行以下命令列出已连接的 USB 设备：

   ```powershell title="PowerShell" theme={null}
   usbipd list
   ```

6. 记下要烧录的设备的 `BUSID`。对于烧录 Qualcomm 设备，`BUSID` 通常是 QDLoader 9008 设备（`05c6:9008`，EDL 模式）或 Fastboot 设备。

   ```text title="Sample output" theme={null}
   BUSID  VID:PID    DEVICE                                STATE
   1-4    05c6:9008  Qualcomm HS-USB QDLoader 9008         Not shared
   2-1    18d1:4ee7  Android / Fastboot device             Not shared
   ```

7. 以管理员身份打开 Windows PowerShell，并运行以下命令绑定该设备一次：

   ```powershell title="PowerShell" theme={null}
   usbipd bind --busid 1-4
   ```

绑定在重启后仍然保留，因此每台设备只需绑定一次。

8. 将 `1-4` 替换为您实际的 `BUSID`。设备的 `STATE` 会变为 `Shared`。

9. 在 Windows PowerShell 中，运行以下命令将设备附加到 WSL：

   ```powershell title="PowerShell" theme={null}
   usbipd attach --wsl --busid 1-4
   ```

   <Note>
     * 每次重新插拔或模式切换后需重新附加：当设备在烧录过程中切换模式时（例如，正常 → EDL 9008，或 → fastboot），Windows 会重新枚举该设备，通常会分配新的 `BUSID`，并且 WSL 附加会断开。请重新运行 `usbipd list`，然后运行 `usbipd attach --wsl --busid <new-busid>`。这是在 WSL 中烧录 Qualcomm 设备时常见的错误来源。
     * 每次 WSL 重启后需重新附加：附加在 `wsl --shutdown` 或系统重启后不会保留；只有绑定会保留。
   </Note>

10. 在 Ubuntu 终端中，运行以下命令确认 Ubuntu 检测到该设备：

    ```bash title="Ubuntu terminal" theme={null}
    lsusb
    ```

    设备必须出现在列表中，例如如下所示：

    ```
    Bus 001 Device 002: ID 05c6:9008 Qualcomm, Inc. Gobi Wireless Modem (QDL mode)
    ```

    在 WSL 中运行的烧录工具现在可以检测到该设备。有关烧录说明，请参阅 [Qualcomm Linux 构建指南](https://dragonwingdocs.qualcomm.com/Key-Documents/Flash-Guide/flash-with-qdl)。

11. 要在烧录后分离设备，请在 Windows PowerShell 中运行以下命令：

    ```powershell title="PowerShell" theme={null}
    usbipd detach --busid 1-4
    ```

## 排查 WSL 问题

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

### WSL 中的性能问题

如果您在 WSL 中遇到性能问题，请使用 `.wslconfig` 文件调整全局资源限制，例如内存、CPU 和交换空间（swap）。这些资源限制适用于所有 WSL 2 发行版。

请逐步调整设置，并在每次更改后验证结果。有关更多信息，请参阅 [WSL 中的高级设置配置](https://learn.microsoft.com/en-us/windows/wsl/wsl-config)。

<Warning>
  不要将内存和 CPU 值配置为与主机规格相同。过度分配可能会降低稳定性并对 Windows 性能产生不利影响。
</Warning>

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

默认情况下，Ubuntu 安装在 C 盘上。如果 C 盘没有足够的可用空间进行 Qualcomm Linux 构建，请将 Ubuntu 安装移动到其他驱动器。

要移动 Ubuntu 安装，请以管理员身份在 Windows PowerShell 中运行以下命令：

```powershell title="PowerShell" theme={null}
wsl --manage Ubuntu-22.04 --move <new_drive_path>
```

例如：

```powershell title="PowerShell" theme={null}
wsl --manage Ubuntu-22.04 --move D:\WSL\Ubuntu
```

### WSL 中的 DNS 解析失败

WSL 可能无法解析域名，导致依赖网络的操作（例如获取软件包或克隆仓库）因 DNS 错误而失败。

要修复 DNS 解析失败，请使用 `resolv.conf` 文件手动配置 DNS 设置：

1. 要禁用自动生成 `resolv.conf`，请在 Ubuntu 终端中运行 `sudo` 命令，在 `/etc/wsl.conf` 文件中添加以下内容：

   ```ini title="/etc/wsl.conf" theme={null}
   [network]
   generateResolvConf = false
   ```

2. 要在 `resolv.conf` 中设置 DNS 服务器，请在 Ubuntu 终端中运行 `sudo` 命令，将 `/etc/resolv.conf` 的内容替换为您的内部 DNS 服务器，后跟一个公共 DNS 服务器作为备用：

   ```bash title="/etc/resolv.conf" theme={null}
   nameserver <your-internal-dns-ip>
   nameserver 8.8.8.8
   ```

   WSL 会按顺序查询名称服务器。将内部 DNS 服务器列在首位可确保域名、私有软件包注册表以及仅限虚拟专用网络（VPN）访问的资源能够正确解析。

3. 要重启 WSL 并应用更改，请在 Windows PowerShell 中运行以下命令：

   ```powershell title="PowerShell" theme={null}
   wsl --shutdown
   ```

### Yocto 构建中的 Git `Filename too long` 错误

在 WSL 中运行 Qualcomm Linux Yocto 构建时，Git 可能会因 `Filename too long` 错误而失败。出现该错误是因为 Windows 强制执行默认的 260 个字符的 `MAX_PATH` 限制，而 Yocto 构建路径可能超过该限制。

要修复此错误，请在 Ubuntu 终端中运行以下命令，为 Git 启用长路径支持：

```bash title="Ubuntu terminal" theme={null}
git config --global core.longpaths true
```

### 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 设备访问](#enable-usb-device-access-for-wsl)中步骤 2 的描述启用镜像网络。

   b. 验证 `.wslconfig` 文件名和路径是否正确。

   c. 运行 `wsl --shutdown` 使更改生效。

3. 当您拔出设备或切换模式时，`BUSID` 可能会发生变化。如果 BUSID 已更改，请执行以下操作：

   a. 重新运行 `usbipd list` 以确认当前的 `BUSID`。

   b. 重新运行 `usbipd attach --wsl --busid <new-busid>`。

   c. 确认 WSL 已安装 USB/IP 客户端工具。

<Note>
  如果启用镜像网络后附加仍然失败，则组策略可能完全阻止了 `usbipd` 防火墙规则。在这种情况下，请改用原生 Ubuntu 主机进行烧录，这样就不需要 USB 直通。
</Note>

## **后续步骤**

* [同步、构建和烧录 Qualcomm Linux](https://dragonwingdocs.qualcomm.com/Key-Documents/Flash-Guide/flash-with-qdl)
