7.5. ROMFS¶
ROMFS to system plików tylko do odczytu wbudowany w kamerę w czasie kompilacji i zamontowany w /rom/. Bloki plików znajdują się w pamięci flash i są mapowane do przestrzeni adresowej, więc otwarcie tam pliku udostępnia jego bajty bezpośrednio z pamięci flash bez kopiowania do RAM. Modele, pliki etykiet i kaskady Haara to typowa zawartość.
7.5.1. Dlaczego modele tu się znajdują¶
Z dwóch powodów. Pierwszy to wspomniany już kompromis dotyczący RAM: model w /rom/ jest odczytywany w miejscu z pamięci flash i nie kosztuje żadnej pamięci RAM poza swoją areną tensorów, podczas gdy model w /sdcard/ jest kopiowany do RAM w momencie wczytywania i kosztuje rozmiar pliku ponad arenę. W mniejszych kamerach ta różnica często decyduje o tym, czy model się zmieści, czy nie.
Drugim powodem jest NPU. NPU układu N6 oraz Ethos-U w AE3 oczekują swoich wag w obszarze adresowalnym pamięcią o odpowiednim wyrównaniu, a narzędzia budujące, które kompilują model dla tych akceleratorów (STEdgeAI dla NPU układu N6, Vela dla Ethos-U w AE3), umieszczają wynik w ROMFS z takim układem. Model wczytany z /sdcard/ ląduje w pamięci RAM sterty, co jest w porządku dla ścieżek CPU używanych przez H7 i RT1062, ale rezygnuje z bezpośredniej ścieżki NPU z pamięci flash, wokół której zaprojektowano szybsze kamery.
7.5.2. Zwykły system plików MicroPython¶
W czasie działania ROMFS zachowuje się jak każdy inny zamontowany system plików MicroPython: os.listdir() wylicza zawartość /rom/, builtins.open() otwiera znajdujące się w nim pliki, a ścieżka pod nim jest przekazywana do każdego API, które przyjmuje ścieżkę. Jedynym ograniczeniem jest to, że skrypty nie mogą do niego zapisywać – partycja jest w czasie działania tylko do odczytu.
IDE może edytować ROMFS. Udostępnia zawartość partycji w swojej przeglądarce plików i obsługuje dodawanie, usuwanie oraz zastępowanie tam plików w taki sam sposób, jak robi to dla karty SD. Zamierzonym zastosowaniem jest dodawanie własnych modeli, plików etykiet, skryptów pomocniczych lub dowolnego innego zasobu, który aplikacja musi dostarczać wraz z kamerą. Wszystko, co zostanie umieszczone w /rom/ poprzez IDE, otrzymuje taką samą pamięć bezpośrednio z pamięci flash, dostępną dla NPU, jaką mają wstępnie wczytane modele.