7.5. ROMFS

ROMFS는 컴파일 시점에 카메라에 내장되어 /rom/ 에 마운트되는 읽기 전용 파일시스템입니다. 파일 블록은 플래시에 상주하며 주소 공간에 매핑되므로, 그곳의 파일을 열면 RAM 복사 없이 플래시에서 직접 그 바이트를 노출합니다. 모델, 레이블 파일, Haar 캐스케이드가 전형적인 내용물입니다.

7.5.1. 모델이 여기에 위치하는 이유

두 가지 이유가 있습니다. 첫 번째는 이미 언급한 RAM 절충입니다. /rom/ 에 있는 모델은 플래시에서 그 자리에서 읽혀 텐서 아레나 외에 RAM을 소비하지 않는 반면, /sdcard/ 에 있는 모델은 로드 시점에 RAM으로 복사되어 아레나 위에 파일 크기만큼의 비용이 추가됩니다. 더 작은 카메라에서는 이 차이가 종종 메모리에 들어가느냐 들어가지 못하느냐를 가르는 차이가 됩니다.

두 번째는 NPU입니다. N6의 NPU와 AE3의 Ethos-U는 가중치가 적절한 정렬을 갖춘 메모리 주소 지정 가능 영역에 있기를 기대하며, 이러한 가속기용으로 모델을 컴파일하는 빌드 도구(N6의 NPU를 위한 ST Edge AI, AE3의 Ethos-U를 위한 Vela)는 그 레이아웃에 맞춰 결과물을 ROMFS에 배치합니다. /sdcard/ 에서 로드된 모델은 힙 RAM에 자리 잡는데, 이는 H7과 RT1062가 사용하는 CPU 경로에는 괜찮지만, 더 빠른 카메라들이 설계의 중심으로 삼은 플래시에서 직접 가는 NPU 경로를 포기하게 됩니다.

7.5.2. 일반적인 MicroPython 파일시스템

런타임에 ROMFS는 다른 마운트된 MicroPython 파일시스템과 똑같이 동작합니다: os.listdir()/rom/ 을 열거하고, builtins.open() 은 그 안의 파일을 열며, 그 아래의 경로는 경로를 받는 어떤 API에든 전달됩니다. 유일한 제약은 스크립트가 거기에 쓸 수 없다는 것입니다 – 이 파티션은 런타임에 읽기 전용입니다.

IDE는 ROMFS를 편집할 있습니다. 파일 브라우저에서 파티션의 내용을 노출하고, SD 카드에 대해 하는 것과 같은 방식으로 그곳에 파일을 추가, 제거, 교체하는 것을 지원합니다. 의도된 용도는 커스텀 모델, 레이블 파일, 헬퍼 스크립트, 또는 애플리케이션이 카메라와 함께 출하되어야 하는 다른 모든 리소스를 추가하는 것입니다. IDE를 통해 /rom/ 에 넣은 것은 무엇이든 사전 로드된 모델과 동일한 플래시에서 직접 가는, NPU가 접근 가능한 저장 공간을 얻습니다.