ב-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.bpLOCAL_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.