7.5. ROMFS¶
ROMFS هو نظام ملفات للقراءة فقط مدمج في الكاميرا وقت الترجمة (compile time) ومُركّب على /rom/. تعيش كتل الملفات في ذاكرة فلاش وتُربط ضمن فضاء العناوين، فيؤدي فتح ملف هناك إلى كشف بايتاته مباشرةً من ذاكرة فلاش دون نسخ إلى ذاكرة RAM. والمحتويات النموذجية هي النماذج وملفات التسميات وتعاقبات Haar (cascades).
7.5.1. لماذا تعيش النماذج هنا¶
لسببين. الأول هو مفاضلة ذاكرة RAM التي سبقت الإشارة إليها: النموذج الموجود على /rom/ يُقرأ في مكانه من ذاكرة فلاش ولا يكلّف ذاكرة RAM فوق ساحة الموتر الخاصة به، بينما النموذج الموجود على /sdcard/ يُنسخ إلى ذاكرة RAM وقت التحميل ويكلّف حجم الملف فوق الساحة. وعلى الكاميرات الأصغر يكون هذا الفرق غالبًا هو الفرق بين أن يتسع النموذج أو لا يتسع.
والثاني هو وحدة المعالجة العصبية (NPU). تتوقع وحدة NPU في N6 ووحدة Ethos-U في AE3 أن تكون أوزانهما في منطقة قابلة للعنونة في الذاكرة بالمحاذاة الصحيحة، وأدوات البناء التي تُترجم نموذجًا لتلك المُسرّعات (STEdgeAI لوحدة NPU في N6، وVela لوحدة Ethos-U في AE3) تضع الناتج في ROMFS بذلك التخطيط. أما النموذج المُحمّل من /sdcard/ فينتهي في ذاكرة RAM الكومية (heap RAM)، وهو أمر جيد لمسارات وحدة المعالجة المركزية التي تستخدمها H7 وRT1062، لكنه يتخلى عن مسار NPU المباشر من ذاكرة فلاش الذي صُمّمت من أجله الكاميرات الأسرع.
7.5.2. نظام ملفات MicroPython عادي¶
أثناء التشغيل يتصرف ROMFS كأي نظام ملفات MicroPython مُركّب آخر: os.listdir() يُعدّد محتويات /rom/، و builtins.open() يفتح الملفات فيه، وأي مسار تحته يُمرَّر إلى أي API يقبل مسارًا. القيد الوحيد هو أن البرامج النصية لا تستطيع الكتابة إليه -- فالقسم (partition) للقراءة فقط أثناء التشغيل.
بإمكان الـ IDE أن يُحرّر ROMFS. فهو يعرض محتويات القسم في متصفح الملفات الخاص به، ويدعم إضافة الملفات وإزالتها واستبدالها هناك بالطريقة نفسها التي يفعلها لبطاقة SD. والاستخدام المقصود هو إضافة نماذج مخصصة، أو ملفات تسميات، أو برامج نصية مساعِدة، أو أي مورد آخر يحتاج التطبيق إلى شحنه مع الكاميرا. وأي شيء يُسقَط في /rom/ عبر الـ IDE يحصل على التخزين نفسه المباشر من ذاكرة فلاش والقابل للوصول من وحدة NPU الذي تتمتع به النماذج المُحمّلة مسبقًا.