Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

ConfigStore HAL

يعمل Android 8.0 على تقسيم نظام التشغيل Android odm.img أقسام عامة ( system.img ) vendor.img خاصة vendor.img ( vendor.img و odm.img ). نتيجة لهذا التغيير ، يجب إزالة الترجمة الشرطية من الوحدات النمطية المثبتة في قسم النظام ويجب أن تحدد هذه الوحدات تكوين النظام في وقت التشغيل (وتتصرف بشكل مختلف بناءً على هذا التكوين).

يوفر ConfigStore HAL مجموعة من واجهات برمجة التطبيقات للوصول إلى عناصر التكوين للقراءة فقط المستخدمة لتكوين إطار عمل Android. تصف هذه الصفحة تصميم ConfigStore HAL (ولماذا لم يتم استخدام خصائص النظام لهذا الغرض) ؛ surfaceflinger الصفحات الأخرى في هذا القسم واجهة HAL وتنفيذ الخدمة والاستخدام من جانب العميل ، وكل ذلك باستخدام surfaceflinger كمثال. للحصول على تعليمات حول فئات واجهة ConfigStore ، راجع إضافة فئات وعناصر الواجهة .

لماذا لا تستخدم خصائص النظام؟

فكرنا في استخدام خصائص النظام ولكن وجدنا العديد من المشكلات الأساسية ، بما في ذلك:

  • حدود الطول على القيم. خصائص النظام لها حدود مشددة على طول قيمها (92 بايت). بالإضافة إلى ذلك ، نظرًا لأن هذه الحدود قد تعرضت مباشرةً لتطبيقات Android مثل وحدات الماكرو C ، فإن زيادة الطول يمكن أن يتسبب في حدوث مشكلات في التوافق مع الإصدارات السابقة.
  • لا يوجد نوع الدعم. جميع القيم هي في الأساس سلاسل ، وتقوم واجهات برمجة التطبيقات ببساطة بتحليل السلسلة إلى int أو bool . يجب تشفير / فك تشفير أنواع البيانات المركبة الأخرى (على سبيل المثال ، المصفوفة والبنية) من قبل العملاء (على سبيل المثال ، يمكن ترميز "aaa,bbb,ccc" من ثلاثة سلاسل).
  • يستبدل. نظرًا لأنه يتم تنفيذ خصائص النظام للقراءة فقط كخصائص للكتابة مرة واحدة ، يجب على البائعين / ODM الذين يريدون تجاوز قيم القراءة فقط المعرفة من AOSP استيراد قيم القراءة فقط الخاصة بهم قبل قيم القراءة فقط المعرفة من قبل AOSP. وهذا بدوره يؤدي إلى تجاوز القيم التي يحددها البائع والقابلة لإعادة الكتابة بواسطة القيم المحددة من قبل AOSP.
  • عنوان متطلبات مساحة. تشغل خصائص النظام قدرًا كبيرًا نسبيًا من مساحة العنوان في كل عملية. يتم تجميع خصائص النظام في وحدات prop_area بحجم ثابت يبلغ 128 كيلوبايت ، وكلها مخصصة لمساحة عنوان العملية حتى لو تم الوصول إلى خاصية نظام واحدة فقط فيها. يمكن أن يسبب هذا مشاكل على أجهزة 32 بت حيث تكون مساحة العنوان ثمينة.

لقد حاولنا التغلب على هذه القيود دون التضحية بالتوافق ، لكننا ظللنا نشعر بالقلق من أن خصائص النظام لم تكن مصممة لدعم الوصول إلى عناصر التكوين للقراءة فقط. في النهاية قررنا أن خصائص النظام هي الأنسب لمشاركة بعض العناصر المحدثة ديناميكيًا عبر جميع أجهزة Android في الوقت الفعلي ، وأن هناك حاجة لنظام جديد مخصص للوصول إلى عناصر التكوين للقراءة فقط.

تصميم ConfigStore HAL

التصميم الأساسي بسيط:

Configstore HAL التصميم

الشكل 1. تصميم ConfigStore HAL

  • وصف إشارات البناء (المستخدمة حاليًا للتجميع المشروط لإطار العمل) في HIDL.
  • يوفر البائعون والشركات المصنعة للمعدات الأصلية SoC وقيمًا خاصة بالجهاز لإنشاء إشارات عن طريق تنفيذ خدمة HAL.
  • قم بتعديل إطار العمل لاستخدام خدمة HAL للعثور على قيمة عنصر التكوين في وقت التشغيل.

يتم تضمين عناصر التكوين المشار إليها حاليًا بواسطة إطار العمل في حزمة HIDL ذات إصدار ( android.hardware.configstore@1.0 ). يوفر البائعون / مصنعي المعدات الأصلية قيمًا لعناصر التكوين من خلال تنفيذ واجهات في هذه الحزمة ، ويستخدم إطار العمل الواجهات عندما يحتاج إلى الحصول على قيمة لعنصر التكوين.

اعتبارات أمنية

تتأثر إشارات البناء المحددة في نفس الواجهة بنفس سياسة SELinux. إذا كان يجب أن يكون لعلامة بناء واحدة أو أكثر سياسات SELinux مختلفة ، فيجب فصلها عن واجهة أخرى . قد يتطلب ذلك مراجعة كبيرة android.hardware.configstore package لأن الواجهات المنفصلة لم تعد متوافقة مع الإصدارات السابقة.