7.5. ROMFS¶
ROMFS 是在编译时构建到摄像头中的只读文件系统,挂载于 /rom/。文件块位于闪存中并被映射到地址空间,因此在那里打开文件会直接从闪存暴露其字节,无需 RAM 拷贝。模型、标签文件和 Haar 级联分类器是其中的典型内容。
7.5.1. 为什么模型存放在这里¶
有两个原因。第一个是前面已经提到的 RAM 权衡:位于 /rom/ 上的模型会就地从闪存读取,除张量竞技场外不占用任何 RAM,而位于 /sdcard/ 上的模型在加载时会被复制到 RAM 中,在竞技场之外还要额外占用文件大小的空间。在较小的摄像头上,这个差异往往就是装得下与装不下的区别。
第二个原因是 NPU。N6 的 NPU 和 AE3 上的 Ethos-U 要求其权重位于具有正确对齐方式的内存可寻址区域中,而为这些加速器编译模型的构建工具(N6 NPU 用的 STEdgeAI、AE3 Ethos-U 用的 Vela)会将结果以该布局放置在 ROMFS 中。从 /sdcard/ 加载的模型落在堆 RAM 中,这对 H7 和 RT1062 使用的 CPU 路径来说没问题,但放弃了更快的摄像头所围绕设计的直接从闪存出发的 NPU 路径。
7.5.2. 一个普通的 MicroPython 文件系统¶
在运行时,ROMFS 的行为与任何其他已挂载的 MicroPython 文件系统一样:os.listdir() 枚举 /rom/,builtins.open() 打开其中的文件,其下的路径可传递给任何接受路径的 API。唯一的限制是脚本无法向其写入 —— 该分区在运行时是只读的。
IDE 可以编辑 ROMFS。它在文件浏览器中暴露该分区的内容,并支持像对 SD 卡那样在其中添加、删除和替换文件。其预期用途是添加自定义模型、标签文件、辅助脚本,或应用程序需要随摄像头一起发布的任何其他资源。通过 IDE 放入 /rom/ 的任何内容都会获得与预加载模型相同的、可直接从闪存出发、NPU 可访问的存储。