7.5. ROMFS¶
ROMFS ist ein schreibgeschütztes Dateisystem, das zur Kompilierzeit in die Kamera eingebaut und unter /rom/ eingehängt wird. Die Dateiblöcke liegen im Flash und werden in den Adressraum abgebildet, sodass das Öffnen einer Datei dort deren Bytes ohne RAM-Kopie direkt aus dem Flash bereitstellt. Modelle, Label-Dateien und Haar-Kaskaden sind die typischen Inhalte.
7.5.1. Warum Modelle hier liegen¶
Es gibt zwei Gründe. Der erste ist der bereits erwähnte RAM-Kompromiss: Ein Modell auf /rom/ wird an Ort und Stelle aus dem Flash gelesen und kostet über seine Tensor-Arena hinaus keinen RAM, während ein Modell auf /sdcard/ beim Laden in den RAM kopiert wird und zusätzlich zur Arena die Dateigröße kostet. Auf den kleineren Kameras ist dieser Unterschied oft der Unterschied zwischen Passen und Nicht-Passen.
Der zweite ist die NPU. Die NPU des N6 und die Ethos-U auf dem AE3 erwarten ihre Gewichte in einem speicheradressierbaren Bereich mit der richtigen Ausrichtung, und die Build-Tools, die ein Modell für diese Beschleuniger kompilieren (STEdgeAI für die NPU des N6, Vela für die Ethos-U des AE3), platzieren das Ergebnis mit diesem Layout in ROMFS. Ein von /sdcard/ geladenes Modell landet im Heap-RAM, was für die CPU-Pfade, die der H7 und der RT1062 verwenden, in Ordnung ist, aber den direkten Flash-zu-NPU-Pfad aufgibt, um den herum die schnelleren Kameras konzipiert wurden.
7.5.2. Ein normales MicroPython-Dateisystem¶
Zur Laufzeit verhält sich ROMFS wie jedes andere eingehängte MicroPython-Dateisystem: os.listdir() listet /rom/ auf, builtins.open() öffnet Dateien darin, und ein Pfad darunter wird an jede API übergeben, die einen Pfad akzeptiert. Die einzige Einschränkung ist, dass Skripte nicht darauf schreiben können – die Partition ist zur Laufzeit schreibgeschützt.
Die IDE kann ROMFS bearbeiten. Sie zeigt den Inhalt der Partition in ihrem Datei-Browser an und unterstützt das Hinzufügen, Entfernen und Ersetzen von Dateien darin auf dieselbe Weise wie bei der SD-Karte. Der vorgesehene Zweck ist das Hinzufügen benutzerdefinierter Modelle, Label-Dateien, Hilfsskripte oder anderer Ressourcen, die die Anwendung mit der Kamera ausliefern muss. Alles, was über die IDE in /rom/ abgelegt wird, erhält denselben direkten, NPU-zugänglichen Flash-Speicher, den auch die vorinstallierten Modelle haben.