7.5. ROMFS¶
ROMFS är ett skrivskyddat filsystem som byggs in i kameran vid kompileringstillfället och monteras på /rom/. Filblocken ligger i flashminnet och mappas in i adressrymden, så att öppna en fil där exponerar dess byte direkt från flashminnet utan någon RAM-kopia. Modeller, etikettfiler och Haar-kaskader är det typiska innehållet.
7.5.1. Varför modeller bor här¶
Två skäl. Det första är den RAM-avvägning som redan nämnts: en modell på /rom/ läses på plats från flashminnet och kostar inget RAM utöver sin tensorarena, medan en modell på /sdcard/ kopieras in i RAM vid laddningstillfället och kostar filstorleken ovanpå arenan. På de mindre kamerorna är den skillnaden ofta skillnaden mellan att få plats och att inte få plats.
Det andra är NPU:n. N6:ans NPU och Ethos-U på AE3 förväntar sig sina vikter i en minnesadresserbar region med rätt justering, och byggverktygen som kompilerar en modell för dessa acceleratorer (STEdgeAI för N6:ans NPU, Vela för AE3:ans Ethos-U) placerar resultatet i ROMFS med den layouten. En modell som laddas från /sdcard/ hamnar i heap-RAM, vilket är bra för de CPU-vägar som H7 och RT1062 använder, men avstår från den direkt-från-flash-NPU-väg som de snabbare kamerorna konstruerades kring.
7.5.2. Ett normalt MicroPython-filsystem¶
Vid körning beter sig ROMFS som vilket annat monterat MicroPython-filsystem som helst: os.listdir() räknar upp /rom/, builtins.open() öppnar filer i det, och en sökväg under det kan skickas till vilket API som helst som accepterar en sökväg. Den enda begränsningen är att skript inte kan skriva till det – partitionen är skrivskyddad vid körning.
IDE:n kan redigera ROMFS. Den exponerar partitionens innehåll i sin filbläddrare och stödjer att lägga till, ta bort och ersätta filer där på samma sätt som den gör för SD-kortet. Den avsedda användningen är att lägga till anpassade modeller, etikettfiler, hjälpskript eller någon annan resurs som applikationen behöver leverera med kameran. Allt som släpps in i /rom/ via IDE:n får samma direkt-från-flash-lagring, åtkomlig för NPU:n, som de förinstallerade modellerna har.