参考文档(国内):DFS 参考文档
参考文档(国内):EasyFlash 参考文档

  

一、DFS 概述

  DFS 是 RT-Thread 提供的虚拟文件系统组件,全称为 Device File System,即设备虚拟文件系统。
  具体的描述可以查看上面的参考手册。

  

二、EasyFlash 概述

  EasyFlash 是一款开源的轻量级嵌入式Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。
  它让 Flash 变为 NoSQL(非关系型数据库)模型的小型键值(Key-Value)存储数据库。
  具体的描述可以查看上面的参考手册。

  

三、DFS 和 EasyFlash 关系

  如下图所示。

  

四、DFS、EasyFlash、SD卡的使用

  

1、DFS 的使用

  因为我们使用的是 W25Q128 来挂载 DFS 的 elm FAT,elm FAT 默认的扇区大小是 512,然而 W25Q128 的扇区大小是 4096,所以需要进行相应的修改。

   而且,DFS 也需要进行相应的修改。

/* components/dfs/include/dfs.h */#ifndef SECTOR_SIZE
#define SECTOR_SIZE              4096   //512
#endif

  在 FAL 的文章中,我们在 “FAL 分区的使用” 这小结中介绍了 DFS 的挂载过程,这里就不再介绍了。
  注意:DFS 必须挂载到块设备上。

  

2、EasyFlash 的使用

  EasyFlash 并不需要挂载到块设备上,它只需要找到 FAL 分区表中指定的分区,然后使用 FAL 提供的 API 直接对分区进行操作。
  所以,我们需要指定 EasyFlash 所要使用的分区。

/* bsp/stm32/stm32l475-atk-pandora/board/ports/ef_fal_port.c *//* 使用的 FAL 中的 "easyflash" 分区 */
#define FAL_EF_PART_NAME               "easyflash"

  接下来,我们可以在 “DFS 的使用” 提供的代码上添加 EasyFlash 的初始化,就可以使用 EasyFlash 了。

#include <fal.h>
#include <dfs_fs.h>
#include <easyflash.h>/* 挂载初始化 */
void mnt_init(void)
{struct rt_device *rootfs = RT_NULL;/* 使用 filesystem 分区创建块设备,块设备名称为 filesystem */rootfs = fal_blk_device_create("filesystem");if(rootfs == RT_NULL)return;/* 将 elm fat 文件系统挂载 W25Q128 的 filesystem 分区 */if (dfs_mount("filesystem", "/", "elm", 0, 0) == 0){rt_kprintf("file system initialization done!\n");}else{if(dfs_mkfs("elm", "filesystem") == 0){if (dfs_mount("filesystem", "/", "elm", 0, 0) == 0){rt_kprintf("file system initialization done!\n");}else{rt_kprintf("file system initialization failed!\n");}}}/* easyflash 的初始化 */easyflash_init();
}

  

3、SD 卡的使用

  这里介绍一下思路:因为我们使用片外 Flash 的 “filesystem” 分区创建了对应的块设备,用来挂载根目录 /,所以这里在根目录 / 下创建一个 mnt 目录当作挂载点,用于挂载 SD 卡。
  在挂载之前,我们需要设置一下 DFS 支持挂载的文件系统数量(由 2 改为 3),不然会报错。

  因为 RT-Thread 已经提供的 SD 卡的驱动代码,所以我们需要将 SD 卡驱动代码中的挂载部分给屏蔽掉,然后由我们自己来挂载。
  同样的,我们可以在 “EasyFlash 的使用” 提供的代码上添加 SD 卡的挂载。

void mnt_init(void)
{struct rt_device *rootfs = RT_NULL;/* FAL 初始化 */fal_init();/* 使用 filesystem 分区创建块设备,块设备名称为 filesystem */rootfs = fal_blk_device_create("filesystem");if(rootfs == RT_NULL)return;/* 将 elm fat 文件系统挂载 W25Q128 的 filesystem 分区 */if (dfs_mount("filesystem", "/", "elm", 0, 0) == 0){rt_kprintf("file system initialization done!\n");}else{if(dfs_mkfs("elm", "filesystem") == 0){if (dfs_mount("filesystem", "/", "elm", 0, 0) == 0){rt_kprintf("file system initialization done!\n");}else{rt_kprintf("file system initialization failed!\n");}}}/* easyflash 的初始化 */easyflash_init();/* 创建 /mnt 目录,用于挂载 SD 卡 */if (opendir("/mnt") == RT_NULL){if (mkdir("mnt", 0x777) == -1)return;}    if(rt_device_find("sd0") == RT_NULL){rt_kprintf("failed to find sd card device.\n");return;}if (dfs_mount("sd0", "/mnt", "elm", 0, 0) == RT_EOK){rt_kprintf("sd card mount to '/mnt' success.\n");}else{rt_kprintf("sd card mount to '/mnt' failed!\n");}
}

