相关资料可参考:https://aiot.realmcu.com/cn/latest/rst_rtos/rst_sdk/0_file_system/index.html#common-file-operation
虚拟文件系统(VFS)底层实现包含 FatFS 与 LittleFS。VFS 提供了 fopen、fclose、fwrite、fread 等 通用文件操作接口,键值对(KV)接口 基于通用文件操作实现。

下面以LittleFS为例实现VFS。
1、通过vfs.py建立文件系统bin文件
将test目录下的vgs_test.txt打包到bin文件
vgs_text.txt内容:
this is a vfs test. 2025.11.18

命令:vfs.py -t LITTLEFS -s 4096 -c 32 -dir test -out littlefs.bin
实际使用的命令:
~/mcu/Ameba-rtos/ameba-rtos/tools/image_scripts/vfs.py -t LITTLEFS -s 4096 -c 32 -dir test -out littlefs.bin

littlefs.bin has been successfully generated.
args:
├─ type: LITTLEFS
├─ block_size: 4096
├─ block_count: 32
├─ image_size: 131072
├─ source_directory: test
└─ output_image: littlefs.bin
2、menuconfig配置
勾选 Enable VGS LITTLEFS

3、程序部分
参考例程:/ameba-rtos/component/example/storage/vfs
1)fats.conf
# This file is generated automatically by : python menuconfig.py -s ../component/example/storage/vfs/fatfs.conf
CONFIG_VFS_LITTLEFS_INCLUDED=y //使用LITTLEFS
CONFIG_VFS_FATFS_INCLUDED=n
2)example_vfs.c
#include "ameba_soc.h"
#include "os_wrapper.h"
#include "vfs.h"
#include "example_vfs.h"
void example_vfs_thread(void *param)
{
rtos_time_delay_ms(3000);
char filename[] = "vfs_test.txt";
char path[128] = {0};
char buffer[32] = {0};
char *prefix;
FILE *finfo;
int res = 0;
(void)param;
RTK_LOGS(NOTAG, RTK_LOG_INFO, "\r\n====================Example: VFS====================\r\n");
prefix = find_vfs_tag(VFS_REGION_1);
DiagSnPrintf(path, sizeof(path), "%s:%s", prefix, filename);
finfo = fopen(path, "r");
if (finfo == NULL) {
RTK_LOGS(NOTAG, RTK_LOG_ERROR, "[%s] fopen() failed\r\n", __FUNCTION__);
goto exit;
}
res = fread(buffer, 128, 1, finfo);
if (res < 0) {
RTK_LOGS(NOTAG, RTK_LOG_ERROR, "[%s] fread() failed, err is %d\r\n", __FUNCTION__, res);
} else {
RTK_LOGS(NOTAG, RTK_LOG_ERROR, "[%s] fread() content, read buffer is %s\r\n", __FUNCTION__, buffer);
}
fclose(finfo);
exit:
rtos_task_delete(NULL);
}
void example_vfs(void)
{
if (rtos_task_create(NULL, ((const char *)"example_vfs_thread"), example_vfs_thread, NULL, 4096 * 4, 1) != RTK_SUCCESS) {
RTK_LOGS(NOTAG, RTK_LOG_ERROR, "\n\r%s rtos_task_create(example_vfs_thread) failed", __FUNCTION__);
}
}

prefix = find_vfs_tag(VFS_REGION_1);//获得VFS1的标识
DiagSnPrintf(path, sizeof(path), "%s:%s", prefix, filename);//组成文件路径
finfo = fopen(path, "r");//打开文件
res = fread(buffer, 128, 1, finfo);//读取文件
4、烧录
VFS Flash 区域的 StartAddr,结束地址应为 EndAddr + 1

| VFS |
0x083E_0000 |
128 |
用于文件系统 |

5、运行
串口输出

可以看到已经从littlefs.bin烧录的文件系统中,读取了vfs_test.txt中的内容,并通过串口输出该内容。