7.5. ROMFS¶
ROMFS è un filesystem di sola lettura integrato nella camera in fase di compilazione e montato su /rom/. I blocchi dei file risiedono in flash e sono mappati nello spazio di indirizzamento, quindi aprire un file lì espone i suoi byte direttamente dalla flash senza alcuna copia in RAM. I modelli, i file delle etichette e le cascate Haar sono i contenuti tipici.
7.5.1. Perché i modelli risiedono qui¶
Due ragioni. La prima è il compromesso sulla RAM già menzionato: un modello su /rom/ viene letto in loco dalla flash e non costa RAM oltre alla sua arena dei tensori, mentre un modello su /sdcard/ viene copiato in RAM al momento del caricamento e costa la dimensione del file in aggiunta all’arena. Sulle camere più piccole quella differenza è spesso la differenza tra entrare in memoria o non entrarci.
La seconda è l’NPU. L’NPU dell’N6 e l’Ethos-U sull’AE3 si aspettano i loro pesi in una regione indirizzabile in memoria con il giusto allineamento, e gli strumenti di build che compilano un modello per quegli acceleratori (STEdgeAI per l’NPU dell’N6, Vela per l’Ethos-U dell’AE3) collocano il risultato in ROMFS con quel layout. Un modello caricato da /sdcard/ finisce nella RAM dell’heap, il che va bene per i percorsi CPU usati dall’H7 e dall’RT1062, ma rinuncia al percorso NPU diretto-dalla-flash attorno a cui le camere più veloci sono state progettate.
7.5.2. Un normale filesystem MicroPython¶
A runtime ROMFS si comporta come qualsiasi altro filesystem MicroPython montato: os.listdir() enumera /rom/, builtins.open() apre i file al suo interno e un percorso al suo interno può essere passato a qualsiasi API che accetti un percorso. L’unica restrizione è che gli script non possono scrivere su di esso – la partizione è di sola lettura a runtime.
L’IDE può modificare ROMFS. Espone i contenuti della partizione nel suo file browser e supporta l’aggiunta, la rimozione e la sostituzione dei file lì nello stesso modo in cui lo fa per la scheda SD. L’uso previsto è quello di aggiungere modelli personalizzati, file di etichette, script di supporto o qualsiasi altra risorsa che l’applicazione deve fornire insieme alla camera. Qualsiasi cosa inserita in /rom/ tramite l’IDE ottiene lo stesso storage diretto-dalla-flash e accessibile dall’NPU che hanno i modelli precaricati.