RT-Thread 虚拟文件系统使用

RT-Thread 虚拟文件系统使用


一、挂载管理

文件系统初始化步骤

1、初始化 DFS 组件

/**
 * this function will initialize device file system.
 */
int dfs_init(void)
{
    ...........
}
INIT_PREV_EXPORT(dfs_init);

2、 初始化具体的文件系统

使用dfs_register()注册具体的文件系统

1、devfs_init() —> dfs_register(&_device_fs) /* 如果开启了RT_USING_DFS_DEVFS,则会在dfs_init中完成自动初始化*/

2、elm_init() --> dfs_register(&dfs_elm) /* 初始化elm文件系统 */

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XY8zVcI2-1574686946384)(10589C8CE2D24DCCBACBA26620A960A9)]

3、在存储器上创建块设备

因为只有块设备才可以挂载到文件系统上,因此需要在存储设备上创建所需的块设备。如果存储设备是 SPI Flash,则可以使用 “串行 Flash 通用驱动库 SFUD” 组件,它提供了各种 SPI Flash 的驱动,并将 SPI Flash 抽象成块设备用于挂载,注册块设备过程如下图所示:

1、rt_hw_spi_device_attach(“spi2”, “spi20”, GPIOB, GPIO_PIN_12);

2、rt_sfud_flash_probe(“W25Q128”, “spi20”)
2、w25qxx_init(“W25Q128”, “spi20”)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WRNnvfz-1574686946385)(EC4E654BBA7D4583B00CFBBCCEDCD7C3)]

4、格式化块设备

注册了块设备之后,还需要在块设备上创建指定类型的文件系统,也就是格式化文件系统。可以使用 dfs_mkfs() 函数对指定的存储设备进行格式化,创建文件系统,格式化文件系统的接口如下所示:

int dfs_mkfs(const char * fs_name, const char * device_name)
使用示例:dfs_mkfs(“elm”, “sd0”); /* 在sd0块设备上创建elm文件系统*/

以 elm-FAT 文件系统格式化块设备为例,格式化过程如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7W8THJp-1574686946385)(657E5BB8A958416AADA19276EFF59F63)]

5、挂载块设备到 DFS 目录中

挂载是指将一个存储设备挂接到一个已存在的路径上。我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的路径上,然后通过这个路径来访问存储设备。如果只有一个存储设备,则可以直接挂载到根目录 / 上。

int dfs_mount(const char *device_name,
const char *path,
const char *filesystemtype,
unsigned long rwflag,
const void *data);
使用示例:dfs_mount(“sd0”, “/”, “elm”, 0, 0);

6、当文件系统不再使用,可以将它卸载

int dfs_unmount(const char *specialfile);

发布了35 篇原创文章 · 获赞 22 · 访问量 1155

猜你喜欢

转载自blog.csdn.net/m0_37845735/article/details/103245716