7.5. ROMFS¶
ROMFS es un sistema de archivos de solo lectura integrado en la cámara en tiempo de compilación y montado en /rom/. Los bloques de archivos residen en la memoria flash y se mapean en el espacio de direcciones, de modo que abrir un archivo allí expone sus bytes directamente desde la flash sin copia en RAM. Los modelos, los archivos de etiquetas y las cascadas de Haar son su contenido habitual.
7.5.1. Por qué los modelos residen aquí¶
Por dos razones. La primera es el compromiso de RAM ya mencionado: un modelo en /rom/ se lee in situ desde la flash y no consume RAM más allá de su arena de tensores, mientras que un modelo en /sdcard/ se copia a la RAM en el momento de la carga y consume el tamaño del archivo además de la arena. En las cámaras más pequeñas, esa diferencia suele ser la diferencia entre que el modelo quepa o no.
La segunda es la NPU. La NPU del N6 y la Ethos-U del AE3 esperan sus pesos en una región direccionable en memoria con la alineación correcta, y el conjunto de herramientas de compilación que compila un modelo para esos aceleradores (STEdgeAI para la NPU del N6, Vela para la Ethos-U del AE3) coloca el resultado en ROMFS con esa disposición. Un modelo cargado desde /sdcard/ acaba en la RAM del heap, lo cual está bien para las rutas de CPU que usan el H7 y el RT1062, pero renuncia a la ruta NPU directa-desde-flash en torno a la cual se diseñaron las cámaras más rápidas.
7.5.2. Un sistema de archivos MicroPython normal¶
En tiempo de ejecución, ROMFS se comporta como cualquier otro sistema de archivos MicroPython montado: os.listdir() enumera /rom/, builtins.open() abre archivos en él, y una ruta bajo él se puede pasar a cualquier API que acepte una ruta. La única restricción es que los scripts no pueden escribir en él – la partición es de solo lectura en tiempo de ejecución.
El IDE sí puede editar ROMFS. Expone el contenido de la partición en su explorador de archivos y permite agregar, eliminar y reemplazar archivos allí del mismo modo que lo hace para la tarjeta SD. El uso previsto es agregar modelos personalizados, archivos de etiquetas, scripts auxiliares o cualquier otro recurso que la aplicación necesite distribuir con la cámara. Cualquier cosa que se coloque en /rom/ a través del IDE obtiene el mismo almacenamiento directo-desde-flash y accesible por la NPU que tienen los modelos precargados.