使用 WSL 在 Windows 10 上设置构建环境

这些设置说明介绍了如何设置 "Windows Subsystem for Linux",它允许使用 waf 进行构建。

./_images/build-on-windows10-top-image.jpg

这包括在 Windows 中启用内置的 Windows Linux 环境 (WSL),安装兼容的 Linux 发行版,最后将 ArduPilot 构建环境安装为普通的 Linux 系统。

完成课程后,您将能够构建 ArduPilot 二进制文件并运行本地 ArduPilot SITL 模拟器,包括 MAVProxy 开发人员地面控制站。您还将能够使用大多数 Linux 开发功能,例如调试

WSL 设置步骤

官方说明如下 这里 但下面也列出了步骤。

  1. 打开 "控制面板"、"程序"、"打开或关闭 Windows 功能",选择 "Windows Subsystem for Linux",然后按确定。

    ./_images/build-on-windows10-wsl-install.png
  2. 从网络浏览器打开 https://aka.ms/wslstore 这将打开微软商店,允许安装 Ubuntu。然后启动 Ubuntu 并填写用户名和登录信息

    ./_images/build-on-windows10-wsl-install-part2.png
  3. 从 "开始 "菜单启动 "Ubuntu "应用程序,然后按照以下步骤操作 Ubuntu 安装 ArduPilot 开发环境的说明

    备注

    如果将 ArduPilot 资源库下载到 WSL 文件系统中,而不是下载到普通 Windows 文件结构的外部文件中,编译速度会更快。

    • 要在 WSL 中重新加载路径变量,要么关闭终端并重新打开,要么使用 注销

  4. 如果使用 Windows 10,请安装 XWindows 应用程序来运行图形程序,如 SITL。 VcXsrv, Cygwin X西明 在 Windows 上。

  5. 如果需要,可根据说明更改 WSL 默认参数 在此链接.这些参数允许您设置 WSL 使用的内存量和处理器数量等。

    备注

    建议设置内存限制,因为 WSL2 目前不能正确地将内存释放回 Windows。

    • 根据您的需要和系统规格,在以下位置创建或编辑文件、 C:\Users\<yourUserName>\.wslconfig

    [wsl2]
    内存=8GB # 将 WSL 中的虚拟机内存限制为 8 GB
    处理器=16 # 使 WSL 2 虚拟机使用 8 个虚拟处理器
    交换=8GB
    

WSL1 vs WSL2

WSL2 是 Windows10 Linux 子系统的最新版本。它比 WSL1 快很多倍,因此在编译速度方面是构建代码的首选。它还可以运行 MAVProxy 和本地 SITL。

使用 WSL2 上传到电路板

