本文档介绍如何从源代码构建 Betaflight 固件。内容涵盖构建系统要求、开发环境搭建、针对不同目标平台的构建以及构建输出的解读。有关整体系统架构的信息,请参阅“系统架构”部分。
先决条件
在安装 Betaflight 之前,您需要安装以下工具:
| 工具 | 目的 | 安装说明 |
|---|---|---|
| Git | 源代码管理 | 克隆存储库需要此步骤 |
| GNU Make | 构建系统 | 建议使用 4.0 或更高版本 |
| ARM-GCC 工具链 | 交叉编译器 | 建议使用 ARM GCC 10.3.1 或更高版本。 |
| Python | 用于实用脚本 | Python 3.6 或更高版本 |
| OpenSSL | 用于签名生成 | 某些构建操作需要 |
支持的操作系统
该构建系统支持以下操作系统:
LinuxmacOSWindows(通过 WSL 或 MinGW/MSYS2)
构建系统会自动检测您的操作系统并加载相应的设置。
构建系统架构

Betaflight 构建系统采用模块化 Makefile 架构:
核心构建系统:主目录包含专门的 Makefile 文件
Makefile配置管理:处理配置子模块、预处理器扩展和目标选择。平台架构:支持多种MCU系列,并具有平台特定的代码组织结构。构建输出:根据目标要求生成多种固件格式
mk/
目录结构

构建固件
基本构建命令
要构建 Betaflight,您首先需要克隆该代码库:
git clone https://github.com/betaflight/betaflight.git
cd betaflight
然后使用以下命令之一:
| 命令 | 描述 |
|---|---|
|
构建默认目标 |
|
针对特定目标构建 |
|
使用自定义配置构建 |
|
清理构建产物 |
|
清洁特定目标 |
|
列出所有可用目标 |
|
显示帮助信息 |
构建过程

版本控制和命名
构建系统会自动将版本信息包含在固件中:

固件版本由主版本号、次版本号和补丁版本号定义。
version.h
配置管理系统

构建配置选项
| 选项 | 描述 | 例子 | 来源 |
|---|---|---|---|
|
指定飞行控制器目标 | |
直接目标选择 |
|
使用统一目标配置 | |
配置子模块 |
|
调试构建类型(INFO、GDB) | |
优化控制 |
|
编译时特性标志 | |
特征选择 |
|
外部存储引导加载程序 | |
引导加载程序支持 |
|
将目标加载到 RAM 中 | |
开发模式 |
|
扩展自定义默认值 | |
配置空间 |
配置子模块管理
配置系统采用git子模块的方式:
配置信息存储在单独的存储库中()
betaflight/config该命令会为配置子模块加水。统一目标
make configs使用预处理器宏从配置头中提取信息该
FC_TARGET_MCU系统支持从头文件中展开宏文件
pp_def_value
目标系统架构

目标类型和发现
构建系统支持两种目标范式:
基础目标:带有文件的传统硬件特定目标基本配置:使用来自配置子模块的配置文件的统一目标
target.mk
目标发现过程:
PLATFORMS从子目录中发现
src/platform/通过查找
BASE_TARGETS平台目标目录中的文件来找到它们。
target.mk
BASE_CONFIGS从配置子模块的文件中提取
config.h从基础目标中筛选,排除带有
CI_TARGETS标记的目标。
.exclude
平台组织
每个平台都遵循以下结构:
src/platform/<family>/
├── mk/<family>.mk # MCU family build rules
├── target/<target>/ # Individual target configurations
│ └── target.mk # Target-specific settings
├── link/ # Linker scripts
└── <family>_hal.c # Platform HAL implementation
构建输出和优化
构建输出类型
| 文件类型 | 变量名 | 描述 | 用法 |
|---|---|---|---|
|
|
包含调试符号的 ELF 二进制文件 | 调试、反汇编 |
|
|
原始二值图像 | 通过SWD/JTAG直接刷写 |
|
|
英特尔十六进制格式 | 引导程序刷写 |
|
|
设备固件更新 | USB DFU 刷机 |
|
|
USB 闪存格式 | RP2040 拖放 |
|
|
拆卸清单 | 代码分析 |
|
|
内存映射 | 内存使用情况分析 |
文件命名规则
输出文件遵循以下格式:
betaflight_<FC_VER>_<TARGET_NAME>[_<CONFIG>][_<REVISION>].<ext>
在哪里:
:提取自
FC_VER使用预处理器
version.h目标或配置名称
TARGET_NAMEGit 版本(何时
REVISION)
REV=yes
外部存储 (EXST) 支持
对于具有外部存储引导加载程序的目标:
:带有已修补的 MD5 哈希部分的 ELF
TARGET_EXST_ELF:校验和修补前的二进制文件MD5校验和被计算并添加到二进制和ELF哈希部分。
TARGET_UNPATCHED_BIN通过配置头调整 VMA 地址
EXST_ADJUST_VMA
编译优化
可以为源文件分配不同的优化级别:
关键性能代码(
SPEED_OPTIMISED_SRC)
-Ofast:空间受限代码(
SIZE_OPTIMISED_SRC)默认来源:标准优化(
-Os)
-O2便于调试的代码(未进行优化)
NOT_OPTIMISED_SRC
刷写固件
构建完成后,您可以使用以下方法之一刷写固件:
| 命令 | 描述 |
|---|---|
|
自动检测并闪存(USB 或串口) |
|
使用 DFU 模式进行闪存 |
|
使用串行引导加载程序进行闪存 |
|
使用 ST-Link 进行闪存 |
开发者工具
Betaflight包含多种工具,可帮助开发人员:
| 命令 | 描述 |
|---|---|
|
启动 OpenOCD 和 GDB 进行调试 |
|
运行静态代码分析 |
|
运行测试套件 |
|
打印固件版本信息 |
持续集成和测试

CI/CD 流水线支持
构建系统包含对持续集成的全面支持:
目标过滤:
在持续集成 (CI) 中,标记为文件的目标
CI_EXCLUDED_TARGETS将被跳过。
.exclude:用于快速验证构建的代表性目标
CI_COMMON_TARGETS用于预览构建和测试的目标子集
PREVIEW_TARGETS
自动化构建命令:
并行构建所有 CI 目标
make all构建预览目标并运行测试套件
make preview:文件名中包含 Git 版本号的构建
make all_rev:构建特定MCU类型的所有目标
make targets-by-mcu
静态分析与测试:
静态代码分析集成包含多种执行模式的综合测试套件构建环境验证的编译器版本报告
cppcheck
故障排除
如果遇到编译问题,请尝试以下步骤:
运行以删除旧的构建产物请确保已安装正确的 ARM 工具链。请检查您的
make clean信息是否有效。
TARGET要调试构建问题,请使用
make targets该选项详细日志请见:
DEBUG=INFO
make V=1


