恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
如何构建 Flipper Zero OTA 更新包:full 与 minimal 版本及自定义 BLE 无线电栈配置
首页
资讯中心
/
如何构建 Flipper Zero OTA 更新包:full 与 minimal 版本及自定义 BLE 无线电栈配置
如何构建 Flipper Zero OTA 更新包:full 与 minimal 版本及自定义 BLE 无线电栈配置
发布时间:2026/9/15 21:56:39
如何构建 Flipper Zero OTA 更新包full 与 minimal 版本及自定义 BLE 无线电栈配置【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmwareFlipper Zero 的 OTA 升级由设备端的 updater 镜像执行updater 从 RAM 中运行按照包内附带的 Update manifestupdate.fufFlipper File Format 文本文件依次处理无线电栈、Option Bytes 校验、DFU 固件写入和/int分区恢复。如果你需要发布自己的固件就需要在仓库中构建 OTA 更新包。本文基于仓库文档 documentation/OTA.md 和 documentation/fbt.md说明如何构建三种包包含固件、无线电栈和 SD 卡资源的 full 包、只包含固件 DFU 文件的 minimal 包以及更换 BLE 无线电栈如 ble_light 换成 ble_full的自定义包。构建环境准备构建入口是项目根目录的fbt脚本它是 scons 构建系统的封装。根据 documentation/fbt.md系统只需要安装git。fbt默认自动下载并解压预编译工具链不会污染系统全局 PATH。fbt每次启动都会执行git submodule update --init可用环境变量FBT_NO_SYNC1跳过*nix 下写作$ FBT_NO_SYNC1 ./fbt ...。默认配置项定义在 fbt_options.py命令行传入的值优先级高于配置文件也可以用fbt_options_local.py做持久覆盖而不改默认配置。可用./fbt -h查看全部选项。fbt自己管理内部依赖只需调用最高层的目标它会保证所依赖的内容都已构建。与更新包直接相关的目标有updater_package— 构建完整的自更新包updater_minpackage— 构建最小自更新包只包含固件的 DFU 文件full 版本则额外包含无线电栈与 SD 卡资源。构建 full 更新包按 documentation/OTA.md 的说明构建包含固件、无线电栈和 SD 卡资源的完整更新包./fbt COMPACT1 DEBUG0 updater_packageCOMPACT1与DEBUG0是优化开关size 优化 / 关闭调试构建文档中所有 OTA 包构建示例都使用这一组合。构建完成后dist目录会生成对应硬件目标的发布产物OTA 文档中的示例命令引用了dist/f7/flipper-z-f7-updater-*.bin这类路径说明 updater 阶段镜像等文件就发布在dist下。构建 minimal 更新包如果只需要更新主固件、不动无线电栈和 SD 卡资源./fbt COMPACT1 DEBUG0 updater_minpackage对应到 manifest 层面minimal 包的 Radio 相关字段为空值时updater 会跳过与这些值相关的所有操作见下文 manifest 说明。自定义 BLE 无线电栈默认更新包使用 Bluetooth Light 栈。这一点可以从 fbt_options.py 的默认值确认COPRO_OB_DATA scripts/ob.data # Default radio stack COPRO_STACK_BIN stm32wb5x_BLE_Stack_light_fw.bin # Firmware also supports ble_full, but it might not fit into debug builds COPRO_STACK_TYPE ble_light仓库lib/stm32wb_copro/firmware/目录下提供了多个 STM 提供的栈二进制如stm32wb5x_BLE_Stack_full_fw.bin、stm32wb5x_BLE_Stack_light_fw.bin。要把更新包换成另一个栈按 documentation/OTA.md 的示例把栈类型和二进制名传给fbt./fbt updater_package COMPACT1 DEBUG0 COPRO_OB_DATAscripts/ob_custradio.data COPRO_STACK_BINstm32wb5x_BLE_Stack_full_fw.bin COPRO_STACK_TYPEble_full这里要注意三个条件COPRO_OB_DATA必须指向scripts目录下一个有效的 Option Byte 参考数据文件且其内容要与你的无线电栈类型匹配。文档给出的 full 栈示例使用的是 scripts/ob_custradio.data默认的 light 栈则使用 scripts/ob.data。两个文件都是字段:值:权限形式的行列表其中被#注释掉的行如#SFSA、#C2OPT、#NBRSD、#SNBRSA、#BRSD、#SBRSA、#SBRV正是两个文件的差异所在。只有在你的固件版本支持该栈时才能选用OTA 文档原文是 You can pick a different stack if your firmware version supports it。某些情况下构建命令行需要追加COPRO_DISclaimer...来确认你的意图原文为COPRO_DISCLAIMER...。关于ble_full还有一个来自 fbt_options.py 的限制提示固件支持ble_full但它可能放不下 debug 构建。这也解释了为什么上面的命令统一使用DEBUG0。用 update.py 构建部分更新包如果不需要重新构建固件只想定制包内容例如只安装 BLE FULL 栈可以按 documentation/OTA.md 直接调用 scripts/update.pyscripts/update.py generate \ -t f7 -d r13.3_full -v BLE FULL 13.3 \ --stage dist/f7/flipper-z-f7-updater-*.bin \ --radio lib/stm32wb_copro/firmware/stm32wb5x_BLE_Stack_full_fw.bin \ --radiotype ble_full参数含义-t是硬件目标这里为 f7-d是输出目录-v是写入 manifest Info 字段的描述字符串--stage指向已有的 updater 阶段镜像dist下由固件构建产生通配符按实际文件名替换--radio与--radiotype指定无线电栈镜像及其类型。其余选项以scripts/update.py generate的帮助输出为准。scripts/update.py在生成包时会做两类检查这些日志值得留意无线电栈地址如果不指定--radioaddr脚本会从栈镜像中推断加载地址并输出类似Using guessed radio address 0x...的信息提示用 STM 的 Release Notes 核对或用--radioaddr显式指定manifest 中 Radio address 一栏即由 STM 在 Release Notes 中给定。内存布局检查脚本会校验 updater 阶段文件大小是否超过 128 KB超过则在旧固件上不可加载、固件镜像是否与 C2 区域重叠。布局可疑时脚本会拒绝生成并要求确认。非标准栈类型脚本内置的白名单只有 BLE_FULL、BLE_LIGHT、BLE_BASIC指定白名单之外的--radiotype会报错需要确认意图。脚本失败时会提示可能把设备变成需要 SWD 编程器才能修复的状态并要求用--I-understand-what-I-am-doingyes明确确认。在确认清楚目标设备与栈的匹配关系之前不要盲目加这个参数。Update manifest 结构与结果验证生成后的包目录包含update.fufmanifest 和被打包的二进制。根据 documentation/OTA.mdmanifest 的必填键按固定顺序是Filetype常量字符串 Flipper firmware upgrade configurationVersionmanifest 版本当前值为 2Info描述包内容的任意字符串即generate的-v参数Target包对应的硬件修订版本Loader从 RAM 执行的 stage 2 loader 文件名Loader CRCloader 文件的 CRC32以小端十六进制表示。可选字段允许空值空则 updater 跳过对应操作包括Radio无线电栈镜像文件名、Radio address、Radio versionmajor/minor/sub/branch/release/stack type 打包成 6 个十六进制字节、Radio CRC、Resources解压到 SD 卡的资源 TAR 包以及OB reference/OB mask/OB write mask三组 Option Bytes 校验值。minimal 包与 full 包的区别就体现在这些可选字段的有无上。构建完成后的验证路径检查dist目录或generate的-d输出目录中生成了 manifest 与各二进制文件对照--stage/--radio传入的文件确认拷贝完整构建日志中关注上文列出的 radio address 推断与 layout 检查输出出现Memory layout looks suspicious这类警告时脚本会中止不要直接加确认参数继续包刷入设备后如果更新失败updater 不会留下半更新状态而是允许重试并以[XX-YY]格式错误码报告。documentation/OTA.md 附有一张完整错误码表如1 50表示包与硬件目标不匹配、3 100表示无线电固件 CRC 不匹配、1 50硬件版本不匹配等可按阶段定位问题。限制与下一步无线电栈的选择受固件版本支持范围限制ble_full可能无法用于 debug 构建fbt_options.py 注释明确说明。COPRO_OB_DATA的 Option Bytes 参考数据必须与栈类型匹配manifest 写入时对这三组值标注了 NEVER EVER MESS WITH THESE VALUES见 scripts/update.py改动错误的 Option Bytes 有变砖风险。构建成功后fbt还提供了flash_usb/flash_usb_full目标可以把更新包经 USB 直接构建并安装到设备详见 documentation/fbt.md 的目标列表而验证包在设备端完整升级流程可对照 documentation/OTA.md 的三个阶段/int备份、刷写、恢复与资源解压观察各步骤是否正常。【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考