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