尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Reliance Edge v2.0 版本演进指南:FreeRTOS 生态下的断电安全文件系统更新历程与已知问题

Reliance Edge v2.0 版本演进指南:FreeRTOS 生态下的断电安全文件系统更新历程与已知问题 Reliance Edge v2.0 版本演进指南FreeRTOS 生态下的断电安全文件系统更新历程与已知问题【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOSReliance Edge 是一款为资源受限的嵌入式系统如 MCU设计的小型、可移植、断电安全power-fail safe文件系统其与 FreeRTOS 的集成代码就位于本仓库的 FreeRTOS-Plus/Source/Reliance-Edge 目录下。本文以该组件自带的 release_notes.md 为骨架梳理其从 v0.9Beta到 v2.0 的完整版本演进脉络、关键特性Linux 主机支持、discard/trim 接口、块设备 I/O 重试等、FreeRTOS 移植要点以及当前已知问题并结合仓库源码给出可验证的实现细节。读完本文你将能准确判断各版本之间的配置兼容性差异并掌握升级 Reliance Edge 时需要注意的移植与配置要点。一、文档定位与版本总览doc/release_notes.md记录了 Reliance Edge 在历次发布中的更新内容与已知问题Known Issues是判断某个版本是否满足自身需求、以及从旧版本升级时评估破坏性变更的第一手资料。结合仓库中的 redver.h 可以确认当前仓库携带的是v2.0版本RED_VERSION定义为v2.0RED_VERSION_VAL为0x02000000U高字节为主版本号同时RED_BUILD_NUMBER为700。此外RED_KIT被定义为RED_KIT_GPL表明这是遵循 GPLv2 开源许可的发行套件README.md 中说明无法遵守 GPLv2 条款的商业用户可另行获取商业许可商业套件还包含额外的测试与工具。值得注意的还有RED_DISK_LAYOUT_VERSION宏其值为1U。该宏只在磁盘布局发生与前版本不兼容的变更时才会递增——它相当于 Reliance Edge 卷格式的磁盘格式版本号对判断旧卷在新版本驱动下是否可继续使用至关重要。各版本发布时间线如下版本时间性质关键主题v0.9 (Beta)2015-04首个公开版本首次公开发布v1.02015-07正式版商业套件与 MISRA C:2012 设计保证包、CLI 参数全面重做v1.0.12015-10维护版新增 MQX RTOS 支持、修复 FreeRTOS 块设备服务 bugv1.0.22016-02维护版新增块设备 I/O 失败重试配置、STM32 HAL SD 卡驱动支持v1.0.32016-06维护版支持 FreeRTOS v9 静态内存分配配置v1.0.42016-07维护版商业套件新增 ARM mbed / mbed OS 支持v1.1 (Beta)2016-11Beta商业套件新增 discardtrim接口v2.02017-01正式版新增 Linux 主机环境支持含 FUSE 工具redfuse二、v2.0Linux 主机支持与关键 Bug 修复v2.02017 年 1 月是文档记录的最近一次正式发布也是本仓库实际携带的版本。其更新集中在三个方面主机环境的跨平台化、新增 FUSE 工具、以及两处重要缺陷修复。2.1 主机项目可在 Windows 与 Linux 双平台构建v2.0 之前Reliance Edge 的主机host项目主要用于在 PC 上格式化卷、构建磁盘镜像、校验卷完整性等。v2.0 之后所有 host 项目都可以在 Windows 或 Linux 上通过make命令构建格式化和镜像构建工具formatter、image builder随开源套件构建校验器checker和镜像拷贝工具image copier则在商业套件中构建。这意味着开发者可以在 Linux 开发机上直接完成卷的格式化与镜像制作无需再依赖 Windows 环境。2.2 新增 Linux 专属工具 redfuseFUSE 实现v2.0 为 Linux 新增了一个主机工具redfuse。它是一套 File System in User SpaceFUSE实现允许把 Reliance Edge 卷直接挂载到 Linux 上进行访问从而极大地方便了开发调试——例如可以在 PC 上直接读写、检查卷内的文件而不必依赖目标板。构建方式如下# 在主机项目目录中执行 make redfuse文档同时说明商业套件中的 OS 相关 API 测试也移植到了 Linux其目的正是验证 redfuse 实现的正确性。2.3 v2.0 修复的两个缺陷删除文件后目录状态异常修复了删除文件后目录可能进入无效状态的问题。例如一个目录在所有文件都被删除后仍可能报告非零的长度length。这类问题会直接影响目录遍历与容量统计的准确性。挂载失败导致驱动状态异常当挂载mount操作因元根块metaroot blocks缺失或损坏而失败时驱动可能残留不正确的状态。此修复确保挂载失败后驱动能够处于干净、可重试的状态。三、v1.1Betadiscardtrim接口的引入v1.12016 年 11 月在商业套件中引入了 discardtrim接口支持。需要明确的是discard 不是文件系统行为正确性的必需组成部分它的作用是让某些类型的 Flash 驱动与介质能以最优速度与效率运行例如通知 Flash 控制器哪些块已不再使用便于磨损均衡与擦除调度。从源码结构看块设备服务接口位于 redosserv.h其中声明了RedOsBDevRead、RedOsBDevWrite、RedOsBDevFlush等函数具体实现位于 os/freertos/services/osbdev.c当前 GPL 版 FreeRTOS 端口中未包含 discard 服务的实现在 os/freertos 目录中未检索到 Discard 相关代码可以推断 discard 接口属于商业套件专有能力GPL 版开发者如需要类似能力需自行在 OS 服务层扩展。配置兼容性影响v1.1 的此变更新增了redconf.h与redconf.c中的字段。具体来说配置工具升级到 1.1 版现有配置文件必须使用新版配置工具重新打开并保存否则会因缺少新字段而与新版本不兼容。此外v1.1 的配置工具还带来两个易用性改进支持打开/保存配置的键盘快捷键在配置中引入版本宏version macros用于快速识别过期的配置文件配新版 Reliance Edge或新版配置文件配旧版 Reliance Edge这类版本错配问题。四、v1.0.x 维护版本FreeRTOS 生态的关键补强4.1 v1.0.4ARM mbed / mbed OS 支持商业套件v1.0.42016 年 7 月在商业套件中新增了 ARM mbed 与 ARM mbed OS 支持并提供了针对NXP FRDM-K64F开发板的 mbed OS 示例工程。同时对 POSIX 风格的 API 测试套件中的一些次要缺陷进行了修复。4.2 v1.0.3FreeRTOS v9 静态内存分配支持v1.0.32016 年 6 月加入了针对FreeRTOS 9的静态内存分配static memory allocation配置支持且无需修改公共代码。这意味着在启用configSUPPORT_STATIC_ALLOCATION的 FreeRTOS 9 环境中Reliance Edge 的 FreeRTOS 移植可以配合使用静态分配的 RTOS 对象适合对堆内存使用有严格约束的场景。4.3 v1.0.2块设备 I/O 重试配置与 STM32 SD 卡驱动v1.0.22016 年 2 月是本系列维护版中内容最丰富的一个分为公共代码变更与 FreeRTOS 移植变更两部分。公共代码新增按卷配置的 I/O 重试选项新增了一个按卷per-volume配置选项用户可以指定在返回失败之前块设备读read、写write或刷盘flush操作的重试次数。这对存在瞬时错误的存储介质如某些 SD 卡或 Flash 介质非常实用。升级注意点该变更在redconf.c中新增了一个卷配置字段v1.0.1 及更早版本的redconf.c必须更新才能配合 v1.0.2 使用升级步骤为用配置工具打开redconf.h和redconf.c如需启用则勾选对应卷的 Retry block device I/O on failure 选项然后保存。从实现层面看重试逻辑属于块设备 I/O 驱动层核心驱动文件 core/driver/blockio.c 中调用了RedOsBDevRead/RedOsBDevWrite/RedOsBDevFlush等 OS 服务这些服务在 redosserv.h 中声明重试配置即作用于这些 OS 服务调用失败后的处理策略。FreeRTOS 移植STM32 HAL SD 卡驱动FreeRTOS 移植新增了对STM32 HAL SD 卡驱动的块设备接口支持开箱即用的板级支持包括STM324xG-EVALSTM32F746NG-Discovery并附带了一个针对 STM324xG-EVAL 的示例工程。MQX 移植修复修复了选择 File System Essentials API 配置时 Reliance Edge 无法编译的问题修复了RedOsBDevFlush()在支持刷盘的块设备上可能返回未初始化值的问题。4.4 v1.0.1MQX 支持与 FreeRTOS 块设备 bug 修复v1.0.12015 年 10 月在商业套件中新增了MQX RTOS支持附带 Kinetis Design Studio 示例工程并修复了 FreeRTOS 块设备服务中F_DRIVER 实现的一个 bug。五、v1.0 正式版重大重构与破坏性变更v1.02015 年 7 月是首个正式版本带来了大量影响移植与配置的破坏性变更升级用户需要格外留意。5.1 商业套件与 MISRA C:2012 设计保证包v1.0 首次发布商业套件和MISRA C:2012 Design Assurance Package。商业套件包含大量此前不可用的新工具与测试。5.2 命令行参数风格全面切换所有工具与测试的命令行参数解析被统一重构从 DOS 风格开关如/?改为 Unix 风格的短/长选项如-H和--help。如果你的脚本或自动化流程依赖旧风格的参数升级后需要相应调整。5.3 头文件重命名与新增所有os/*/include/ostypes.h被重命名为os/*/include/redostypes.h使所有头文件统一使用产品前缀如果你基于 v0.9 创建过移植需要重命名该头文件并同步更新其头文件保护宏#ifndef OSTYPES_H等。新增了 OS 相关 MISRA C:2012 偏差宏头文件os/*/include/redosdeviations.hv0.9 移植用户需要把模板从os/stub/include/redosdeviations.h复制到自己的 include 目录。在当前仓库的 FreeRTOS 端口中可以看到这两个文件的落地形态os/freertos/include/redostypes.h 与 os/freertos/include/redosdeviations.h。5.4 扇区大小下限提升至 256 字节v1.0取消了对小于 256 字节扇区大小的支持。如果使用更小的扇区例如某些 RAM 磁盘必须在块设备 OS 服务的实现中模拟emulate更大的扇区。这直接影响到自定义块设备驱动的移植设计。5.5 新增运行时格式化 APIRedFseFormat()v1.0 新增了可选的 FSE APIRedFseFormat()使 FSE 应用可以在运行时格式化卷。该变更给redconf.h增加了一个新宏v0.9 的redconf.h必须更新才能配合 v1.0 使用升级步骤用配置工具打开redconf.h忽略关于缺失宏的警告然后保存。5.6 字符串与内存函数宏的重命名内部结构调整重命名了redconf.h中用于字符串string与内存memory函数的宏。升级影响v0.9 的redconf.h需要更新对于使用旧宏名的文件新版配置工具默认使用较慢的 Reliance Edge 自带字符串/内存函数如需使用 C 库版本或自定义版本需要在配置工具中显式选择。仓库中的字符串与内存实现位于 util/string.c 与 util/memory.c可作为对照参考。5.7 v1.0 修复的两个 bug尾随路径分隔符导致创建失败修复了创建带一个或多个尾随路径分隔符的名称时报错的问题例如red_mkdir(/foo/bar/)。跨卷 inode 删除互斥修复了一个卷上某个 inode 的打开句柄会阻止另一个卷上相同 inode 编号被删除的问题。5.8 FreeRTOS 移植变更时间戳服务不再依赖 configUSE_TIMERSv1.0 的 FreeRTOS 移植中时间戳timestampOS 服务的实现不再要求configUSE_TIMERS置为1。这一点的源码证据非常清晰当前 os/freertos/services/ostimestamp.c 中的RedOsTimestamp()直接返回xTaskGetTickCount()即基于 FreeRTOS 的 tick 计数而非软件定时器RedOsTimePassed()则通过 tick 差值乘以每 tick 微秒数换算时间并且注释明确说明只要 tick 计数只回绕一次即使发生回绕也能正确工作。这降低了 FreeRTOS 工程的配置耦合——不启用软件定时器软件定时器会占用额外 RAM 与定时器守护任务也可以正常使用 Reliance Edge 的时间相关能力。六、v0.9Beta首次公开发布v0.92015 年 4 月是 Reliance Edge 的首次公开发布。从 v1.0 的诸多破坏性变更可以反推v0.9 是一个面向早期评估者的 Beta 版本其移植与配置文件均需按前文第五节所列步骤升级到 v1.0 及以上版本。七、已知问题Known Issues截至 v2.0文档记录的唯一已知问题是Visual Studio 2005 兼容性问题Reliance Edge 的 Win32 移植用于主机工具与 Win32 测试工程无法被 Visual Studio 2005 编译。由于 VS2005 已属老旧工具链此问题不会修复。从 Visual Studio 2008 开始的新版本均可正常工作。因此如果需要在 Windows 上构建 Reliance Edge 的主机工具或 Win32 测试工程请确保使用VS2008 或更高版本。八、升级清单与实操建议综合各版本的配置兼容性变更从旧版本升级到 v2.0 时可参照以下清单备份旧配置文件升级前先备份redconf.h/redconf.c。使用新版本配置工具重新打开并保存配置v1.1 新增了 discard 相关字段、v1.0.2 新增了 I/O 重试字段、v1.0 新增了格式化宏并重命名了字符串/内存函数宏这些都需要新版配置工具完成迁移v1.1 起工具自带版本宏可自动识别版本错配。检查命令行脚本若脚本使用 DOS 风格参数/?等需改为 Unix 风格-H、--help。自定义移植检查确认ostypes.h已重命名为redostypes.h、并已加入redosdeviations.h确认块设备服务满足 256 字节扇区下限要求。FreeRTOS 工程检查确认时间戳服务已不依赖configUSE_TIMERS如使用 FreeRTOS v9 静态内存分配参考 v1.0.3 的配置方式。利用新能力在 Linux 开发机上尝试make构建主机工具以及make redfuse挂载卷进行调试对易出错的介质可在配置工具中为对应卷启用 Retry block device I/O on failure。关于配置文件的生成方式README.md 指出配置包括创建工程目录从projects/newproj复制以及使用 Reliance Edge 配置工具生成redconf.h/redconf.c两个配置文件最低限度的移植则是填充 OS 服务函数空白模板见os/stub/使文件系统能够向存储介质下发命令。本仓库 os/freertos/services 目录下的osbdev.c、osclock.c、osmutex.c、ostask.c、ostimestamp.c、osoutput.c、osassert.c即 FreeRTOS 端口的完整服务实现可作为自定义移植的参考范例其中osbdev.c的头部注释osbdev.c详细说明了 F_DRIVER、FatFs、Atmel Studio Framework SD/MMC 驱动等多种块设备服务实现路径的取舍——例如 F_DRIVER 仅支持单扇区读写而 Reliance Edge 会发起多扇区请求逐扇区处理会显著拖慢文件系统性能。九、总结Reliance Edge 的版本演进呈现出一条清晰的主线从 v0.9 Beta 验证概念到 v1.0 正式版完成接口规范与配置体系的全面重构再到 v1.0.x 系列持续补强 FreeRTOS/MQX/mbed 等 RTOS 生态最后在 v1.1 引入 discard 接口并在 v2.0 实现 Linux 主机支持与 FUSE 工具。对于 FreeRTOS 用户而言本仓库的 release_notes.md 结合 os/freertos 端口的源码既是一份版本升级的兼容性指南也是一份理解块设备服务、时间戳服务等 OS 移植要点的实践参考。【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表