Windows 10环境下使用WSL2与VSCode编译iNav固件全攻略

对于航模爱好者来说,能够自定义飞控固件意味着可以解锁更多飞行模式和性能调优的可能性。iNav作为一款开源飞控软件,支持多种硬件平台,包括热门的AOCODARC-F7MINI飞控板。传统上,编译iNav固件需要在Linux环境下完成,这对习惯Windows系统的用户来说可能是个门槛。本文将详细介绍如何在Windows 10系统中,利用WSL2(Windows Subsystem for Linux 2)和VSCode搭建高效的开发环境,完成iNav固件的编译和刷写。

1. 环境准备与WSL2安装

在开始之前,我们需要确保系统满足以下基本要求:

  • Windows 10版本2004或更高(建议使用21H2或更新版本)
  • 至少4GB可用内存(8GB以上更佳)
  • 20GB可用磁盘空间
  • 已启用BIOS/UEFI中的虚拟化支持

1.1 启用WSL功能

以管理员身份打开PowerShell,执行以下命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

完成后重启计算机。重启后,将WSL2设置为默认版本:

wsl --set-default-version 2

1.2 安装Ubuntu发行版

  1. 打开Microsoft Store,搜索"Ubuntu"并选择最新的LTS版本(如Ubuntu 22.04 LTS)进行安装
  2. 安装完成后,从开始菜单启动Ubuntu,等待初始化完成并设置用户名和密码

提示:建议使用与Windows相同的用户名,可以避免后续的权限问题

1.3 配置WSL2基础环境

在Ubuntu终端中执行以下命令更新软件包并安装基础工具:

sudo apt update && sudo apt upgrade -y
sudo apt install -y git build-essential python3 python3-pip cmake

2. VSCode与WSL集成配置

Visual Studio Code提供了出色的WSL远程开发支持,让我们可以在Windows下获得接近原生Linux的开发体验。

2.1 安装必要扩展

  1. 在Windows中安装VSCode
  2. 安装以下扩展:
    • Remote - WSL
    • C/C++
    • CMake Tools
    • GitLens

2.2 连接WSL环境

  1. 在VSCode中按下Ctrl+Shift+P打开命令面板
  2. 输入"Remote-WSL: New WSL Window"并回车
  3. 这将打开一个新的VSCode窗口,左下角会显示"WSL: Ubuntu"

2.3 配置终端集成

在VSCode的设置中(JSON模式),添加以下配置:

{
    "terminal.integrated.profiles.linux": {
        "bash": {
            "path": "bash",
            "icon": "terminal-bash"
        },
        "zsh": {
            "path": "zsh"
        }
    },
    "terminal.integrated.defaultProfile.linux": "bash"
}

3. 获取iNav源代码与工具链配置

3.1 克隆iNav仓库

在VSCode的WSL终端中执行:

git clone --recursive https://github.com/iNavFlight/inav.git
cd inav

3.2 安装ARM工具链

iNav固件编译需要ARM嵌入式工具链,执行以下命令安装:

sudo apt install -y gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi

验证安装是否成功:

arm-none-eabi-gcc --version

3.3 安装其他依赖项

sudo apt install -y libc6-i386 lib32z1 lib32stdc++6
sudo apt install -y ruby ruby-dev

4. 编译AOCODARC-F7MINI固件

4.1 确定目标板型号

AOCODARC-F7MINI通常有两个版本,需要确认你的硬件版本:

./build.sh help | grep AOCODARCF7MINI

典型输出会包含:

AOCODARCF7MINI_V1
AOCODARCF7MINI_V2

4.2 执行编译

假设你的硬件是V1版本,执行:

./build.sh AOCODARCF7MINI_V1

编译过程可能需要10-30分钟,取决于你的硬件配置。成功编译后,会在./build目录下生成固件文件,如:

inav_x.x.x_AOCODARCF7MINI_V1.hex

4.3 常见编译问题解决

如果遇到编译错误,可以尝试以下步骤:

  1. 清理编译环境:

    ./build.sh clean_AOCODARCF7MINI_V1
    
  2. 确保所有子模块已更新:

    git submodule update --init --recursive
    
  3. 检查工具链版本:

    arm-none-eabi-gcc --version
    

    建议使用7-10版本的gcc-arm工具链

5. 刷写固件到AOCODARC-F7MINI

5.1 安装iNav Configurator

  1. iNav官网下载最新版Configurator
  2. 安装并运行iNav Configurator

5.2 连接飞控板

  1. 使用Micro USB线连接飞控板到电脑
  2. 按住飞控板上的BOOT按钮(如有),然后上电进入DFU模式
  3. 在iNav Configurator中选择正确的COM端口

5.3 刷写固件

  1. 点击"Firmware Flasher"标签
  2. 选择"Load Firmware [Local]"并导航到WSL中的固件文件

    注意:WSL中的文件可以通过\\wsl$\Ubuntu\home\<用户名>\inav\build路径访问

  3. 点击"Flash Firmware"开始刷写
  4. 等待刷写完成,飞控将自动重启

6. 高级配置与调优

6.1 自定义编译选项

iNav支持通过target.h文件进行硬件特定配置。在src/main/target/AOCODARCF7MINI目录下可以找到相关文件,常见的自定义选项包括:

  • 启用/禁用特定传感器
  • 调整PWM输出映射
  • 修改UART端口配置

6.2 启用实验性功能

如果需要使用iNav的最新功能,可以切换到开发分支:

git checkout development
git submodule update --recursive

然后重新编译固件。

6.3 优化编译速度

WSL2的IO性能在某些情况下可能较慢,可以通过以下方式优化:

  1. 将源码放在WSL的文件系统中(不要放在Windows挂载的目录)
  2. 增加WSL的内存限制,创建或修改%USERPROFILE%\.wslconfig文件:
    [wsl2]
    memory=8GB
    processors=4
    
  3. 使用ccache加速编译:
    sudo apt install ccache
    export PATH="/usr/lib/ccache:$PATH"
    

7. 开发工作流建议

对于频繁修改和测试固件的开发者,建议采用以下工作流程:

  1. 在VSCode中编辑代码
  2. 使用集成终端快速编译
  3. 通过iNav Configurator刷写测试
  4. 使用Git管理代码变更

可以创建一个简单的编译脚本build_and_flash.sh

#!/bin/bash
# 清理并编译固件
./build.sh clean_AOCODARCF7MINI_V1
./build.sh AOCODARCF7MINI_V1

# 复制固件到Windows可访问的位置
cp ./build/inav_*_AOCODARCF7MINI_V1.hex /mnt/c/Users/你的用户名/Downloads/
echo "固件已复制到C:\Users\你的用户名\Downloads"

然后通过chmod +x build_and_flash.sh赋予执行权限。

更多推荐