في نظام التشغيل Android 10، تستخدم طبقة تجريد الأجهزة (HAL) الخاصة بـ ConfigStore علامات الإنشاء لتخزين قيم الإعداد في القسم vendor
، ويصل أحد الخدمات في القسم system
إلى هذه القيم باستخدام HIDL (ينطبق ذلك أيضًا على نظام التشغيل Android 9). ومع ذلك، تم إيقاف ConfigStore HAL نهائيًا بسبب ارتفاع استهلاك الذاكرة وصعوبة الاستخدام.
يبقى ConfigStore HAL في AOSP لدعم أقسام المورّدين القديمة. على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث، يقرأ النظام خصائص النظام أولاً. وإذا لم يتم تحديد أي خاصية نظام لعنصر إعداد في `SurfaceFlingerProperties.sysprop`، يعود `surfaceflinger` إلى ConfigStore HAL.surfaceflinger
يقسّم نظام التشغيل Android 8.0 نظام التشغيل Android المتكامل إلى أقسام عامة (system.img
) وأخرى خاصة بالأجهزة (vendor.img
وodm.img
). نتيجةً لهذا التغيير، يجب إزالة التجميع الشرطي من الوحدات المثبَّتة في قسم النظام، ويجب أن تحدّد هذه الوحدات إعدادات النظام في وقت التشغيل (وتتصرّف بشكل مختلف وفقًا لهذه الإعدادات).
توفر طبقة تجريد الأجهزة (HAL) الخاصة بـ ConfigStore مجموعة من واجهات برمجة التطبيقات للوصول إلى عناصر الإعداد للقراءة فقط والمستخدَمة لضبط إعدادات إطار عمل Android. توضّح هذه الصفحة تصميم ConfigStore HAL (وسبب عدم استخدام خصائص النظام لهذا الغرض)، وتتضمّن الصفحات الأخرى في هذا القسم تفاصيل حول واجهة HAL وتنفيذ الخدمة والاستخدام من جهة العميل، وكل ذلك باستخدام surfaceflinger
كمثال. للحصول على مساعدة بشأن فئات واجهة ConfigStore، يُرجى الاطّلاع على إضافة فئات وعناصر الواجهة.
لماذا لا يتم استخدام خصائص النظام؟
لقد فكّرنا في استخدام خصائص النظام، ولكن واجهنا عدة مشاكل أساسية، بما في ذلك:
- حدود الطول للقيم: تفرض خصائص النظام حدودًا صارمة على طول قيمها (92 بايت). بالإضافة إلى ذلك، بما أنّ هذه الحدود متاحة مباشرةً لتطبيقات Android على شكل وحدات ماكرو C، فإنّ زيادة الطول قد تتسبّب في حدوث مشاكل في التوافق مع الإصدارات القديمة.
- لا يتوافق مع أي نوع. جميع القيم هي في الأساس سلاسل نصية، وتعمل واجهات برمجة التطبيقات ببساطة على تحليل السلسلة النصية إلى
int
أوbool
. يجب أن يتم ترميز/فك ترميز أنواع البيانات المركّبة الأخرى (مثل المصفوفة والبنية) من خلال البرامج المستخدِمة (على سبيل المثال، يمكن ترميز"aaa,bbb,ccc"
كمصفوفة من ثلاث سلاسل). - الكتابة فوق البيانات بما أنّ خصائص النظام للقراءة فقط يتم تنفيذها كخصائص يمكن كتابتها مرة واحدة، على المورّدين/مصنّعي التصميم الأصلي الذين يريدون إلغاء قيم القراءة فقط المحدّدة في AOSP استيراد قيم القراءة فقط الخاصة بهم قبل قيم القراءة فقط المحدّدة في AOSP. ويؤدي ذلك بدوره إلى أن تتجاوز القيم المحدّدة من المورّد والقابلة لإعادة الكتابة القيم المحدّدة في AOSP.
- متطلبات مساحة العناوين تستهلك خصائص النظام مقدارًا كبيرًا نسبيًا من مساحة العناوين في كل عملية. يتم تجميع خصائص النظام في وحدات بحجم ثابت يبلغ 128 كيلوبايت، ويتم تخصيصها بالكامل لمساحة عناوين إحدى العمليات حتى إذا تم الوصول إلى إحدى خصائص النظام فقط.
prop_area
ويمكن أن يؤدي ذلك إلى حدوث مشاكل على الأجهزة التي تعمل بنظام 32 بت حيث تكون مساحة العناوين محدودة.
حاولنا التغلّب على هذه القيود بدون التأثير في التوافق، ولكن ظللنا قلقين بشأن عدم تصميم خصائص النظام بشكل يتيح الوصول إلى عناصر الإعداد للقراءة فقط. في النهاية، قرّرنا أنّ خصائص النظام هي الأنسب لمشاركة بعض العناصر التي يتم تعديلها ديناميكيًا على جميع أجهزة Android في الوقت الفعلي، وأنّ هناك حاجة إلى نظام جديد مخصّص للوصول إلى عناصر الإعدادات للقراءة فقط.
تصميم ConfigStore HAL
التصميم الأساسي بسيط:
الشكل 1. تصميم ConfigStore HAL
- وصف علامات الإنشاء (المستخدَمة حاليًا لتجميع إطار العمل بشكل شرطي) في HIDL
- يقدّم المورّدون والمصنّعون الأصليون للأجهزة قيمًا خاصة بالمنظومة على الرقاقة (SoC) والأجهزة لعلامات الإنشاء من خلال تنفيذ خدمة HAL.
- عدِّل إطار العمل لاستخدام خدمة HAL للعثور على قيمة عنصر إعداد في وقت التشغيل.
يتم تضمين عناصر الإعداد التي يشير إليها إطار العمل حاليًا في حزمة HIDL ذات إصدار (android.hardware.configstore@1.0
). يقدّم المورّدون/مصنّعو المعدات الأصلية قيمًا لعناصر الإعداد من خلال تنفيذ واجهات في هذه الحزمة، ويستخدم إطار العمل الواجهات عندما يحتاج إلى الحصول على قيمة لعنصر إعداد.
اعتبارات الأمان
تتأثر علامات الإنشاء المحدّدة في الواجهة نفسها بسياسة SELinux نفسها. إذا كان من المفترض أن تتضمّن علامة إنشاء واحدة أو أكثر سياسات SELinux مختلفة،
يجب فصلها إلى واجهة أخرى. وقد يتطلّب ذلك مراجعة كبيرة android.hardware.configstore package
لأنّ الواجهات المنفصلة لم تعُد متوافقة مع الإصدارات القديمة.