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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章