资讯详情

INAV 在 Windows 10 下使用 VS Code + WSL 搭建开发环境的完整指南

📅 2026/10/14 16:32:57 | 华诺云谱 👁 阅读
INAV 在 Windows 10 下使用 VS Code + WSL 搭建开发环境的完整指南
无人机嵌入式智能硬件【免费下载链接】inavINAV: Navigation-enabled flight control software项目地址https://gitcode.com/gh_mirrors/in/inav点击查看免费下载本文面向所有在 Windows 10 上参与 INAVNavigation-enabled flight control software固件开发与调试的开发者。文章以仓库中的官方 IDE 配置指南IDE - Visual Studio Code with Windows 10为主体完整讲解如何用 Visual Studio Code 与 WSL 协同完成代码浏览、智能提示、一键编译乃至硬件调试。读完本文你将掌握.vscode下c_cpp_properties.json与tasks.json两套配置文件的完整含义、CtrlShiftB快速编译任意 INAV target 的方法以及这些配置背后的真实构建链路与源码依据。为什么选择 VS Code WSL对 Windows 10 用户而言Visual Studio Code 是免费且几乎零成本上手的选择。它与运行 Ubuntu 的 WSLWindows Subsystem for Linux几乎无缝集成可以在 Windows 侧享受图形界面同时让编译真正发生在 Linux 环境里从而获得接近原生 Linux 的make/cmake/ninja工具链体验语法高亮与基于标签tag的符号跳转通过 WSL Remote 扩展实现的硬件调试能力OpenOCD GDB。注意INAV 的官方推荐构建路径是先在 WSL 里搭好编译环境再在 Windows 侧用 VS Code 打开工程。因此本文第 2 节会先给出 WSL 环境的最小搭建步骤完整细节见仓库的 WSL 构建指南。第一步在 WSL 中准备 INAV 构建环境本节的命令均应在 Ubuntu 的 shell 中执行而非 Windows CMD/PowerShell。启用 WSL在 Windows 中运行windows features勾选Windows Subsystem for Linux重启从 Microsoft Store 安装最新 Ubuntu LTS并设置用户名与密码更新软件源并安装构建工具sudo apt update sudo apt-get install git make cmake ruby python3 ninja-buildcmake负责生成构建系统make/ninja-build负责实际编译ruby供仓库内的构建辅助脚本使用见 src/utils 下的.rb脚本python3用于生成文档与部分代码见下文更新自动化文档。获取 INAV 源码示例cd /mnt/c git clone https://github.com/iNavFlight/inav.git cd inav git checkout 6.1.1 # 切换到某个发布 tag git checkout -b my-branch # 创建自己的开发分支若克隆时报chmod on /mnt/c/inav/.git/config.lock failed: Operation not permitted可先卸载并重新挂载 C 盘启用 metadatasudo umount /mnt/c sudo mount -t drvfs C: /mnt/c -o metadata一次性配置构建目录cd /mnt/c/inav mkdir build cd build cmake .. # 或使用 Ninjacmake -GNinja ..之后在build目录内即可按 target 编译例如make MATEKF722 # 单 target make MATEKF405 MATEKF405SE # 多 targetNinja 时为 ninja MATEKF722 MATEKF405SE SPEEDYBEEF405关于 target 的完整机制可参考 docs/development/targets/overview.mdCMake 先读取src/main/target/TARGET/下的CMakeLists.txt与target.h再据此选择 MCU 类型、闪存容量并裁剪驱动最终链接生成 hex/bin。第二步安装 VS Code 并接入 WSL下载并安装 Visual Studio Code在扩展市场安装Remote - WSL插件用 VS Code 打开 INAV 仓库文件夹按Ctrl Shift P打开命令面板执行Remote-WSL: Reopen Folder in WSL让整个工作区切换到 WSL 侧若 Windows 防火墙弹窗询问权限请允许在 WSL 工作区中再安装两个插件C/CMicrosoft cpptools提供IntelliSense、语法高亮与调试支持Bookmarks用于在庞大代码库中快速标记和跳转。第三步配置 C/C 智能提示c_cpp_properties.json编辑仓库根目录下的 .vscode/c_cpp_properties.json以声明 INAV 源码中需要启用的宏定义defines与头文件搜索路径。仓库自带示例配置如下{ configurations: [ { name: Win32, includePath: [ ${workspaceRoot}, ${workspaceRoot}/src/main/** ], browse: { limitSymbolsToIncludedHeaders: false, path: [ ${workspaceRoot}/** ] }, intelliSenseMode: msvc-x64, cStandard: c11, cppStandard: c17, defines: [ USE_OSD, USE_GYRO_NOTCH_1, USE_GYRO_NOTCH_2, USE_DTERM_NOTCH, USE_ACC_NOTCH, USE_GYRO_BIQUAD_RC_FIR2, USE_D_BOOST, USE_SERIALSHOT, USE_ANTIGRAVITY, USE_ASYNC_GYRO_PROCESSING, USE_RPM_FILTER, USE_GLOBAL_FUNCTIONS, USE_DYNAMIC_FILTERS, USE_DSHOT, FLASH_SIZE 480, USE_I2C_IO_EXPANDER, USE_PCF8574, USE_ESC_SENSOR ] } ], version: 4 }关键字段解读字段含义includePath头文件搜索路径${workspaceRoot}指向工程根目录src/main/**递归包含全部源码头文件browse.path标签索引范围${workspaceRoot}/**覆盖整个仓库cStandard/cppStandard语法标准分别设为c11与c17与 INAV 当前代码风格一致defines预定义宏用于让 IntelliSense 看到#ifdef USE_XXX之后的条件编译代码FLASH_SIZE 480模拟目标板闪存容量480 KB用于触发与容量相关的条件编译分支为什么这些 defines 很重要INAV 的源码大量使用条件编译。例如 src/main/target/common.h 就根据MCU_FLASH_SIZE是否大于 512 KB 来决定是否启用USE_AUTO_TRANSITION、USE_TELEMETRY_MAVLINK等大体积功能并在MCU_FLASH_SIZE 512时关闭USE_SERIALRX_SPEKTRUM、USE_TELEMETRY_SRXL等以节省闪存。同时像USE_DSHOT、USE_GYRO_NOTCH_1这类功能开关需要先在defines里声明编辑器才能正确解析对应代码分支——否则你会看到大量被#ifdef包裹的代码无法高亮、无法跳转。仓库自带的 .vscode/c_cpp_properties.json 中defines还额外包含USE_PROGRAMMING_FRAMEWORK、USE_SERIALRX_GHST、USE_DJI_HD_OSD、USE_GYRO_KALMAN、USE_RANGEFINDER、USE_NAV、USE_SDCARD、USE_GYRO_FFT_FILTER、USE_ADAPTIVE_FILTER以及MCU_FLASH_SIZE 1024等更贴近现代 1 MB 闪存目标的宏集合。你可以以此为基准针对自己正在开发的 target 增删宏。注意这里同时出现了FLASH_SIZE 480示例旧值与MCU_FLASH_SIZE 1024仓库当前值两种写法二者本质都是模拟目标 MCU 的闪存容量建议统一使用MCU_FLASH_SIZE单位 KB以匹配 common.h 中的判断逻辑。小提示如果你的编辑器提示缺少宏导致大量误报错误优先从 src/main/target/common.h 与对应 target 的 target.h例如src/main/target/MATEKF722/target.h中复制真正的宏定义这是保证 IntelliSense 与实际编译行为一致的最稳妥做法。第四步配置一键构建任务tasks.json编辑仓库根目录下的 .vscode/tasks.json即可通过Ctrl Shift B快捷键或命令面板执行构建。官方指南给出了四个典型任务{ version: 2.0.0, tasks: [ { label: Install/Update CMAKE, type: shell, command: mkdir -p build cd build cmake .., group: build, problemMatcher: [], options: { cwd: ${workspaceFolder} } }, { label: Compile autogenerated docs, type: shell, command: python3 src/utils/update_cli_docs.py, problemMatcher: [], options: { cwd: ${workspaceFolder} } }, { label: Build Matek F722-WPX, type: shell, command: make MATEKF722WPX, group: build, problemMatcher: [], options: { cwd: ${workspaceFolder}/build } }, { label: Build Matek F405-STD WING, type: shell, command: make MATEKF405 MATEKF405SE, group: build, problemMatcher: [], options: { cwd: ${workspaceFolder}/build } } ] }四个任务分别做什么Install/Update CMAKE首次进入工程时初始化构建目录mkdir -p build cd build cmake ..这一步只需执行一次Compile autogenerated docs运行 src/utils/update_cli_docs.py 重新生成 CLI 文档。该脚本读取 src/main/fc/settings.yaml 并输出到 docs/Settings.md用于在你修改了飞控设置项后同步官方设置文档详见 Development.md 中关于设置文档自动生成的表单Build Matek F722-WPX单 target 编译示例。MATEKF722WPX在源码中确实存在由 src/main/target/MATEKF722PX/CMakeLists.txt 通过target_stm32f722xe(MATEKF722WPX)注册Build Matek F405-STD WING多 target 编译示例一条命令编译MATEKF405与MATEKF405SE两个目标板对应仓库中的 src/main/target/MATEKF405SE 目录。自定义你自己的构建任务把上面的make {TARGET}换成你要开发的板子即可例如把make MATEKF722WPX改为make MATEKF722或make SPEEDYBEEF405。还可以基于 dev/vscode/tasks.json 中更完善的任务体系做扩展——仓库的 dev 配置把任务拆成了target、flash、svd、openocd-cfg、openocd-debug-prepare五步{ label: target, type: shell, command: make, args: [-C, ${config:BUILD_DIR}, ${config:TARGET}], problemMatcher: $gcc, group: { kind: build, isDefault: true } }并通过options.env.TARGET从 VS Code 的settings.json读取目标板参数。这套任务还衔接了 SVD 文件生成svd_${config:TARGET}、OpenOCD 配置生成openocd_cfg_${config:TARGET}与烧录openocd_flash_${config:TARGET}配合硬件调试方案使用见下文。第五步硬件调试进阶完成以上配置后你已具备完整的编译与代码浏览能力。若需要在线调试仓库还提供了配套文档 Hardware Debugging in VSC on Windows 10 or 11 with WSL.md核心思路是在 WSL 侧通过 OpenOCD 启动 GDB Server在launch.json中设置servertype: externalgdbTarget指向 Windows 宿主机的windows-host-ip:3333复用上述openocd-debug-prepare任务链先svd、openocd-cfg、flash再启动调试。该文档中的任务定义同样基于.vscode/tasks.json与本文第 4 节是一脉相承的。常见问题与排查1.Syntax error: ( unexpected该错误通常由 Windows PATH 被注入 WSL 环境导致常见于 WSL 1。三种解法详见 WSL 构建指南WSL 1打开 RegEdit将HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}\Flags从7改为5重启后重新cmake ..WSL 2将同一键值从f0x0f改为d0x0d通用方案在 WSL 中创建/etc/wsl.conf写入[Interop]段并设置appendWindowsPathfalse。2. 编译非常缓慢如果wsl -l -v显示发行版为 WSL 2且源码位于/mnt/c挂载盘上跨文件系统 I/O 会导致编译极慢实测单 target 可能从 2.5 分钟恶化到 25 分钟。推荐把仓库放到 Linux 文件系统通过\\wsl$访问发行版目录并映射网络驱动器必要时可切换回 WSL 1wsl --set-version Ubuntu-20.04 13. IntelliSense 大量误报未定义符号请先确认c_cpp_properties.json的defines是否覆盖了当前 target 实际启用的宏并核对MCU_FLASH_SIZE数值是否与目标板闪存一致——common.h 中大量功能是围绕MCU_FLASH_SIZE分档的数值不对会导致看到的条件编译分支与真实编译结果不一致。小结在 Windows 10 上开发 INAV 的推荐链路是WSL 搭建工具链 → VS Code Remote-WSL 打开工程 →c_cpp_properties.json声明宏与头文件路径 →tasks.json实现一键编译。本文给出的两份配置.vscode/c_cpp_properties.json与.vscode/tasks.json均可在仓库根目录直接查阅dev/vscode/tasks.json则提供了面向target/flash/svd/openocd的更完整任务链。以仓库中的真实 target如MATEKF722、MATEKF405SE、MATEKF722WPX替换任务命令中的目标板名即可开始你的 INAV 开发。赞分享无人机嵌入式智能硬件【免费下载链接】inavINAV: Navigation-enabled flight control software项目地址https://gitcode.com/gh_mirrors/in/inav点击查看免费下载相关推荐INAV 硬件调试实战在 VS Code WSLWindows 10/11下配置 ST-Link 与 OpenOCD 断点调试环境INAV 硬件调试实战在 VS Code WSLWindows 10/11下配置 ST Link 与 OpenOCD 断点调试环境 本指南面向需要在无人机嵌入式智能硬件howdoi 在 Windows 上搭建开发环境基于 WSL 的完整配置指南howdoi 在 Windows 上搭建开发环境基于 WSL 的完整配置指南 howdoi 是一个在命令行里瞬间获得编程答案的开源工具输入 howdoi开发工具CLIVisual Studio Code 远程开发实战在 WSL 中搭建 Linux 开发环境的完整指南Visual Studio Code 远程开发实战在 WSL 中搭建 Linux 开发环境的完整指南 本文基于 Visual Studio Code 官方文档文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