Momentum Firmware 自定义固件全指南:安装、Momentum Settings、Asset Packs 与 Bad-KB 实战
【免费下载链接】Momentum-Firmware🐬 Feature-rich, stable and customizable Flipper Firmware项目地址: https://gitcode.com/GitHub_Trending/mo/Momentum-Firmware
Momentum Firmware 是一款基于 Flipper Zero 官方固件(OFW)二次开发的高可定制固件,本文围绕仓库根目录 ReadMe.md 展开,系统讲解它的设计理念、四大安装方式、内置 Momentum Settings 配置体系、Asset Packs 主题系统、Bad Keyboard(Bad-KB)应用,以及自编译固件的方法,并穿插仓库源码(如 lib/momentum/settings.c、scripts/asset_packer.py)作为实现依据,帮助读者快速上手并在设备上完整复现整套定制流程。
一、项目定位与设计理念(Modus Operandi)
Momentum Firmware 的定位可以从 ReadMe.md 的“Modus Operandi”章节概括为三个关键词:功能丰富(Feature-rich)、稳定(Stable)、可定制(Customizable):
- Feature-rich:只要第三方功能与应用具备实际用途且能正确运行,就将其纳入固件;同时自行实现大量新功能。仓库结构也印证了这一点,
applications/下同时包含main/、services/、system/、settings/等大量模块,例如applications/system/findmy/(FindMy)、applications/system/hid_app/(HID/BLE Spam 相关)等。 - Stable:在充分理解底层机制的前提下,主动保证所有改动与新增功能在向后兼容和相互兼容上的一致性。
- Customizable:几乎界面上看到的一切都能调整——从主菜单增删应用、更换动画、替换图标、修改设备名称、变换主菜单样式,到前所未有的按键绑定,且全部在设备端完成、无需复杂配置。
项目还明确说明:本固件是 Xtreme Firmware 的直接延续,由原班(也是唯一)开发者维护,并持续同步 Unleashed 与 OFW 的最新成果。
二、Momentum Settings:固件的统一配置中心
Momentum Settings 是为本固件量身打造的高效易用应用,几乎可以配置设备的一切行为,分类如下(见 ReadMe.md):
- Interface(界面):桌面动画、主菜单、锁屏行为、文件浏览器等;
- Protocols(协议):SubGhz 设置、自定义频率的增删、将 SubGhz 频段扩展至 281–361、378–481、749–962 MHz,以及外部模块所用 GPIO 引脚的配置;
- Misc(其他):设备名称、XP 等级、屏幕选项、RGB 背光等。
2.1 源码视角:配置项的存储与读写
从源码看,所有配置集中存放在一个全局结构体MomentumSettings中,定义见 lib/momentum/settings.h:
typedef struct { char asset_pack[ASSET_PACKS_NAME_LEN]; // 当前启用的 Asset Pack 名 uint32_t anim_speed; // 动画速度(百分比) int32_t cycle_anims; // 动画轮换周期 bool unlock_anims; MenuStyle menu_style; // 主菜单样式 bool lock_on_boot; // 开机锁定 bool bad_pins_format; // 错误 PIN 重置 bool allow_locked_rpc_usb; bool allow_locked_rpc_ble; // ... 锁屏、状态栏、电池图标、文件浏览器等大量字段 SpiHandle spi_cc1101_handle; // CC1101 SPI 句柄 SpiHandle spi_nrf24_handle; // NRF24 SPI 句柄 FuriHalSerialId uart_esp_channel; // ESP 模块 UART 通道 FuriHalSerialId uart_nmea_channel; // NMEA UART 通道 FuriHalVersionColor spoof_color; // 设备颜色伪装 ScreenFrameColor rpc_color_fg; ScreenFrameColor rpc_color_bg; } MomentumSettings;配置通过 lib/momentum/settings.c 中一张“条目表”驱动读写:每个条目声明类型(字符串/整数/无符号整数/布尔)、键名与取值范围,momentum_settings_load()从INT_PATH(".momentum_settings.txt")读取并做CLAMP钳制,momentum_settings_save()则将所有条目写回该文件。例如anim_speed的合法区间是 25–300(即 25%–300%),butthurt_timer区间为 0–172800 秒,menu_style是 0 到MenuStyleCount-1的枚举。默认值也在同文件给出:anim_speed=100、menu_style=MenuStyleDsi、battery_icon=BatteryIconBarPercent等。
2.2 场景级实现
配置应用本体位于 applications/main/momentum_app/,采用场景(Scene)架构,每个场景文件对应一个设置界面,例如momentum_app_scene_interface_graphics_pack.c(图形/Asset Pack 选择)、momentum_app_scene_protocols_freqs_add.c(自定义频率添加)、momentum_app_scene_misc_spoof_name.c(名称伪装)等。应用的 application.fam 声明其fap_category="assets"、order=90,属于菜单外部应用,并带InsomniaSafe标志。
三、Asset Packs:动画 / 图标 / 字体主题系统
Asset Packs 是 Momentum 独有的改进版动画/资源系统:用户只需按几个按钮,就能创建并在多个“资源包”之间循环切换,轻松加载自定义动画、图标和字体——一个从未如此简单的“主题系统”。完整教程见 documentation/file_formats/AssetPacks.md。
3.1 安装 Asset Packs
- 确保固件版本在 v40 及以上(Asset Packs 自 v40 引入)。
- 打开 qFlipper,进入
SD Card下的asset_packs目录;若不存在可重装固件或手动创建。 - 将解压后的包文件夹整体上传到
SD/asset_packs,正确时你会看到SD/asset_packs/PackName/Anims和/或SD/asset_packs/PackName/Icons。 - 在主界面按
Arrow UP呼出菜单进入Momentum Settings,选择目标 Asset Pack;退出应用后设备自动重启并应用新主题。
也可以直接在官网或社区(Discord)下载他人制作好的包,或通过官网直接安装。
3.2 目录结构规范
一个 Asset Pack 由 Anims(动画)与 Icons(图标)两部分组成,结构如下(摘自 documentation/file_formats/AssetPacks.md):
SD/ |-asset_packs/ |-PackName/ |-Icons/ |... |-Anims/ |-ExampleAnim/ |-frame_0.bm |-frame_1.bm |... |-meta.txt |-AlsoExample/ |-frame_0.bm |-frame_1.bm |... |-meta.txt |... |-manifest.txt- Anims:沿用 Flipper 标准动画格式,每帧是
frame_x.bm(Flipper 专用原始像素格式,非 PNG),每个动画配一个meta.txt(宽高、帧率、时长等),同级再放一个manifest.txt(控制每个动画何时展示、展示概率,如等级、心情/butthurt 约束与随机权重)。 - 与官方动画系统的两点关键差异:动画存放位置从
SD/dolphin改为SD/asset_packs/PackName/Anims;Momentum 的等级上限提升到 30 级,因此manifest.txt中的等级字段要按 30 级体系编写。
3.3 图标格式:.bmx 与动画图标
图标部分有两类特殊处理(详见 documentation/file_formats/AssetPacks.md 与源码 lib/momentum/asset_packs.c):
- 静态图标(.bmx):
.bm格式不含宽高信息,动画靠meta.txt补充,静态图标则使用专用格式.bmx,结构为[ int32 width ] + [ int32 height ] + [ 标准 .bm 像素数据 ]。源码中对应的结构体为StaticIconBmxHeader(见 lib/momentum/asset_packs.c),加载时从SD/asset_packs/PackName/Icons/.../xxx.bmx读取。 - 动画图标:像动画一样以
.bm帧序列存放,但作为图标使用;旁边放一个无扩展名的meta文件,内容为[ int32 width ] + [ int32 height ] + [ int32 frame_rate ] + [ int32 frame_count ],对应源码中的AnimatedIconMetaFile结构(lib/momentum/asset_packs.c)。
图标目录结构与固件内置图标源目录保持一致(对应仓库 assets/icons/),需要注意:
- 并非所有图标都支持替换(“Not all icons are supported”),但本系统支持全部内部资源(all internal assets);
- 文件名中的像素数字(如
passport_happy_46x49)仅作命名与尺寸提示,不强制校验; - 部分子目录图标(如
SubGhz/Scanning_123x52)会被其他无关应用使用; - 官方固件中按等级区分的图标被简化:如
Passport/passport_happy1_46x49→Passport/passport_happy_46x49、Animations/Levelup1_128x64→Animations/Levelup_128x64,即去掉等级序号。
3.4 运行时加载机制(源码佐证)
设备启动时,asset_packs_init()(lib/momentum/asset_packs.c)读取全局设置中当前启用的asset_pack名,拼接路径SD/asset_packs/<PackName>(宏ASSET_PACKS_PATH定义在 lib/momentum/asset_packs.h),确认目录存在后遍历全部ICON_PATHS:多帧图标走load_icon_animated(),单帧图标走load_icon_static();若存在Fonts目录,还会为FontPrimary、FontSecondary、FontKeyboard、FontBigNumbers、FontBatteryPercent等字体槽加载.u8f字体文件。之后asset_packs_swap_icon()会按指针匹配把请求的原始图标替换为包内图标,asset_packs_free()负责释放资源。也就是说,Asset Pack 不仅支持动画与图标,还支持字体替换。
3.5 自己制作 Asset Pack(独立打包,推荐)
制作过程中所有.bm/.bmx转换均由打包器处理,你只需要准备.png图片和文本配置文件:
- (仅首次)安装 Python(推荐 3.10),执行
pip3 install Pillow heatshrink2。 - 新建一个源码包总目录(如
Desktop/AssetPacks),在其下再建一个以包名命名的子目录(包名须小于 32 个字符,与 lib/momentum/settings.h 中ASSET_PACKS_NAME_LEN=32对应),包目录内创建Anims和/或Icons目录。 - 按上述结构填充内容,注意:图片一律使用
.png;动画需附带manifest.txt与meta.txt;动画图标需附带frame_rate文件;静态图标无需额外配置。整体与官方固件素材规则一致,只是换了个文件夹。 - 将仓库 scripts/asset_packer.py 复制到源码包总目录下(与各包同级)。
- 运行
python asset_packer.py(或双击),按提示按 Enter 确认,即可在当前目录生成编译后的asset_packs目录。 - 把编译产物上传到 Flipper 的
SD/asset_packs,回到 Momentum Settings 选中即可生效。
打包器逻辑可对照 scripts/asset_packer.py:convert_bm()把 PNG 转为 1-bit、反色、XBM 编码,再用 heatshrink2(window_sz2=8、lookahead_sz2=4)压缩并加 2 字节长度头,若压缩后仍更大则回退为原始数据;convert_bmx()在头部写入<II(小端两个 int32)宽高;pack_anim()负责动画帧与meta.txt的转换;pack_icon_animated()将动画图标帧序列整理为frame_00.bm、frame_01.bm并生成二进制meta;pack_icon_static()生成.bmx;pack_font()把 u8g2 字体的.c源码编译为.u8f二进制字体。
3.6 随固件一起构建(可选)
与独立打包的差别仅在于:把源码包总目录换成assets/dolphin/custom,然后直接运行./fbt flash_usb_full或./fbt updater_package,fbt 会打包固件并自动完成 Asset Pack 的编译与安装。
四、Bad Keyboard(Bad-KB):更强大的 USB/蓝牙键盘攻击工具
BadUSB 应用功能有限,Bad-KB(源码在 applications/main/bad_usb/,application.fam中appid="bad_kb")则允许定制 USB 与蓝牙攻击的全部参数:
- 蓝牙模式:可把设备的显示名称与 MAC 地址伪装成任意内容——比如伪装成便携音箱或无线键盘,从而无需线缆即可接近目标;
- USB 模式:额外支持伪装制造商名(manufacturer)、产品名(product)以及厂商 ID/产品 ID(VID/PID)。
五、功能清单(List of Changes,非穷举)
ReadMe.md 列出了面向最终用户最值得关注的新增、更新与移除项,摘录如下(完整列表建议阅读 CHANGELOG 与 Release 说明):
- 新增(Added):Momentum App(固件行为统一配置)、Asset Packs(主题定制)、更多 UI 定制与重设计、Bad-Keyboard 应用、BLE Spam 应用、FindMy Flipper 应用(实现位于 applications/system/findmy/)、NFC Maker 应用、Wardriver 应用、SD 卡全盘文件搜索、更多 NFC 解析器与协议、NFC Type 4 协议与 NTAG4xx 支持、Subdriving(Sub-GHz 保存 GPS 坐标)、轻松伪装(名称/MAC/序列号)、直接在 Flipper 上配置 Video Game Module 颜色、增强 RGB 背光模式(全自定义与彩虹模式)、设备端文件管理(剪切/复制/粘贴/显示/新建目录等)、记忆红外 GPIO 设置并支持 IR Blaster、高级安全措施(开机锁定、PIN 错误重置等)、磁盘镜像管理(挂载并查看镜像内容、通过 Mass Storage 打开)、扩展 JavaScript API(支持 UsbDisk/Mass Storage、文件操作)。
- 更新(Updated):增强 WiFi 支持、带光标移动与符号的扩展键盘、支持排序与更多文件类型的文件浏览器、最高 30 级的优化等级系统、桌面按键绑定系统(完整按键与按压/长按重映射)、支持即时重命名与磁盘镜像虚拟挂载的存储后端、扩展 Sub-GHz 应用(重复检测与忽略、自动保存、历史改进)、显示源文件路径的改进错误提示。
- 移除(Removed):无用的 Dummy 模式、损坏或多余的应用程序。
六、安装固件:四种方式任选
ReadMe 推荐优先使用Web Updater,四种方式如下:
- Web Updater(Chrome):确保 qFlipper 已关闭 → 打开 Web Updater → 点击
Connect并从列表选择设备 → 在下拉框选择更新Channel→ 点击Install等待完成。 - Flipper Lab/App(chrome/mobile):桌面端需关闭 qFlipper,移动端需安装并配对 Flipper Mobile App → 打开最新 Release 页面 → 点击
☁️ Flipper Lab/App (chrome/mobile)链接 → 桌面端随后Connect+Install,移动端在 App 中确认并等待更新。 - qFlipper 包(.tgz):从最新 Release 下载
.tgz→ 确保 WebUpdater 与 lab.flipper.net 已关闭 → 打开 qFlipper 连接设备 → 点击Install from file→ 选择.tgz等待完成。 - 压缩包(.zip):下载
.zip并解压得到固件文件夹 → 用 qFlipper 将文件夹放入SD/update→ 在设备上按Arrow Down进入文件菜单找到更新目录 → 选中固件文件夹中的Update文件运行即可。
七、自行编译与刷写(Build it yourself)
仓库根目录 ReadMe.md 提供了完整的构建流程(基于 fbt 工具链,fbt 说明见 documentation/fbt.md):
# 下载仓库(需递归克隆子模块) git clone --recursive --jobs 8 https://github.com/Next-Flip/Momentum-Firmware.git cd Momentum-Firmware/ # 通过 USB 直接刷写(需已连接 Flipper,且 qFlipper 关闭) ./fbt flash_usb_full # 编译 TGZ 更新包 ./fbt updater_package # 构建并启动单个应用 ./fbt launch APPSRC=your_appid注意:git clone必须使用--recursive以拉取子模块(FreeRTOS、mbedtls、u8g2、mjs 等均位于 lib/ 下);flash_usb_full走 USB DFU 流程,因此要求关闭 qFlipper 以避免占用 USB 设备;updater_package产物对应上文 qFlipper.tgz安装方式。
八、小结
Momentum Firmware 以“功能丰富、稳定、可定制”为纲,围绕 Momentum Settings 统一配置、Asset Packs 主题系统、Bad-KB 输入攻击工具等自研特性构建了完整的用户体验闭环:日常使用可直接走 Web Updater 或 qFlipper 安装,进阶玩家可用scripts/asset_packer.py制作个人主题包,开发者则可基于 fbt 工具链从源码编译刷写。仓库内的 lib/momentum/(配置与资源加载核心)、applications/main/momentum_app/(设置应用)与 documentation/(配套文档)为进一步深入研究和二次开发提供了清晰的入口。
【免费下载链接】Momentum-Firmware🐬 Feature-rich, stable and customizable Flipper Firmware项目地址: https://gitcode.com/GitHub_Trending/mo/Momentum-Firmware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考