ב-Android 10 יש תמיכה ביצירת מחיצות odm
באמצעות מערכת ה-build של Android.
מידע על מחיצות ODM
יצרני ציוד מקורי (ODM) מתאימים אישית את חבילות התמיכה של לוחות של ספקי מערכת על שבב (SoC) למכשירים הספציפיים שלהם (הלוחות שלהם). כך הם יכולים להטמיע מודולים של ליבה לרכיבים ספציפיים ללוח, דימונים ספציפיים ללוח או תכונות משלהם בשכבות הפשטה של החומרה (HAL). יכול להיות שהם גם ירצו להחליף או להתאים אישית רכיבי SoC.
בגרסאות ישנות יותר של Android, התאמות אישיות כאלה מנעו שימוש בתמונת ספק אחת למכשירים עם אותו SoC (או עם SoC שונים, אבל מאותה משפחה). ב-Android 10 ואילך, אפשר להשתמש במחיצה נפרדת של odm
להתאמות אישיות, וכך להשתמש בתמונת ספק אחת לכמה מק"טים של חומרה.
שימוש במחיצות של מוצרים ו-ODM
ב-Android 9 נוספה תמיכה ביצירת מחיצות product
, שמאפשרת להשתמש בקובץ אימג' מערכת יחיד למספר מק"טים של תוכנה שסופקו על ידי קובצי אימג' product.img
שונים. המחיצה product
מיועדת למק"טים של תוכנות, והמחיצה odm
מיועדת למק"טים של חומרה.
באמצעות מחיצות ייעודיות למוצרים ול-ODM, אפשר להשתמש במחיצה system
כדי לארח קוד כללי לשיתוף בין מק"טים רבים של תוכנה, ובמחיצה vendor
כדי לארח קוד BSP ספציפי ל-SoC לשיתוף בין כמה מכשירים שמבוססים על אותו SoC.
לשימוש במחיצות נפרדות יש חסרונות, כמו הקושי בניהול נפח הדיסק (לדוגמה, צריך להקצות כמות מוגבלת של מקום לצמיחה עתידית). עם זאת, התמיכה ב-Android 10 במחיצות דינמיות מסירה את הבעיה בדיסק ומאפשרת חלוקה מחדש של המכשיר במהלך עדכון אווירי (OTA).
רכיבי ODM
המחיצה odm
מכילה את הרכיבים הבאים שספציפיים ל-ODM (בדומה למחיצה vendor
), שמפורטים בטבלה הבאה.
רכיב ספציפי ל-ODM | מיקום |
---|---|
מודולים של ליבה שניתן לטעינה (LKM) | /odm/lib/modules/*.ko |
ספריות מקוריות | /odm/lib[64] |
HAL | /odm/lib[64]/hw |
SEPolicy | /odm/etc/selinux |
נתוני אובייקט VINTF | /odm/etc/vintf |
init.rc קבצים |
/odm/etc/init |
מאפייני מערכת | /odm/build.prop |
שכבות-על של משאבים בזמן ריצה (RRO) | /odm/overlay/*.apk |
אפליקציות | /odm/app/*.apk |
Priv-apps | /odm/priv-app/*.apk |
ספריות Java | /odm/framework/*.jar |
הגדרות מערכת של Android Framework | /odm/etc/sysconfig/* וגם /odm/etc/permissions/* |
אין תמונות בהתאמה אישית
אל תשתמשו בתמונות בהתאמה אישית כי אין להן תמיכה באפשרויות הבאות:
- התקנה של מודול ביעד ספציפי תמונות בהתאמה אישית תומכות בהעתקת ארטיפקטים לתמונה, אבל אי אפשר להתקין מודול במחיצה ספציפית על ידי ציון מחיצה היעד כחלק מכלל build.
- Soong לא ניתן ליצור את
custom_images
באמצעות מערכת ה-build של Soong. - עדכון OTA תמונות בהתאמה אישית משמשות כתמונות ROM מברירת המחדל שלא ניתן לעדכן אותן באמצעות OTA.
שמירה על ממשקי ABI בין מחיצות
המחיצה odm
היא תוספת למחיצה vendor
. כשבודקים את היציבות של ממשק בינארי של אפליקציה (ABI), חשוב לזכור את הארכיטקטורה הבאה.

איור 1. שמירה על ABI בין מחיצות.
- אין יציבות ABI בין המחיצות
odm
ו-vendor
. צריך לשדרג את שתי המחיצות בו-זמנית. - המחיצות
odm
ו-vendor
יכולות להיות תלויות זו בזו, אבל המחיצהvendor
חייבת לפעול בלי מחיצתodm
. - ה-ABI בין
odm
ל-system
זהה ל-ABI ביןvendor
ל-system
.
אסור לבצע אינטראקציה ישירה בין המחיצה product
לבין המחיצה vendor
או odm
. (הכלל הזה נאכף על ידי SEpolicy).
הטמעת מחיצות ODM
לפני שמטמיעים מחיצה חדשה, כדאי לעיין בשינויים הרלוונטיים ב-AOSP.
הגדרת מחיצות ODM
כדי להגדיר מחיצות odm
, צריך לכלול את דגלי ה-build הבאים:
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
משתמשים בדגלי ה-build האלה כדי להתקין מודול במחיצה odm
:
device_specific: true
בעודAndroid.bp
LOCAL_ODM_MODULE := true
בעודAndroid.mk
הפעלת אתחול מאומת
כדי למנוע מתוכנות זדוניות לשבש את המחיצות של odm
, צריך להפעיל את Android Verified Boot (AVB) במחיצות האלה (בדיוק כמו במחיצות vendor
ו-system
).
כדי להפעיל את AVB, צריך לכלול את דגל ה-build BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. פרטים על הגדרת AVB במחיצות דינמיות זמינים במאמר שינויים בהגדרות AVB.
התייחסות ל- /odm כמחיצה אחרת של /vendor
כדי לוודא שהמערכת מטפלת במחיצה odm
כמחיצה vendor
, צריך להחליף את כל ההפניות הקבועות ל-vendor
בקבוצה של מחיצות שמתמקדות בחומרה (כרגע odm
ו-vendor
). מיקומי הפניה vendor
בולטים בפלטפורמה כוללים את dynamic linker, package manager ו-shell/libc
.