أقسام ODM

يتضمن 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 بين الأقسام
الشكل 1. الحفاظ على 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 .