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文件系统 */

RT-Thread 虚拟文件系统使用_第1张图片

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”)

RT-Thread 虚拟文件系统使用_第2张图片

4、格式化块设备

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

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

以 elm-FAT 文件系统格式化块设备为例,格式化过程如下图所示:
RT-Thread 虚拟文件系统使用_第3张图片

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);

你可能感兴趣的:(rt-thread)