7.5. ROMFS¶
ROMFS est un système de fichiers en lecture seule intégré à la caméra à la compilation et monté sur /rom/. Les blocs de fichiers résident en flash et sont mappés dans l’espace d’adressage, de sorte qu’ouvrir un fichier là-bas expose ses octets directement depuis la flash sans copie en RAM. Les modèles, les fichiers d’étiquettes et les Haar Cascades en sont le contenu typique.
7.5.1. Pourquoi les modèles résident ici¶
Deux raisons. La première est le compromis sur la RAM déjà évoqué : un modèle sur /rom/ se lit sur place depuis la flash et ne coûte aucune RAM au-delà de son arène de tenseurs, alors qu’un modèle sur /sdcard/ est copié en RAM au moment du chargement et coûte la taille du fichier en plus de l’arène. Sur les caméras les plus petites, cette différence fait souvent la différence entre tenir et ne pas tenir en mémoire.
La seconde est le NPU. Le NPU du N6 et l’Ethos-U de l’AE3 attendent leurs poids dans une région adressable en mémoire avec le bon alignement, et l’outillage de compilation qui compile un modèle pour ces accélérateurs (STEdgeAI pour le NPU du N6, Vela pour l’Ethos-U de l’AE3) place le résultat dans le ROMFS avec cette disposition. Un modèle chargé depuis /sdcard/ aboutit dans la RAM du tas, ce qui convient pour les chemins CPU qu’utilisent le H7 et le RT1062, mais renonce au chemin NPU direct-depuis-la-flash autour duquel les caméras les plus rapides ont été conçues.
7.5.2. Un système de fichiers MicroPython normal¶
À l’exécution, ROMFS se comporte comme n’importe quel autre système de fichiers MicroPython monté : os.listdir() énumère /rom/, builtins.open() y ouvre les fichiers, et un chemin sous celui-ci se transmet à toute API qui accepte un chemin. La seule restriction est que les scripts ne peuvent pas y écrire – la partition est en lecture seule à l’exécution.
L’IDE peut éditer le ROMFS. Il expose le contenu de la partition dans son navigateur de fichiers et permet d’y ajouter, supprimer et remplacer des fichiers de la même manière que pour la carte SD. L’usage prévu est d’ajouter des modèles personnalisés, des fichiers d’étiquettes, des scripts utilitaires ou toute autre ressource que l’application doit livrer avec la caméra. Tout ce qui est déposé dans /rom/ via l’IDE bénéficie du même stockage direct-depuis-la-flash, accessible au NPU, dont disposent les modèles préchargés.