无人机嵌入式智能硬件【免费下载链接】inavINAV: Navigation-enabled flight control software项目地址https://gitcode.com/gh_mirrors/in/inav点击查看免费下载导读本文是一份面向 Linux 开发者的 INAV 固件编译完整指南覆盖从工具链选型、依赖安装、仓库克隆、CMake 构建环境配置到单目标/全量/Release 构建、清理维护、Ninja 加速以及固件烧录的全流程适用于 INAV 2.6 及以后采用 CMake 构建体系的版本。读完本文你将能够在 Ubuntu/Debian、Fedora、Arch 等主流发行版上独立构建任意目标板的 INAV 固件如MATEKF405并理解 INAV 内置 ARM 交叉编译器与发行版自带编译器之间的取舍逻辑。INAV 2.6 的构建体系概览自 INAV 2.6 起项目将构建体系从传统的顶层 Makefile 迁移到 CMake。CMake 负责解析平台与硬件的交叉编译依赖最终仍然调用 GNU Make或可选的 Ninja来驱动真正的编译。这一点可以从仓库根目录 CMakeLists.txt 的cmake_minimum_required(VERSION 3.13...3.18)以及TOOLCHAIN缓存变量的定义中得到印证。整个构建流程可以概括为三步安装前置工具git、cmake、make、ruby、gcc以及交叉编译器克隆仓库并用cmake生成构建环境在build目录中使用make或ninja编译目标固件。交叉编译器策略内置 ARM GCC 与发行版编译器INAV 固件面向 ARM Cortex-M 系列 MCU 编译需要一个现代化版本的gcc-arm-none-eabi交叉编译器。不同 Linux 发行版提供的交叉编译器版本差异很大——Debian、Ubuntu LTS 等保守发行版往往停留在过旧版本而 Arch Linux 等滚动发行版则会提供接近最新的稳定版本。为了提供统一且足够现代的编译环境INAV 采用了内置推荐编译器的方案仓库在配置阶段检查环境中是否存在 INAV 认可的arm-none-eabi-gcc如果不存在或版本不符会自动从 ARM 官方下载并安装一份已知可用的交叉编译器。这份编译器仅用于 INAV 构建不会污染系统的全局工具链。为什么信任这份内置编译器官方文档给出了三点理由编译器来源可靠——ARM 本身就是飞控所用 CPU 的制造商发行版自带的交叉编译器往往比 INAV 推荐的版本更老安装的编译器只服务于 INAV 构建环境不会作为通用工具暴露给系统。从源码看这套逻辑实现在 cmake/arm-none-eabi-checks.cmake 对应的检查文件中仓库当前锁定的推荐版本为GCC 13.2.1arm-none-eabi-checks.cmake并为 Linux x86_64、Linux aarch64、macOS 及 Windows 分别预置了下载地址和MD5 校验和下载后还会自动解压到tools/目录并通过arm-none-eabi-objcopy移除 newlib 库中 INAV 并不使用的多余告警段见 arm-none-eabi-checks.cmake。何时改用发行版编译器尽管内置编译器是默认方案仍有两种场景建议使用发行版自带的交叉编译器你的发行版提供了比 INAV 内置版本更新的编译器典型如 Arch Linux你的宿主平台没有 ARM 官方预编译包例如 32 位 Linux ia32。此时需要在运行cmake时关闭编译器版本检查cmake -DCOMPILER_VERSION_CHECKOFF ..COMPILER_VERSION_CHECK是一个默认为 ON 的 CMake 选项定义于根目录 CMakeLists.txt。当它被关闭后CMake 会跳过对arm-none-eabi-gcc具体版本的核对直接使用当前PATH中可找到的编译器版本探测逻辑见 cmake/gcc.cmake。前置依赖除了交叉编译器还需要安装以下工具工具用途git克隆和管理 INAV 代码仓库cmake生成构建环境make驱动固件编译ruby从 JSON 定义生成部分源码文件gcc生成本机端设置文件、运行测试其中最关键的是 CMake 版本要求INAV 需要 CMake 3.13 或更高版本对应根目录 CMakeLists.txt 的cmake_minimum_required(VERSION 3.13...3.18)。官方文档特别提醒Ubuntu 18.04 LTS 自带的 CMake 版本过旧无法满足要求建议升级到 Ubuntu 20.04 LTS 或更高版本。能提供 CMake 3.13 的发行版其自带的其他工具通常也都满足要求。如果你倾向于使用 Ninja 而非 Make 作为构建管理器还需要额外安装ninja详见后文使用 Ninja 构建一节。Ubuntu / Debian# 先更新系统 sudo apt update sudo apt upgrade sudo apt install git make ruby cmake gccFedora# 先更新系统 sudo dnf -y update sudo dnf install git make ruby cmake gccArch# 先更新系统 sudo pacman -Syu sudo pacman -S git make ruby cmake gcc克隆仓库前置依赖安装完成后克隆一份 INAV 源码到本地git clone https://gitcode.com/gh_mirrors/in/inav.git如果你有已注册 SSH 密钥的代码托管账号也可以改用 SSH 形式的地址完成克隆。克隆完成后会在当前目录生成一个inav目录后续的构建配置与编译都基于这个目录进行。用 CMake 配置构建环境INAV 使用 CMake 作为主构建工具。标准的 CMake 用法是创建一个独立的build目录并在其中执行cmake与make避免把生成产物混入源码目录。cd inav # 仅首次需要创建构建目录 mkdir build cd build cmake .. # 注意 .. 必不可少它告诉 cmake 到何处查找规则文件执行cmake ..时CMake 会检查是否已存在 INAV 内置的交叉编译器若未找到自动从 ARM 下载官方 GCC 交叉编译器在build目录中生成CMakeCache.txt构建设置缓存和Makefile等文件。从 cmake/arm-none-eabi.cmake 可以看到默认配置类型包含Debug、Release、RelWithDebInfo三种且当CMAKE_BUILD_TYPE未显式指定时默认采用RelWithDebInfo开启-ggdb3调试信息并带有-DNDEBUG优化见 arm-none-eabi.cmake。交叉编译器的具体路径arm-none-eabi-gcc、objcopy、size等也都在该工具链文件中声明。如果你想使用自己的交叉编译器Arch 等提供更新编译器的发行版或 ARM 未提供预编译包的 32 位 Linux应使用cmake -DCOMPILER_VERSION_CHECKOFF ..构建固件cmake生成build/Makefile后就可以直接用make编译固件了。只要 INAV 的 CMake 配置没有变化例如发布新版本或者你不打算在 ARM SDK 编译器与发行版/外部编译器之间切换就不需要重新运行cmake。查看可用目标生成的 Makefile 采用与 2.6 之前顶层 Makefile 完全不同的目标选择机制。可用目标列表可通过以下命令查看列表很长建议接分页器make help | less此外CMake 配置阶段还会生成一个名为targets的自定义目标运行make targets即可一次性列出全部有效目标与官方发布目标该机制实现在 cmake/main.cmake。构建单个或多个目标与早期版本无参数 make 只编译默认目标不同无参数make会构建所有目标。构建单个目标时直接把目标名传给make即可# 构建 MATEKF405 固件默认包含调试符号 make MATEKF405多个目标可以一次构建并配合-j并行加速# 并行构建使用除 1 个核外的全部 CPU 核心 make -j $(($(nproc)-1)) MATEKF405 MATEKF722每个目标在仓库中都有对应的构建声明。以 src/main/target/MATEKF405/CMakeLists.txt 为例一个目标目录通过target_stm32f405xg(MATEKF405)这样的宏声明CMake 会据此收集该目录下的target.c、target.h等源文件自动处理 VCP、SD 卡、MSC 等特性开关并生成.hex/.bin具体流程见 cmake/stm32.cmake 的target_stm32函数。全量构建与 Release 构建⚠️ 对 CI 或大批量构建非常重要默认的RelWithDebInfo构建类型带有完整调试符号。当构建全部约 100 个目标时会占用约 109 GB 磁盘空间。最终.hex文件不包含调试符号因此对生产构建毫无增益。生产构建、CI 或需要构建多个目标时请使用 Release 模式cd inav mkdir build-release cd build-release cmake -DCMAKE_BUILD_TYPERelease .. # 构建指定目标 make MATEKF405 # 或构建全部官方发布目标 make release磁盘占用对比全量目标RelWithDebInfo默认约 109 GBRelease约 4–6 GB减少约 96%两种模式下最终生成的.hex与.bin文件完全一致。Release 模式在源码中的体现是IS_RELEASE_BUILD标记根目录 CMakeLists.txt会触发目标级联编译优化见 cmake/main.cmake 与 cmake/stm32.cmake。release目标由collect_targets汇总所有未标记SKIP_RELEASES的目标生成cmake/main.cmake。产物与烧录编译完成的.hex文件位于build目录命名格式为inav_x.y.z_TARGET.hex例如当前仓库版本下为inav_10.0.0_MATEKF405.hex命名逻辑见 cmake/stm32.cmakeHex 由objcopy -Oihex --set-start 0x08000000生成见 cmake/stm32.cmake。烧录固件有以下几种方式使用官方INAV Configurator选择并刷写本地build/inav_x.y.z_TARGET.hex命令行直接使用stm32flash或dfu-util烧写借助第三方命令行辅助工具如msp-tool、flash.sh完成自动化刷写。关于不同芯片平台的命令行烧录细节可参考仓库内的 USB Flashing 与 Broken USB recovery 文档。清理与 CMake 缓存维护清理构建产物可以全量清理也可以针对单个目标选择性清理。选择性清理目标只需在目标名前加clean_前缀# 清理所有目标 make clean # 清理单个目标 make clean_MATEKF405 # 清理多个目标 make clean_MATEKF405 clean_MATEKF722clean_目标这类目标的实现位于 cmake/main.cmake 的add_clean_target由于原生make clean/ninja clean无法限定到单个目标CMake 会显式列出该目标的 ELF、map 文件、对象目录以及.hex/.bin产物再调用 cmake/clean_target.cmake 逐个删除。对象目录会被保留Makefile 生成器的构建规则文件与目标文件同目录删掉会破坏后续增量构建。CMake 缓存维护CMake 会缓存构建环境因此每次构建目标时无需重新运行cmake。两个相关的 make 目标make edit_cache打开缓存编辑器可交互修改缓存项例如在 ARM 内置编译器与发行版编译器之间切换make rebuild_cache重新构建 CMake 缓存。对普通用户而言这两项通常用不到唯一可能的场景就是在内置 ARM 编译器与发行版编译器之间切换。使用 Ninja 构建CMake 本身不是构建系统它只是为某个构建管理器生成构建文件。上面的示例使用的make是 INAV 的传统构建管理器你也可以选用其他构建系统。Ninja 就是一个轻量级、默认并行执行的跨平台构建工具。用发行版包管理器安装ninjaUbuntu/Debian 用aptFedora 用dnfArch 用pacman配置 CMake 使用 Ninjacd build # 可按需附加其他 cmake 选项 cmake -GNinja ..之后用ninja代替make执行构建ninja MATEKF405 MATEKF722Ninja 与 Make 两种构建器共享同一套 CMake 规则文件如add_clean_target的注释就明确说明其行为对 Makefile 与 Ninja 生成器一致见 cmake/main.cmake因此二者可以放心混用。更新与重新构建要把本地固件更新到最新代码步骤如下进入本地 INAV 仓库目录拉取最新改动并从build目录重新构建$ cd inav $ git pull $ cd build $ ninja TARGET $ ## 或 make TARGETCI 并行构建提示如果你的构建脚本需要将目标按任务拆分到多台 CI 机器上并行编译可以留意 cmake/ci.cmake当定义了CI_JOB_INDEX与CI_JOB_COUNT两个变量时CMake 会自动把全部 Release 目标按任务数均分并为当前任务生成一个只依赖本批目标的ci自定义目标。这对于在大规模构建时配合 Release 模式控制磁盘与时间开销很有帮助。不受支持的宿主平台如果宿主平台没有 ARM 官方交叉编译器Arm32、IA32且发行版自带编译器不是过旧就是缺失可以尝试从xpack devtools 的arm-none-eabi-gcc工具链集合中寻找合适的编译器。安装后你需要用-DCOMPILER_VERSION_CHECKOFF配置 CMake让构建系统使用这份外部编译器。进阶阅读更详细的开发与 Git 工作流说明见 Development.md其他平台的构建指南Windows见 Building in Windows 10 or 11 with Linux Subsystem、Building in Windows 10 or 11 with MSYS2、macOSBuilding in Mac OS X以及 DockerBuilding in DockerSITL软件在环仿真构建说明见 Building SITL对应宿主工具链配置见 cmake/host.cmakeCMake 相关机制的进一步说明见 Cmake usage目标板Target的开发规范与新增流程见 docs/development/targets 目录下的相关文档。赞分享无人机嵌入式智能硬件【免费下载链接】inavINAV: Navigation-enabled flight control software项目地址https://gitcode.com/gh_mirrors/in/inav点击查看免费下载相关推荐INAV 在 macOS 上从零编译固件完整构建指南clang / cmake / git / ARM 交叉编译器INAV 在 macOS 上从零编译固件完整构建指南clang / cmake / git / ARM 交叉编译器 INAV 是一套基于 CMake 构建无人机嵌入式智能硬件INAV 云端固件构建指南在 Gitpod 在线环境编译飞控固件INAV 云端固件构建指南在 Gitpod 在线环境编译飞控固件 本文以 INAV 官方仓库的 Building in Gitpod https://link无人机嵌入式智能硬件INAV Wing FC 飞控板解析基于 STM32F405 的固定翼导航飞控硬件与固件配置指南INAV Wing FC 飞控板解析基于 STM32F405 的固定翼导航飞控硬件与固件配置指南 INAVNavigation enabled flight无人机嵌入式智能硬件上一篇CloudCompare文件格式支持完全指南LAS/LAZ、E57、FBX等格式详解下一篇5分钟快速上手如何用EmuSAK-ui高效管理Switch模拟器资源创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考