ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Flipper Zero FAP 应用测试指南:GoodFAPs 测试用例全解析与源码机制

Flipper Zero FAP 应用测试指南:GoodFAPs 测试用例全解析与源码机制 Flipper Zero FAP 应用测试指南GoodFAPs 测试用例全解析与源码机制【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware本篇技术指南基于固件仓库中的 GoodFAPs 测试用例文档系统讲解 Flipper Zero 外部应用FAPFlipper App Package的 10 组手工测试用例覆盖 Pico Pass、Sub-GHz 天气站、应用目录管理、AVR 烧录器、Video Game Module、信号发生器、NFC Magic 等典型 GoodFAP 功能同时结合 App Loader 与 FAP 机制文档 的源码实现帮助读者理解 FAP 从 SD 卡加载、API 版本校验到符号重定位的完整运行链路可直接用于功能回归测试或自定义 FAP 的验收验证。1. GoodFAP 是什么测试对象的背景GoodFAP 指的是通过应用目录companion 应用或 Web 平台安装到 SD 卡上的外部 Flipper 应用包。与编译进固件的内置应用不同FAP 本质上是带有元数据和资源附件的.elf可执行文件其兼容性由 FAP 的元数据中声明的 API 版本决定而不绑定某个具体的固件版本号。这一机制在 FAP 机制文档 中有明确说明Flipper 的 MCU 无法直接从外部存储执行代码FAP 必须先被App Loader从 SD 卡复制到 RAM并在此过程中完成完整性校验、兼容性检查与重定位relocation调整由于 FAP 需要占用 RAM 运行其可用堆内存会小于同应用编译进 Flash 的情形——不过实际占用的 RAM 小于 FAP 文件总大小因为 FAP 文件中只有一部分是代码段与数据段其余是仅在加载时使用的附加信息外部应用能调用的函数集合由硬件目标定义中的api_symbols.csv限定在 f7 目标中对应 api_symbols.csv。构建工具fbt采用语义化版本管理 API出现破坏性变更删除函数/全局变量、修改函数签名时递增主版本号新增特性时递增次版本号。测试用例的设计正是围绕这一安装—加载—运行—退出—更新—卸载生命周期展开的。下文完整覆盖原文档中的 10 组测试用例。2. Pico Pass 测试用例Pico Pass 是 NFC 应用下的外部应用测试路径为Applications → NFC → PicoPass。步骤与预期结果进入 Applications → NFC → PicoPass。预期应用成功打开。按下 Read card。预期卡片读取成功。保存卡片。预期卡片保存成功原文档中 succesfuly 为笔误。点击 Elite Dictionary Attack。预期字典攻击针对 Mifare Classic 的字典/暴力破解流程开始执行。这组用例验证了 GoodFAP 读取、存储与主动攻击流程三条核心能力其中字典攻击依赖 FAP 与 NFC 硬件服务之间的 API 调用是 API 符号表覆盖范围是否完整的典型验证点。3. Weather Station 测试用例天气站是 Sub-GHz 应用下的功能。需要注意的是从 Sub-GHz 应用清单 看subghz应用本身是apptypeFlipperAppType.MENUEXTERNAL的目标内置菜单应用targetsf7而天气站相关功能则通过 GoodFAP 形式提供测试场景测试时通常使用两台 Flipper 配合一台作为收发端另一台模拟不同频率的天气站信号。步骤与预期结果进入 Applications → SubGHz → Weather Station。用第二台 Flipper 以不同频率模拟天气站在第一台上点击 Read。预期天气站读取成功。按 Config 并启用 Hopping跳频。预期跳频功能正常工作能在不同频率上读到天气站。按 Config 并锁定屏幕。预期屏幕锁定功能正常。退出读取菜单进入 About 菜单。预期About 菜单正确显示信息。这组用例的关键在于多频接收与跳频模式。从源码结构看Sub-GHz 的收发由 receiver.c 与 subghz_worker.c 等模块承载协议注册表registry.c管理各天气站协议的编解码实现跳频场景下接收器需要在多个频率间切换并保持协议匹配的稳定性——这正是测试预期在不同频率上读到天气站的底层含义。4. 应用目录App Catalog管理测试用例原文档描述GoodFAP 的基础形式在设备出厂时并不预装需要通过 companion 应用或 Web 版目录安装应用安装后会出现在与其类型对应的子菜单中如 BT、Games 等。步骤与预期结果将 Flipper 连接到 companion 或 Web 平台。预期Flipper 连接成功。安装任意数量的应用。预期应用安装完成出现在列表中图标正常名称与目录中一致。启动应用。预期应用启动并正常运行。退出应用。预期应用关闭Flipper 继续正常工作。更新场景应用退出且 Flipper 继续正常工作。预期应用更新成功并正常工作。分别使用 companion、Web 平台和设备自身的文件浏览器卸载多个应用。预期三种卸载途径均能成功卸载应用。这一组是 FAP 生命周期管理的完整验收。从源码结构看FAP 的目录发现与加载由 App Loader 服务 负责loader_applications.c 会为应用列表这类重任务单独创建FuriThread768 字节栈来扫描 SD 卡上的应用清单避免阻塞主线程——这解释了为什么在快速安装/卸载多个应用后仍需确认系统菜单与状态栏不卡顿、不崩溃。5. AWR Flasher 测试用例AVR 芯片读写原文档说明这类应用的安装方式与其他目录应用相同区别在于它们是我们贡献的官方生态贡献应用。该用例需要一台 AVR 微控制器作为被测芯片并通过 Flipper 的 USB/引脚与目标板连接。AVR 目标板接线表PinoutAVR 引脚Flipper 引脚MISOPA6MOSIPA7SCKPB3RESETPB2GNDGNDVCC3V3步骤与预期结果按上述接线连接 AVR 微控制器。运行Dump AVR并保存 dump。预期(1) Dump 过程中芯片被正确识别(2) dump 文件保存成功。运行Flash AVR烧录芯片。预期(1) Flash 芯片被正确识别(2) 出现固件选择菜单(3) 固件烧录成功。启动ISP programmer模式。预期ISP Programmer 正确识别芯片。在 PC 端执行avrdude命令验证 ISP 模式avrdude.exe -p m2560 -c stk500v1 -P COM7 -U lock:r:lock.hex:r -U hfuse:r:hfuse.hex:r -U lfuse:r:lfuse.hex:r -U efuse:r:efuse.hex:r其中m2560需替换为实际芯片型号如m328pCOM7替换为实际 COM 口号。预期avrdude 正常工作能通过 ISP 读回各 fuse 与 lock 位。这组用例实际上把 Flipper 当作 AVR 的 ISP 从机使用-c stk500v1表明 Flipper 模拟的是 STK500 系列 ISP 从机协议。测试重点在于 dump读、flash写与 ISP 主机被 PC 驱动三种工作模式均能被正确识别和执行。6. Video Game ModuleVGM使用测试用例Video Game Module 是插入 Flipper 扩展插槽的硬件模块带 HDMI 输出能力。步骤与预期结果将 VGM 模块插入 Flipper。预期(1) 出现初始化提示信息(2) 状态栏出现模块图标。将已连接显示器的 HDMI 线插入模块。预期Flipper 画面开始复制到显示器镜像输出。下载并运行游戏 Air Arkanoid。预期加速度计摇杆/倾斜控制生效。该用例验证模块上电初始化、状态栏图标、HDMI 镜像三条链路其中状态栏图标机制与内置模块的状态栏资源体系一致参见 状态栏图标资源目录。7. Tools 工具类 GoodFAP 测试用例7.1 Clock时钟步骤进入 Apps → Tools → Clock。预期时钟进入全屏并正常走时时钟的显示格式由 Flipper 的设置项决定与时钟设置共享格式配置对应固件中的 clock_settings 应用。原文档此处配图为 flipperzero-clock-app.png即上文文首插图。7.2 NFC/RFID DetectorNFC/RFID 探测器步骤进入 Apps → Tools → NFC/Rfid Detector点击 About。预期打开应用信息页。点击 Detect Field Type。预期应用工作区打开屏幕为空白。将 Flipper 靠近一个甚至两个并排的读卡器。预期能同时识别 NFC 与 RFID 两种卡类型两个读卡器同时在场时界面会同时显示两种卡片类型。探测器用例验证的是 FAP 对 NFC 与 LF RFID 两套硬件服务 API 的并发轮询能力当两个读卡器同时存在时应用需要在 NFC13.56 MHz与低频 RFID125 kHz 等两条射频链路上都保持检测状态。8. Signal Generator 信号发生器测试用例步骤 1启动PWM Generator。预期应用启动。步骤 2在不同输出引脚与不同频率下检查输出。预期在指定引脚上按指定参数生成 PWM 信号。步骤 3运行Clock Generator在不同频率与分频比下测试。预期在指定引脚上按指定参数生成时钟信号。这组用例验证 GoodFAP 对 GPIO 硬件 PWM/定时器外设的访问能力。从源码结构看外部应用访问 GPIO 需经由固件暴露的 HAL API 符号见 api_symbols.csv 中的 GPIO 相关条目分频比与频率参数的最终落点是 STM32WB 的定时外设测试时可用示波器/逻辑分析仪核对占空比与周期。9. NFC Magic 测试用例NFC Magic 是 NFC 应用下的外部应用用于对 NTAG 系列 magic tag 进行检查、写入与擦除。步骤与预期结果进入 Applications → NFC → NFC Magic。预期应用打开。点击 Check Magic Tag并贴近所需类型的卡。预期卡片被识别判定。点击 Write Gen1a从已保存的列表中选择目标卡片。预期出现操作风险提示确认后信息写入卡片。按 Wipe擦除。预期卡片数据被删除。写入前的风险提示弹窗对应原文档强调的 a message appeared about the riskiness of the operation擦除/改写 magic tag 属于破坏性操作验收时要确认风险提示、二次确认、写入成功三个环节都出现。10. SPI Mem Manager 测试用例SPI Mem Manager 用于直接读写外部 SPI Flash 芯片。步骤与预期结果按应用内给出的接线图连接芯片启动应用。预期应用启动。读取芯片。预期数据读取完成。写回先前读到的数据。预期数据写入成功。擦除芯片数据。预期芯片被清空。读—写—擦read-back 校验是该用例的标准三段式验收流程重点验证 SPI 时序驱动在外部应用中的稳定性。11. Video Game Module 固件刷写测试用例这是 VGM 模块的完整固件升级流程除模块本身外还需要 PC 与 USB 数据线。步骤与预期结果将 VGM 模块插入 Flipper。预期(1) 出现初始化提示(2) 状态栏出现模块图标。从目录安装VGM tool应用。启动应用。预期若模块当前连接显示器屏幕镜像停止进入维护模式。点击 Install official firmware。预期(1) 出现对话框(2) 同意后开始安装(3) 安装完成后出现成功窗口并伴有声音提示。将模块固件文件复制到 SD 卡。在 VGM tool 中选择从文件安装选取 SD 卡上的固件文件。预期固件安装完成。将 VGM 从 Flipper 拔出用针按下 Boot 按钮同时连接 PC 的 USB 线。预期PC 上打开文件管理器窗口模块进入 DFU 模式。将固件文件传输到设备。预期传输完成后窗口关闭模块固件自动开始运行。该用例覆盖了三种刷写路径FAP 引导的官方固件安装、SD 卡文件自定义固件安装、以及纯 DFU 模式下的 PC 端刷写是模块硬件可靠性测试的核心场景。12. 测试环境准备与结果核对清单综合上述 10 组用例执行前需要准备的环境要素如下测试组依赖硬件/平台Pico Pass被测 NFC 卡Mifare 类型Weather Station两台 Flipper、可模拟天气站的设备/应用应用目录管理companion 应用或 Web 平台、USB/SD 连接AWR FlasherAVR 目标板、PA6/PA7/PB3/PB2 接线、PC avrdudeVGM 使用/刷写Video Game Module、HDMI 线、显示器、USB 数据线、针状工具Boot 键ToolsClock/探测器时钟设置项、NFC/RFID 读卡器可双卡Signal Generator示波器或逻辑分析仪NFC MagicNTAG 系列 magic tag、已保存的 Gen1a 卡片SPI Mem Manager外部 SPI Flash 芯片、按应用内 pinout 接线测试结论核对时建议关注三类信号加载层FAP 能否被 App Loader 成功载入 RAM 并启动——失败通常表现为应用无法启动或启动即崩溃可结合 FAP 调试文档 用fbt debug附加调试器定位FAP 载入内存后、执行前会触发断点便于设置 FAP 代码断点API 兼容层若 FAP 使用了符号表中不存在的导入符号构建阶段fbt会发出缺失符号警告设备上表现为无法运行——这与文档中所有必需符号必须出现在符号表中的约定一致功能层按各用例的 Expected result 逐条核对射频、GPIO、UI 三类行为。13. 关键仓库路径索引主题路径GoodFAPs 测试用例原文档documentation/testing/goodfaps_test_cases.mdFAP 机制与 API 版本说明documentation/AppsOnSDCard.mdApp Loader 服务FAP 加载/应用列表applications/services/loader/loader_applications.cf7 目标 API 符号表targets/f7/api_symbols.csvSub-GHz 应用清单applications/main/subghz/application.famSub-GHz 接收器实现lib/subghz/receiver.cFAP 调试指南documentation/app_dev/app_dev_debugging_faps.md时钟应用测试截图documentation/testing/images/flipperzero-clock-app.png以上用例均来自固件仓库的官方测试文档执行时应以当前仓库版本对应的设备固件与应用目录版本为准不同时期目录中的应用列表如 AWR Flasher、VGM tool 等可能有增删具体可用性以测试当时 companion/Web 目录中实际可见的应用为准。【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进