يتضمن Android 10 دعمًا لإنشاء أقسام odm
باستخدام نظام إنشاء Android.
حول أقسام ODM
تقوم الشركات المصنعة للتصميم الأصلي (ODMs) بتخصيص حزم دعم لوحة بائعي النظام (SoC) (BSPs) لأجهزتهم المحددة (لوحاتهم). وهذا يمكّنهم من تنفيذ وحدات kernel للمكونات الخاصة باللوحة، أو البرامج الشيطانية الخاصة باللوحة، أو ميزاتها الخاصة على طبقات تجريد الأجهزة (HALs). وقد يرغبون أيضًا في استبدال مكونات SoC أو تخصيصها.
في إصدارات Android الأقل، منعت هذه التخصيصات استخدام صورة بائع واحد للأجهزة التي لها نفس SoC (أو مع SoCs مختلفة، ولكن في نفس العائلة). في نظام التشغيل Android 10 والإصدارات الأحدث، يمكنك استخدام قسم odm
منفصل للتخصيصات، مما يمكّنك من استخدام صورة بائع واحد لوحدات SKU متعددة للأجهزة.
استخدام أقسام المنتج وتصنيع التصميم الشخصي
أضاف Android 9 دعمًا لبناء أقسام product
، مما يتيح استخدام صورة نظام واحدة لوحدات SKU المتعددة للبرامج التي توفرها صور product.img
المختلفة. في حين أن قسم product
مخصص لوحدات SKU الخاصة بالبرامج، فإن قسم odm
مخصص لوحدات SKU للأجهزة.
باستخدام أقسام المنتج وODM المخصصة، يمكنك استخدام قسم system
لاستضافة تعليمات برمجية عامة للمشاركة بين العديد من وحدات SKU للبرامج، وقسم vendor
لاستضافة كود BSP الخاص بـ SoC للمشاركة بين أجهزة متعددة استنادًا إلى SoC المحدد.
إن استخدام أقسام منفصلة له عيوب، مثل صعوبة إدارة مساحة القرص (على سبيل المثال، يجب عليك حجز مساحة محدودة للنمو المستقبلي). ومع ذلك، فإن دعم Android 10 للأقسام الديناميكية يزيل مشكلة القرص، ويجعل إعادة تقسيم الجهاز أثناء التحديث عبر الهواء (OTA) ممكنًا.
مكونات أوديإم
يحتوي قسم odm
على المكونات التالية الخاصة بـ ODM (المشابهة لقسم vendor
)، المدرجة في الجدول التالي.
مكون خاص بـ ODM | موقع |
---|---|
وحدات النواة القابلة للتحميل (LKMs) | /odm/lib/modules/*.ko |
المكتبات الأصلية | /odm/lib[64] |
هال | /odm/lib[64]/hw |
سياسة SE | /odm/etc/selinux |
بيانات كائن VINTF | /odm/etc/vintf |
ملفات init.rc | /odm/etc/init |
خصائص النظام | /odm/build.prop |
تراكبات موارد وقت التشغيل (RROs) | /odm/overlay/*.apk |
تطبيقات | /odm/app/*.apk |
تطبيقات خاصة | /odm/priv-app/*.apk |
مكتبات جافا | /odm/framework/*.jar |
تكوينات نظام Android Framework | /odm/etc/sysconfig/* و /odm/etc/permissions/* |
لا توجد صور مخصصة
لا تستخدم الصور المخصصة لأنها تفتقر إلى الدعم لما يلي:
- تركيب وحدة لهدف محدد. تدعم الصور المخصصة نسخ العناصر إلى صورة، لكن لا يمكنها تثبيت وحدة نمطية في قسم محدد عن طريق تحديد القسم الهدف كجزء من قاعدة البناء.
- سونغ. لا يمكن إنشاء
custom_images
باستخدام نظام البناء Soong. - تحديث عبر الهواء. تُستخدم الصور المخصصة كصور ROM للمصنع ولا يمكن إصدارها عبر الهواء.
الحفاظ على ABIs بين الأقسام
قسم odm
هو امتداد لقسم vendor
. عند النظر في استقرار الواجهة الثنائية للتطبيق (ABI)، ضع البنية التالية في الاعتبار.
- لا يوجد استقرار ABI بين أقسام
odm
vendor
. يجب ترقية كلا القسمين في نفس الوقت. - يمكن أن يعتمد قسما
odm
وقسمvendor
على بعضهما البعض، ولكن يجب أن يعمل قسمvendor
بدون قسمodm
. - واجهة ABI بين
odm
system
هي نفس واجهة ABI بينvendor
system
.
لا يُسمح بالتفاعل المباشر بين قسم product
وقسم vendor
أو odm
. (يتم فرض ذلك بواسطة SEpolicy.)
تنفيذ أقسام ODM
قبل تنفيذ قسم جديد، قم بمراجعة تغييرات AOSP ذات الصلة .
إعداد أقسام ODM
لإعداد أقسام odm
، قم بتضمين علامات البناء التالية:
-
BOARD_ODMIMAGE_PARTITION_SIZE
لحجم قسم ثابت -
PRODUCT_USE_DYNAMIC_PARTITIONS
وBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
لحجم القسم الديناميكي - نوع نظام الملفات
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
المستخدم لصورة ODM -
PRODUCT_ODM_PROPERTIES
لـ/odm/build.prop
للاستخدام داخل$(call inherit-product path/to/device.mk)
، كما فيPRODUCT_ODM_PROPERTIES += product.abc=ok
تثبيت وحدة نمطية على قسم ODM
استخدم علامات البناء هذه لتثبيت وحدة نمطية على قسم odm
:
-
device_specific: true
فيAndroid.bp
-
LOCAL_ODM_MODULE := true
فيAndroid.mk
تمكين التمهيد الذي تم التحقق منه
لمنع البرامج الضارة من العبث بأقسام odm
، قم بتمكين Android Verified Boot (AVB) لتلك الأقسام (تمامًا كما تفعل مع أقسام vendor
system
).
لتمكين AVB، قم بتضمين علامة البناء BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. للحصول على تفاصيل حول تكوين AVB على الأقسام الديناميكية، راجع تغييرات تكوين AVB .
التعامل مع /odm كقسم / بائع آخر
للتأكد من أن النظام يتعامل مع قسم odm
كقسم vendor
، استبدل أي مراجع vendor
مضمنة بمجموعة من الأقسام الموجهة للأجهزة (حاليًا odm
vendor
). تتضمن المواقع المرجعية البارزة vendor
في النظام الأساسي الرابط الديناميكي ومدير الحزم و shell/libc
.