Android 10 כולל תמיכה בפיתוח
odm
מחיצות באמצעות מערכת ה-build של Android.
מידע על מחיצות ODM
יצרני עיצוב מקורי (ODMs) מתאימים אישית את ספק המערכת על שבב (SoC) חבילות תמיכה בלוחות (BSP) למכשירים הספציפיים שלהן (הלוחות שלהם). הזה שמאפשר להטמיע מודולים של ליבה (kernel) לרכיבים ספציפיים ללוח, דימונים ספציפיים ללוחות, או תכונות משלהם בשכבות הפשטה של חומרה (HAL). יכול להיות שהשותפים ירצו גם להחליף או להתאים אישית רכיבי SoC.
בגרסאות קודמות של Android, התאמות אישיות כאלה מנעו את השימוש
תמונה של הספק לגבי מכשירים עם אותו SoC (או עם SoCs שונים, אבל
משפחה זהה). ב-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 | מיקום |
---|---|
מודולים של ליבה (kernel) נטענים (LKM) | /odm/lib/modules/*.ko |
ספריות מקוריות | /odm/lib[64] |
הנחיות עם מערכת HAL | /odm/lib[64]/hw |
מדיניות בנושא SE, | /odm/etc/selinux |
אובייקט VINTF נתונים | /odm/etc/vintf |
init.rc
קבצים |
/odm/etc/init |
מאפייני המערכת | /odm/build.prop |
שכבות-על של משאבים בזמן ריצה (RRO) | /odm/overlay/*.apk |
אפליקציות | /odm/app/*.apk |
אפליקציות הרשאות | /odm/priv-app/*.apk |
ספריות Java | /odm/framework/*.jar |
הגדרות המערכת של Android Framework | /odm/etc/sysconfig/* וגם /odm/etc/permissions/* |
אין תמונות מותאמות אישית
אני לא רוצה להשתמש בהתאמה אישית תמונות כי הן לא תומכות בגורמים הבאים:
- התקנת מודול ליעד ספציפי. בתמונות בהתאמה אישית אפשר להעתיק פריטי מידע שנוצרו בתהליך פיתוח (Artifact), אבל הן לא להתקין מודול במחיצה ספציפית באמצעות ציון של מחיצת היעד כחלק מכלל build.
- שיר. לא ניתן ליצור את
custom_images
באמצעות במערכת ה-build של סונג. - עדכון 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
(AVB) של המחיצות האלה (בדיוק כמו בשביל vendor
וגם
system
מחיצות).
כדי להפעיל AVB, יש לכלול את הדגל build
BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. פרטים על הגדרה
AVB במחיצות דינמיות:
הגדרת AVB
.
יש להתייחס אל /odm כמחיצה נוספת של ספק
כדי לוודא שהמערכת מטפלת במחיצה odm
מחיצה vendor
, החלפה של כל vendor
בתוך הקוד
הפניות עם סדרת מחיצות מוכוונות חומרה (כרגע
odm
וגם vendor
). vendor
חשוב
מיקומי הפניות בפלטפורמה כוללים
דינמית
linker,
חבילה
ו-shell/libc
.