7.5. ROMFS

ROMFS is een alleen-lezen bestandssysteem dat tijdens het compileren in de cam wordt ingebouwd en op /rom/ wordt aangekoppeld. De bestandsblokken bevinden zich in het flashgeheugen en worden in de adresruimte gemapt, zodat het openen van een bestand daar de bytes ervan rechtstreeks vanuit het flashgeheugen blootstelt zonder RAM-kopie. Modellen, labelbestanden en Haar Cascades zijn de typische inhoud.

7.5.1. Waarom modellen hier staan

Twee redenen. De eerste is de reeds genoemde RAM-afweging: een model op /rom/ wordt ter plaatse vanuit het flashgeheugen gelezen en kost geen RAM bovenop zijn tensor-arena, terwijl een model op /sdcard/ bij het laden naar RAM wordt gekopieerd en de bestandsgrootte bovenop de arena kost. Op de kleinere cams is dat verschil vaak het verschil tussen wel of niet passen.

De tweede is de NPU. De NPU van de N6 en de Ethos-U op de AE3 verwachten hun gewichten in een geheugen-adresseerbaar gebied met de juiste uitlijning, en de buildtooling die een model voor die versnellers compileert (ST Edge AI voor de NPU van de N6, Vela voor de Ethos-U van de AE3) plaatst het resultaat met die indeling in ROMFS. Een model dat vanuit /sdcard/ wordt geladen, belandt in heap-RAM, wat prima is voor de CPU-paden die de H7 en RT1062 gebruiken, maar het rechtstreeks-vanuit-flash NPU-pad waar de snellere cams omheen zijn ontworpen, prijsgeeft.

7.5.2. Een normaal MicroPython-bestandssysteem

Tijdens runtime gedraagt ROMFS zich als elk ander aangekoppeld MicroPython-bestandssysteem: os.listdir() somt /rom/ op, builtins.open() opent er bestanden in, en een pad eronder gaat door naar elke API die een pad accepteert. De enige beperking is dat scripts er niet naartoe kunnen schrijven – de partitie is tijdens runtime alleen-lezen.

De IDE kan ROMFS bewerken. Hij stelt de inhoud van de partitie beschikbaar in zijn bestandsbrowser en ondersteunt het toevoegen, verwijderen en vervangen van bestanden daar op dezelfde manier als voor de SD-kaart. Het beoogde gebruik is het toevoegen van aangepaste modellen, labelbestanden, hulpscripts of een andere bron die de applicatie met de cam moet meeleveren. Alles wat via de IDE in /rom/ wordt geplaatst, krijgt dezelfde rechtstreeks-vanuit-flash, NPU-toegankelijke opslag die de voorgeladen modellen hebben.