【RTT】SPI Flash 与文件系统(3):DFS 和 EasyFlash相关推荐

  1. 【RTT】SPI Flash 与文件系统(2):FAL

       参考文档(国内):FAL 参考文档    一.概述   FAL (Flash Abstraction Layer) ,即 Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理 ...

  2. STM32CubeMX学习笔记(25)——FatFs文件系统使用(操作SPI Flash)

    一.FatFs简介 FatFs 是面向小型嵌入式系统的一种通用的 FAT 文件系统.它完全是由 ANSI C 语言编写并且完全独立于底层的 I/O 介质.因此它可以很容易地不加修改地移植到其他的处理器 ...

  3. RT-Thread使用 SFUD 操作 Flash挂载文件系统

    在智龙上使用 SFUD 操作 Flash并挂载文件系统 参考在潘多拉上使用 SFUD 操作 Flash 及在 STM32F429 上应用文件系统 SFUD 是一款开源的串行 SPI Flash 通用驱 ...

  4. flash挂载到系统 spi_jffs2根文件系统挂载不上spi flash

    这几天一直在弄jffs2,让jffs2挂载到spi flash上,所以在内核中对spi flash进行了分区,给uboot了1M的空间,给kernel 4M的空间,给jffs2了11M的空间,因为我们 ...

  5. 基于spi FLASH的嵌入式文件系统 littlefs(转)

    基于spi FLASH的嵌入式文件系统 littlefs 转载于:https://www.cnblogs.com/LittleTiger/p/10737640.html

  6. ZYNQ开机挂载SPI FLASH中的jffs2文件系统

    目录 写在前面 Vivado工程建立 petalinux工程建立 下载程序,开机测试 没成功的话看这里 写在前面   做类嵌入式开发很久了,从51到STM32,Arduino,ESP8266,ESP3 ...

  7. ADSP-SC589开发板更换SPI FLASH并从flash引导内核与文件系统

    前情提要:目前本人正在用ADSP-SC589开发板做开发,希望实现内核与文件系统都从SPI FLASH启动,但板子上原来的SPI FLASH太小了,于是更换了镁光的MT25QU01GBBB FLASH ...

  8. NUC972 SPI Flash启动+内核+Cramfs文件系统

    NUC972 作为一个低成本linux方案,有片内SDRAM,又有茫茫多的外设,简直工控神U. 为了追究更低成本,考虑放弃使用NAND,把uboot, 内核,文件系统都放在SPI FLASH.这样画板 ...

  9. stm32f407单片机rt thread 片外spi flash OTA升级配置示例

    参考地址https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/ 第一步,生成Boot ...

最新文章

  1. Laravel 实践之路: 数据库迁移与数据填充
  2. win32汇编获取当前进程ID和可执行文件名
  3. 当DRM出错时的解决办法
  4. SAP Hybris Discount group,折扣组,折扣记录,用户组几组概念的关联
  5. 项目中SQL语句文件保存及提取方法
  6. 牛客挑战赛48C-铬合金之声【Prufer序列】
  7. RMI(Remote Method Invocation,远程方法调用)
  8. java 停止kettle转换_通过java运行Kettle转换
  9. 阿里巴巴、支付宝员工都在用的知识管理工具,究竟有何特别?
  10. 第二天 Linux常见命令
  11. 获取object的值
  12. PADS 改变图纸和图页边界大小
  13. 全局变量不能放在头文件其中
  14. OCR文字识别方法综述
  15. 滴滴程序员年薪80万却被亲戚鄙视:钱多有啥用,我儿子二本大学教师
  16. 【python】使用in判断元素是否在列表(list)中,如何提升搜索效率?
  17. STM32/GD32 IAP/Bootloader升级APP研究以及编程实现、hex文件格式
  18. 手机上获取地图某个定位的经纬度坐标的方法 - 查询经度、纬度 - 百度地图app、高德地图app、Earth地球
  19. 微信如何群发消息给所有人?
  20. 养殖环控程序 三菱plc可以带物联网模块,7寸触摸屏程序

热门文章

  1. PreScan里动力学模型的2D和3D的区别
  2. IntelliJ IDEA(2020.3)的下载、安装步骤详细教程
  3. IT科技行业发展现状,未来发展方向有哪些?
  4. 架构扫盲|四种常见的软件架构
  5. matlab的稀疏表示分类,基于稀疏表示的分类方法
  6. 关于windows server 2016服务器 exchange 2010 managment Shell 停止工作的问题(已解决)
  7. HarmonyOS应用开发 — HelloWorld应用开发E2E体验
  8. 去加拿大跟Bengio读硕vs斯坦福全奖ML博士,选哪个?
  9. Unity 简单随机创建玩家游戏名
  10. 【文献阅读】The role of news sentiment in oil futures returns and volatility forecasting