מחיצות ODM

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), חשוב לשמור על את הארכיטקטורה הבאה.

תחזוקת 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.