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