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文件系统 */
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”)
4、格式化块设备
注册了块设备之后,还需要在块设备上创建指定类型的文件系统,也就是格式化文件系统。可以使用 dfs_mkfs() 函数对指定的存储设备进行格式化,创建文件系统,格式化文件系统的接口如下所示:
int dfs_mkfs(const char * fs_name, const char * device_name)
使用示例:dfs_mkfs(“elm”, “sd0”); /* 在sd0块设备上创建elm文件系统*/
以 elm-FAT 文件系统格式化块设备为例,格式化过程如下图所示:
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);