7.5. ROMFS

ROMFS é um sistema de ficheiros de só leitura integrado na câmara em tempo de compilação e montado em /rom/. Os blocos de ficheiros residem na flash e são mapeados no espaço de endereços, pelo que abrir um ficheiro aí expõe os seus bytes diretamente da flash sem qualquer cópia para RAM. Os modelos, ficheiros de etiquetas e cascatas de Haar são os conteúdos típicos.

7.5.1. Por que razão os modelos residem aqui

Duas razões. A primeira é a troca de RAM já mencionada: um modelo em /rom/ é lido diretamente da flash e não consome RAM além da sua arena de tensores, enquanto um modelo em /sdcard/ é copiado para RAM no carregamento e custa o tamanho do ficheiro em cima da arena. Nas câmaras mais pequenas, essa diferença é frequentemente a diferença entre caber ou não caber.

A segunda razão é a NPU. A NPU do N6 e o Ethos-U do AE3 esperam que os seus pesos estejam numa região endereçável em memória com o alinhamento correto, e o conjunto de ferramentas de compilação que compila um modelo para esses aceleradores (STEdgeAI para a NPU do N6, Vela para o Ethos-U do AE3) coloca o resultado no ROMFS com esse layout. Um modelo carregado de /sdcard/ fica na heap RAM, o que é adequado para os caminhos de CPU que o H7 e o RT1062 utilizam, mas perde o caminho de NPU direto da flash para o qual as câmaras mais rápidas foram concebidas.

7.5.2. Um sistema de ficheiros MicroPython normal

Em tempo de execução, o ROMFS comporta-se como qualquer outro sistema de ficheiros MicroPython montado: os.listdir() enumera /rom/, builtins.open() abre ficheiros nele, e um caminho abaixo dele é passado a qualquer API que aceite um caminho. A única restrição é que os scripts não podem escrever nele – a partição é de só leitura em tempo de execução.

O IDE pode editar o ROMFS. Expõe o conteúdo da partição no seu explorador de ficheiros e suporta a adição, remoção e substituição de ficheiros da mesma forma que faz para o cartão SD. O uso pretendido é adicionar modelos personalizados, ficheiros de etiquetas, scripts auxiliares ou qualquer outro recurso que a aplicação necessite de incluir com a câmara. Tudo o que for colocado em /rom/ através do IDE obtém o mesmo armazenamento direto da flash e acessível pela NPU que os modelos pré-carregados têm.