上传到电路板(例如 ./waf 飞机 --上传不过,Windows 端必须安装 Python。在 Windows Python 中安装这些软件包。

核心.exe 安装 空虚 串行

截至 2022 年 7 月,微软通过 usbipd 为 WSL2 提供 USB 访问的解决方案由于挂载时间较慢而无法访问设备上的引导加载程序。

备注

默认情况下,WSL1 可以上传至电路板,无需额外更改。这是因为 USB 设备的处理方式不同。

将 SITL 与 WSL 和 XWindows 结合使用(仅限 Windows 10)

Windows 11 有一个自动设置的内置 XServer。如果使用的是 Windows 11,可以跳过本节。

使用 SITL 时(例如 Tools/autotest/sim_vehicle.py) 默认选项或 --控制台 --地图 必须先启动已安装的 XWindows 应用程序。否则,运行时将出现以下错误信息:

[Errno 111] 连接 被拒 睡觉

打开 "Ubuntu "应用程序,在 "Ubuntu "末尾添加以下内容 ~/.bashrc.请务必根据您使用的是 WSL1 还是 WSL2,注释或取消注释相应的行。

# 导出 XWindows 显示屏
# 代表 WLS1
# export DISPLAY=0:0
# For WSL2
出口 显示屏=$(grep -m 1 名称服务器 /etc/resolv.conf | awk '{print $2}';):0

使用 VcXsrv 创建 XWindows 显示屏

  1. 选择显示设置:选择显示设置:"多个窗口",但这取决于您的偏好

  2. 选择如何启动客户: 必须 遴选 "无客户启动"

  3. 额外设置 必须 查看 "禁用访问控制"

备注

如果有显示问题,请检查以下防火墙规则、
  • 转到 Windows操作系统 后卫 防火墙 并点击 高级 设置 (打开 Windows操作系统 后卫 防火墙 高级 安全)

  • 根据 入境 规则 找到 VcXsrv 窗口 xserver 并确保 允许 连接 已为您的网络类型启用 私人, 公众或两者都是

  • 检查 出境 规则 以及

备注

由于 Win11 已将图形界面集成到 WSL2 环境中,因此不需要这一步骤。

使用 VSCode 在 WSL 中编辑代码(可选)

可以在 Windows 机器上安装 VSCode,以便在 WSL 中编辑和编译文件。VSCode 安装后会自动与 WSL 集成。更多详情 这里.

  • 请勿在 WSL 内使用 apt-get 等软件安装 VSCode。

  • 确保您正在处理的文件夹是在 WSL 远程中打开的。这可以通过点击左下角的绿色按钮来实现。

Windows 终端(可选)

Windows Terminal 支持多个标签页,可在多个 Linux 终端、PowerShell 等之间切换。安装 Windows 终端的路线 这里.

  • 您可以在打开 Windows 终端时更改默认终端,方法是进入 "设置",并将 Ubuntu 部分移至第一位。 清单 部分 settings.json 定义

  • 可以通过添加 起始目录 请按照下面的示例将下面的一行移到您喜欢的位置。

  • 请注意,将根据安装的 Linux 版本和发行版自动生成与下图类似的代码块。

{
    "guid";: "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
    "隐藏";: 错误,
    "名称";: "Ubuntu-20.04",
    来源";: "Windows.Terminal.Wsl";,
    "startingDirectory"; : "//wsl$/Ubuntu-20.04/home/<yourUserName>/ardupilot";
},

Git 与 Windows 证书管理器集成(可选)

Git 的凭证管理器可与 Window 的凭证管理器令牌连接。这种连接可防止在关闭 WSL 或重启 Windows 后访问 GitHub 等远程仓库时出现重新认证请求。Git 操作首次需要凭证时,会自动出现一个输入凭证的对话框。请参阅 向导 了解有关 GIT 和 WSL 的更多信息。

git 配置 --全球 凭据助手 "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe";

WSL 和 Windows 之间的文件系统访问

在 WSL 中,Windows 驱动器在 /mnt 目录中被引用。例如,要列出(<用户名>)documents 文件夹中的文档,请执行以下操作 ls /mnt/c/'Documents 设置'/<用户名>/文件ls /mnt/c/Users/<username>/Documents.您还可以使用命令 explorer.exe . 在当前 Linux 目录下打开 Windows 文件资源管理器窗口。注意 Windows 端使用的编辑器不会更改行尾。如果在文件系统之间切换时不小心,可能会损坏文件。在 Windows 11 中,可以通过命令行调用 Linux 文件管理器 "nautilus "或 Windows "explorer.exe"。

在 Windows 10 中,WSL 发行版的文件位于(在 Windows 资源管理器地址栏中键入): \\分配 name>; 例如 \\Ubuntu-20.04).在 Windows 11 中,可以通过文件资源管理器访问 Ubuntu 目录下的文件。在 Windows 编辑器中修改 WSL 文本文件时要小心,因为两种文件系统的行结束符不同。

备注

当尝试在 WSL 上运行地面控制站软件时,如果应用程序返回错误信息 "fuse: device not found, try 'modprobe fuse' first",那么最好使用 MAVProxyMission Planner地面站 作为您的默认地面控制站,因为 WSL 不支持熔断器(更多信息请查看 .NET Framework 3.0): https://github.com/Microsoft/WSL/issues/17 ).到目前为止,在使用 QGroundControl 在运行 Ubuntu 16.04 的 WSL 上。