[components][fee]#1998
Open
O-O-BOOK wants to merge 2 commits into
Open
Conversation
Author
1.fee 软件包集成步骤本文档说明如何把 2. 适用范围本文覆盖两类集成场景:
当前已经实际验证通过的环境如下:
3. 软件包索引准备
其中真正需要提交到
同时需要在 4. BSP 侧接入前提目标 BSP 需要允许在线软件包的 以 如果 BSP 本地没有 说明:
5. 使用本地 package-index 验证在 5.1 进入 BSP 目录cd /d C:\sourcedata\rt-thread\bsp\qemu-vexpress-a9
call C:\Work\InstallTools\env-windows\tools\bin\env-init.bat5.2 指向本地 package-indexset PKGS_ROOT=C:\sourcedata\custom_fee\package-index
set PKGS_DIR=%PKGS_ROOT%说明:
5.3 打开 menuconfig 使能软件包menuconfig建议在菜单中完成以下配置:
本次实际验证对应的关键配置为: 5.4 下载软件包pkgs --update正常情况下会把软件包下载到 BSP 本地目录: 5.5 编译 BSPscons -j8本次验证时,构建日志已经确认编译输入来自: 这说明参与构建的是 Env 下载的软件包,而不是旧的本地源码副本。 6. 运行验证以 本次验证通过时的关键输出为: 如果工程没有打开 7. 合入主仓库后的常规使用当 常规流程如下:
如果 BSP 的 |
10 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
本 PR 引入并完善了一个新的独立组件 fee。它面向嵌入式场景下“少量 block 化数据需要可靠持久化到 flash”的需求,用来承接配置参数、标定数据、状态快照等非易失数据,而不是让业务层直接处理裸 flash record、掉电恢复、GC 和版本回滚。
从设计目标上看,这个组件并不是要替代通用 KV 数据库,而是要解决固定逻辑块持久化场景下,通用方案常见的两个痛点:
相对 FlashDB KVDB 一类通用 KV 机制,降低 GC 被动触发、整 sector 扫描、逐条物理记录搬运带来的长尾问题
相对“上电后全盘扫描历史记录再建立索引”的恢复方式,降低 block 首次可读时间,尤其是关键 block 的启动读取时延
这个组件主要解决以下问题:
业务层不再需要自己维护“参数写 flash”的散落逻辑,避免每个项目都重复实现一套简化版 EEPROM Emulation
将 block 管理、版本覆盖、失效、回滚、完整性校验、启动恢复、GC 等通用能力收敛为可复用组件,而不是和某个板级 FLS 驱动强耦合
在数据量和历史 record 增长后,避免每次读都全盘扫描 flash,降低读取和恢复路径的不确定性
在系统上电启动时,不必等待全量 flash 扫描完成,关键 block 可以更早恢复可读
为后续接入真实 flash/FLS 驱动提供统一接口,同时保留 QEMU/RAM mock 环境下可验证、可诊断的 bring-up 能力
如果目标问题是“FlashDB 在固定 block 存储场景下 GC 偏慢、上电读 block 偏慢”,那么这套 fee 的设计方向就是针对这两个问题给出专用解法,而不是继续在通用 KV 模型上做局部修补。
fee 当前的核心机制如下:
追加写日志结构:block 新版本不是原地改写,而是以 record 形式追加写入 flash,通过 record header、commit tail 和 CRC 保证格式完整性与数据有效性
RAM cache 快速索引:运行期使用 RAM cache 维护每个 block 的 cur/prev 地址和状态,读路径先查 cache,再按地址读 payload,避免反复全盘扫描
双副本与回滚:每个 block 可保留当前版本和上一版本,既支持显式 rollback,也在当前副本异常时保留降级读取机会
checkpoint + tail scan 快速启动:启动时先恢复 checkpoint,把可确认的 block 映射装回 cache;boot-critical block 可在 CKPT_READY 阶段提前可读,剩余 tail 再后台补扫到 FULL_READY
lane 分级存储:按 block 特性拆分 FAST / NORMAL / BULK lane,把高频小数据和低频大数据隔离,减少相互干扰
同步读 + 异步写调度:read 走同步路径,write/invalidate/rollback 走调度队列并由 fee_mainfunction() 推进,兼顾读延迟确定性和后台擦写调度
后台 checkpoint 与 GC:当 lane 空间或脏数据达到阈值时,组件自动请求 checkpoint 和 GC,以小步后台推进方式控制维护成本
统一驱动抽象:fee 核心只依赖 fee_flash_driver_* 接口,上层逻辑不关心底层接的是 RAM mock、QEMU 还是实际 flash/FLS 驱动
因此,这个 PR 不只是“加几个测试”或“适配一个 BSP”,而是把 fee 作为一个可独立接入、可独立验证、可继续迁移到真实硬件的 FEE 组件完整落地出来。
你的解决方案是什么 (what is your solution)
将 components/fee 文档整理到 components/fee/doc/,补充 README、对外 API、on-flash 格式、checkpoint/cache、启动恢复、调度/GC、配置规则、端口适配和诊断测试说明
引入统一的 fee_flash_driver_* 驱动抽象;fee_port.c 仅保留薄封装,默认提供 weak 的 RAM mock backend,板级工程可通过 strong definition 覆盖为真实 flash/FLS 驱动
避免 fee 核心逻辑感知底层介质类型
在 bsp/qemu-vexpress-a9 打开 fee 组件,使用 RAM mock flash 完成 bring-up 和回归验证
增强 fee_test.c,补充 fee_test / fee_diag_test 场景,覆盖 block 写入、读回、rollback、invalidate、重新初始化恢复
在诊断测试中增加每次 block 操作的耗时统计、GC 耗时统计,以及底层驱动 read/write/erase/poll 的真实访问次数与字节数统计
在诊断测试中增加 mock flash 中 checkpoint、lane、sector、record 的实际布局打印和 raw dump,方便定位 on-flash 数据格式问题
保持上层使用方式稳定,业务侧仍通过 fee_api.h 使用 FEE;后续迁移到真实硬件时,仅需按统一接口实现 fee_flash_driver_*
请提供验证的bsp和config (provide the config and bsp)
BSP: bsp/qemu-vexpress-a9
CONFIG_PKG_USING_FEE=y
CONFIG_PKG_FEE_PATH="/packages/tools/fee"
CONFIG_FEE_MOCK_FLASH_SIZE=0xA0000
CONFIG_FEE_USING_SAMPLE=y
本地验证: scons -j8 编译通过
本地验证: 在 QEMU shell 中执行 fee_test
本地验证: 在 QEMU shell 中执行 fee_diag_test
本地验证: 覆盖 block 读写、rollback、invalidate、re-init recovery、fast lane GC、checkpoint/sector/record 布局打印、底层驱动访问计数统计
action: N/A(本次为本地 QEMU 验证,未提供个人 fork action 链接)
]