0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LittleFS如何在OpenHarmony中使用

科技绿洲 来源:凌智电子 作者:凌智电子 2022-06-21 17:03 次阅读

一、简介

LittleFS是一个小型的Flash文件系统,它结合日志结构(log-structured)文件系统和COW(copy-on-write)文件系统的思想,以日志结构存储元数据,以COW结构存储数据。这种特殊的存储方式,使LittleFS具有强大的掉电恢复能力(power-loss resilience)。分配COW数据块时LittleFS采用了名为统计损耗均衡的动态损耗均衡算法,使Flash设备的寿命得到有效保障。同时LittleFS针对资源紧缺的小型设备进行设计,具有极其有限的ROMRAM占用,并且所有RAM的使用都通过一个可配置的固定大小缓冲区进行分配,不会随文件系统的扩大占据更多的系统资源。当在一个资源非常紧缺的小型设备上,寻找一个具有掉电恢复能力并支持损耗均衡的Flash文件系统时,LittleFS是一个比较好的选择。

LittleFS在嵌入式开发过程中经常遇到,但是如何在OpenHarmony中使用呢?本文基于OpenHarmony 3.1Release + 小凌派-RK2206开发板做LittleFS文件系统移植,现将相关移植经验发布,分享给大家。文中如有问题,请大家帮忙指正。

二、LittleFS移植过程

本文基于OpenHarmony3.1Release做LittleFS移植,小凌派-RK2206开发板内部Flash有8MB大小,其中4~8MB区间为空闲区域。我将4M~5M作为LittleFS文件系统的/data目录挂载硬件设备。具体移植过程主要如下所示:

1、hcs配置

1.1、hdf.hcs

创建/device/soc/rockchip/rk2206/hcs_config/hdf.hcs文件,具体如下:

poYBAGKxh9KAV7R0AAAfKGEdTBE555.png

如上所述,我将在device_info/device_info.hcs添加LittleFS设备,并在fs/fs_config.hcs添加LittleFS具体信息

1.2、BUILD.gn

新建//device/soc/rockchip/rk2206/hdf_config/BUILD.gn,具体代码如下所示:

pYYBAGKxh-eALsRpAAAdaowk4R0605.png

上述代码将在编译OpenHarmony3.1Rlease时,将编译hdf.hcs。

1.3、device_info.hcs

创建/device/soc/rockchip/rk2206/hcs_config/device_info/device_info.hcs文件,在文件中添加LittleFS设备,具体代码如下所示:

pYYBAGKxh_uAIMrbAAAfH6vonZM900.png

上述代码表示建设一个设备驱动,该驱动的模块名称(即moduleName)为“HDF_PLATFORM_FS_LITTLEFS”,OpenHamrony系统依据该名称匹配驱动程序;设备匹配信息(即deviceMatchAttr)添加小凌派开发板Flash特殊信息(比如:分区信息,挂载目录名、起始地址、结束地址等)。

1.4、fs_config.hcs

新建//device/soc/rockchip/rk2206/hdf_config/fs/fs_config.hcs文件,该文件主要写清楚设备挂载信息,具体如下:

poYBAGKxiBCAdDc0AAA37K1yKFY359.png

如上所述,我将LittleFS移植所需的Flash信息分为4个:

(1)mount_points:挂载目录。

(2)block_size:Flash的擦除块大小。

(3)block_start:该挂载Flash区域的起始块地址,实际Flash地址为block_size * block_start。

(4)block_count:该挂载Flash区域的存储块总数。

注意:match_attr所表示的字符串要与device_info.hcs所表示的字符串要一致。

2、hdf驱动

新建//device/soc/rockchip/rk2206/hdf_driver/fs文件夹,文件夹下创建2个文件,具体如下所示:

2.1、fs_driver.c

2.1.1、添加必要的头文件

poYBAGKxiDCABVD5AAAbTl1wA5M742.png

2.1.2、添加HDF驱动

添加LittleFS匹配的hdf驱动,具体代码如下所示:

pYYBAGKxiESAKTn6AAAboEs1Kjg088.png

HDF_INIT(g_fsDriverEntry);

其中,moduleName必须要与device_info.hcs中的moduleName保持一致。


2.1.3、fs_driver_init函数

fs_driver_init为hdf驱动加载函数。OpenHarmony启动时,将根据hcs的编写匹配对应的驱动程序,并运行fs_driver_init函数。该函数负责:

(1)读取hcs文件的配置参数

(2)初始化Flash。

(3)适配LittleFS对应的read、write、erase和sync函数,并适配LittleFS相关参数。

