7.5. ROMFS

ROMFS é um sistema de arquivos somente leitura embutido na câmera em tempo de compilação e montado em /rom/. Os blocos de arquivo ficam na flash e são mapeados no espaço de endereçamento, de modo que abrir um arquivo ali expõe seus bytes diretamente da flash sem cópia para a RAM. Modelos, arquivos de rótulos e cascatas de Haar são os conteúdos típicos.

7.5.1. Por que os modelos ficam aqui

Dois motivos. O primeiro é o trade-off de RAM já mencionado: um modelo em /rom/ é lido diretamente no lugar a partir da flash e não custa RAM além de seu tensor arena, ao passo que um modelo em /sdcard/ é copiado para a RAM no momento do carregamento e custa o tamanho do arquivo somado ao arena. Nas câmeras menores, essa diferença costuma ser a diferença entre caber e não caber.

O segundo é a NPU. A NPU do N6 e a Ethos-U no AE3 esperam seus pesos em uma região endereçável por memória com o alinhamento correto, e o ferramental de build que compila um modelo para esses aceleradores (STEdgeAI para a NPU do N6, Vela para a Ethos-U do AE3) coloca o resultado no ROMFS com esse layout. Um modelo carregado de /sdcard/ cai na RAM do heap, o que é adequado para os caminhos de CPU usados pelo H7 e pelo RT1062, mas abre mão do caminho de NPU direto-da-flash em torno do qual as câmeras mais rápidas foram projetadas.

7.5.2. Um sistema de arquivos MicroPython normal

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

A IDE pode editar o ROMFS. Ela expõe o conteúdo da partição em seu navegador de arquivos e oferece suporte para adicionar, remover e substituir arquivos ali da mesma forma que faz para o cartão SD. O uso pretendido é adicionar modelos personalizados, arquivos de rótulos, scripts auxiliares ou qualquer outro recurso que a aplicação precise embarcar com a câmera. Qualquer coisa colocada em /rom/ através da IDE recebe o mesmo armazenamento direto-da-flash, acessível pela NPU, que os modelos pré-carregados têm.