7.5. ROMFS

ROMFS – это файловая система только для чтения, встроенная в камеру на этапе компиляции и смонтированная в /rom/. Блоки файлов находятся во флеш-памяти и отображаются в адресное пространство, поэтому открытие файла там предоставляет его байты непосредственно из флеш-памяти без копирования в ОЗУ. Модели, файлы меток и каскады Haar – типичное содержимое.

7.5.1. Почему модели хранятся здесь

Две причины. Первая – уже упомянутый компромисс по ОЗУ: модель в /rom/ читается на месте из флеш-памяти и не расходует ОЗУ сверх своей арены тензоров, тогда как модель в /sdcard/ копируется в ОЗУ при загрузке и расходует размер файла поверх арены. На камерах поменьше эта разница часто определяет, помещается модель или нет.

Вторая – NPU. NPU процессора N6 и Ethos-U на AE3 ожидают свои веса в адресуемой памяти с правильным выравниванием, и инструменты сборки, компилирующие модель для этих ускорителей (STEdgeAI для NPU процессора N6, Vela для Ethos-U на AE3), размещают результат в ROMFS с такой компоновкой. Модель, загруженная из /sdcard/, попадает в кучу ОЗУ, что подходит для путей через CPU, используемых H7 и RT1062, но отказывается от пути NPU напрямую из флеш-памяти, под который были спроектированы более быстрые камеры.

7.5.2. Обычная файловая система MicroPython

Во время выполнения ROMFS ведёт себя как любая другая смонтированная файловая система MicroPython: os.listdir() перечисляет содержимое /rom/, builtins.open() открывает находящиеся в ней файлы, а путь внутри неё передаётся любому API, принимающему путь. Единственное ограничение в том, что скрипты не могут в неё писать – раздел доступен только для чтения во время выполнения.

IDE может редактировать ROMFS. Она отображает содержимое раздела в своём файловом браузере и поддерживает добавление, удаление и замену файлов там так же, как для SD-карты. Предполагаемое использование – добавление пользовательских моделей, файлов меток, вспомогательных скриптов или любого другого ресурса, который приложению нужно поставлять вместе с камерой. Всё, что помещено в /rom/ через IDE, получает то же хранилище с прямым доступом из флеш-памяти и доступностью для NPU, что и предзагруженные модели.