软件学习——spiffs,vfs(4)

spiffs、vfs是什么

SPIFFS 是一个用于 SPI NOR flash 设备的嵌入式文件系统,支持磨损均衡、文件系统一致性检查等功能。——简单文件系统

(目前,SPIFFS尚不支持目录,但可以生成扁平结构。如果SPIFFS 挂载在 /spiffs 下,在 /spiffs/tmp/myfile.txt 路径下创建一个文件则会在SPIFFS 中生成一个名为 /tmp/myfile.txt 的文件,而不是在 /spiffs/tmp 下生成名为 myfile.txt 的文件;)

虚拟文件系统(VFS)

如果你曾经了解过Linux,那么你大概率听说过“Linux下一切皆文件”。你插入的一个U盘,移动硬盘,乃至打印机,音响在Linux中都会被当作“文件”。

这可能不太好理解,为什么我的设备被系统当作文件了呢。实际上,这些文件不一定是真实的文件,而是虚拟的。这就是VFS中“虚拟”的含义。

从设备读取数据视为向“文件”读取数据,向设备发送数据视为写数据到“文件”。并且不同的“文件”之间读写方式相同

因此,虚拟文件系统的作用是:使得计算机上层的软件,能够用单一的方式,来跟底层不同的文件系统沟通(无论是真实的文件系统还是虚拟的文件系统)。在操作系统与之下的各种文件系统之间,虚拟文件系统提供了标准的操作接口,将所有不同种类的文件系统统一起来。

ESP32 吸收了Linux VFS的理念,被设计了VFS。为一些驱动提供了统一的接口。有了该接口,用户可像操作普通文件一样操作虚拟文件。这类驱动程序可以是 FAT、SPIFFS 等真实文件系统,也可以是有文件类接口的设备驱动程序。

1. 标准的VFS路径

一个标准ESP32 VFS路径如下所示

/挂载点/path/to/file.txt

其中包含了“挂载点”和“路径”

一个挂载点被认为成一个文件系统

(1)挂载点

① 挂载点必须为斜杠/开头,且/后至少有一个字符

当然也有特殊情况,例如当你需要一个默认文件系统,在未找到符合条件的文件系统时访问。或者应用程序要覆盖VFS某些功能。这时候允许无名的挂载点。

不要把 / 当作根文件系统!

② 允许多层挂载点

例如:可以将 /storage/sdcard作为挂载点

(2)路径

路径描述某个文件系统(挂载点)下某个文件所处的位置。

注意事项:

① 如果挂载点中嵌套了其他挂载点,则在打开文件时使用具有最长匹配路径前缀的挂载点。 例如:

 (i) /data挂载文件系统A

 (ii) /data/flash挂载文件系统B

则:

 打开/data/index.html时,VFS会去A文件系统寻找;

 打开/data/flash/main.cpp时,VFS会去B文件系统寻找;即使没有找到,VFS也不会去/data下寻找/flash/main.cpp

② 点 “ . ” 在VFS中不会被特殊处理

例如..不会被当作“上一级目录”,.也不会被当作“当前目录”

2 标准IO流: stdin、stdout、stderr

这三个流均属于文件描述符。默认情况下,对 stdout 或 stderr 执行写入操作将会通过 UART 发送字符,对 stdin 执行读取操作则会从UART 中取出字符。详见menuconfig配置

详解:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PlatformIO是一个综合性的开发平台,支持多种嵌入式系统平台和开发板,同时也支持使用SPIFFS文件系统进行数据存储。SPIFFS是一个开源轻量级嵌入式文件系统,旨在为嵌入式系统提供可靠的数据存储,特别适用于Flash存储器。 使用PlatformIO进行SPIFFS开发,首先需要在项目中添加SPIFFS文件系统支持。具体步骤如下: 1. 打开PlatformIO IDE或CLI。 2. 创建一个新的项目或打开现有项目。 3. 在项目目录下创建一个名为“data”的文件夹。 4. 在“data”文件夹中添加需要存储的文件。 5. 在项目配置文件platformio.ini中添加以下代码: ``` [env:esp32dev] platform = espressif32 board = esp32dev framework = arduino ; 添加SPIFFS文件系统支持 board_build.filesystem = spiffs ; SPIFFS分区大小 board_build.spiffs_size = 1MB ; SPIFFS分区名称 board_build.spiffs_start = 0x180000 ``` 其中,board_build.filesystem = spiffs表示使用SPIFFS文件系统,board_build.spiffs_size = 1MB表示分配1MB的存储空间,board_build.spiffs_start = 0x180000表示SPIFFS分区的起始位置。 6. 编译并上传代码到开发板上。 7. 在代码中使用SPIFFS API进行文件的读写操作,示例代码如下: ``` #include "FS.h" void setup() { // 初始化SPIFFS文件系统 if (!SPIFFS.begin()) { Serial.println("Failed to mount SPIFFS."); return; } // 读取文件内容 File file = SPIFFS.open("/test.txt", "r"); if (!file) { Serial.println("Failed to open file for reading."); return; } while (file.available()) { Serial.write(file.read()); } file.close(); // 写入文件内容 file = SPIFFS.open("/test.txt", "w"); if (!file) { Serial.println("Failed to open file for writing."); return; } file.print("Hello World!"); file.close(); } void loop() { } ``` SPIFFS API提供了一系列的文件操作函数,包括打开、读取、写入、删除等。用户可以根据自己的需求进行调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值