(4)挂载LittleFS。

具体代码如下所示:

poYBAGKxiGOAanU_AABs5e4xx80975.png

pYYBAGKxiHeAAY6TAAB6HedFbso591.png

poYBAGKxiOeALoC-AAAZx3-MkKE893.png

2.2、BUILD.gn

BUILD.gn负责将fs_driver.c编译到内核中,具体源代码如下所示:

pYYBAGKxiPaAaxPtAAAjHo4eYso299.png

3、测试程序

我在main函数中添加一个任务,负责每隔5秒读写文件。具体代码如下所示:

/* 文件系统测试 */

pYYBAGKxiQuACB13AAByhKF1rLI882.png

pYYBAGKxiRiAGkaeAAAwcFVKFCc309.png

三、实验结果

程序编译烧写到开发板后,按下开发板的RESET按键,通过串口软件查看日志如下:

poYBAGKxiTCAE0u5AAAf0omQWnY999.png

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    4400

    浏览量

    93776
  • 存储数据
    +关注

    关注

    0

    文章

    73

    浏览量

    14025
  • OpenHarmony
    +关注

    关注

    23

    文章

    3202

    浏览量

    15153
收藏 人收藏

    评论

    相关推荐

    何在bash中使用条件语句

    今天我们介绍一下如何在 bash 中使用条件语句。
    的头像 发表于 12-09 17:27 1848次阅读
    如<b class='flag-5'>何在</b>bash<b class='flag-5'>中使</b>用条件语句

    何在Linux中使用htop命令

    本文介绍如何在 Linux 中使用 htop 命令。
    的头像 发表于 12-04 14:45 528次阅读
    如<b class='flag-5'>何在</b>Linux<b class='flag-5'>中使</b>用htop命令

    基于OpenHarmony3.1的LittleFS文件系统hdf驱动实现

    何在OpenHarmony中使用呢?本文基于OpenHarmony 3.1Release + 小凌派-RK2206开发板做LittleFS
    发表于 06-21 08:58

    何在VxWorks系统中使用TrueType字库

    何在VxWorks系统中使用TrueType字库
    发表于 03-29 12:25 19次下载

    何在java代码中使用HTTP代理IP

    何在java代码中使用HTTP代理IP。
    的头像 发表于 08-04 15:38 1905次阅读

    何在python代码中使用HTTP代理IP

    何在python代码中使用HTTP代理IP。
    的头像 发表于 08-04 15:46 1027次阅读

    何在PHP代码中使用HTTP代理IP

    何在PHP代码中使用HTTP代理IP。
    的头像 发表于 08-04 16:08 2101次阅读

    基于OpenHarmony3.1的LittleFS文件系统hdf驱动实现

    原“HarmonyOS官方合作社区”更名为“电子发烧友开源社区”,更名后 OpenHarmony 依然是我们重点关注且持续共建的开源社区,将持续为大家带来开源技术内容和资讯。   1 简介
    的头像 发表于 09-30 18:32 1326次阅读

    何在Arduino中使用伺服电机

    电子发烧友网站提供《如何在Arduino中使用伺服电机.zip》资料免费下载
    发表于 10-24 09:46 3次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用伺服电机

    何在Arduino中使用LDR

    电子发烧友网站提供《如何在Arduino中使用LDR.zip》资料免费下载
    发表于 10-31 09:50 0次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用LDR

    何在Arduino中使用Modbus

    电子发烧友网站提供《如何在Arduino中使用Modbus.zip》资料免费下载
    发表于 11-22 11:21 11次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用Modbus

    何在Arduino中使用微型伺服

    电子发烧友网站提供《如何在Arduino中使用微型伺服.zip》资料免费下载
    发表于 11-28 09:50 0次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用微型伺服

    何在OpenHarmony上开发服务卡片

    本篇文章我们将分享如何在 OpenHarmony 上开发服务卡片。
    的头像 发表于 04-10 11:12 665次阅读

    基于OpenHarmony3.1的LittleFS文件系统hdf驱动实现

    一、简介LittleFS是一个小型的Flash文件系统,它结合日志结构(log-structured)文件系统和COW(copy-on-write)文件系统的思想,以日志结构存储元数据,以COW结构
    的头像 发表于 06-22 09:42 505次阅读
    基于<b class='flag-5'>OpenHarmony</b>3.1的<b class='flag-5'>LittleFS</b>文件系统hdf驱动实现

    何在测试中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大会 上分享了他如何在测试中使用 ChatGPT。
    的头像 发表于 02-20 13:57 362次阅读