发帖
2 0 0

【BW20-12F开发板评测】4、虚拟文件系统

sujingliang
论坛元老

27

主题

17

回帖

8971

积分

论坛元老

积分
8971
BW系列 358 2 2025-11-18 21:09:05

相关资料可参考: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)接口 基于通用文件操作实现。

截图_20251118205356.png

下面以LittleFS为例实现VFS。

1、通过vfs.py建立文件系统bin文件

将test目录下的vgs_test.txt打包到bin文件

vgs_text.txt内容:

this is a vfs test. 2025.11.18

截图_20251118195447.png

命令: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

截图_20251118195935.png

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

截图_20251118194710.png

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

截图_20251118204114.png

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

截图_20251118205142.png

VFS 0x083E_0000 128 用于文件系统

5.png

5、运行

串口输出

截图_20251118210337.png

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

──── 0人觉得很赞 ────

使用道具 举报

赞个
不错不错,又学到了。
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 30488 个
  • 话题数: 44655 篇