מחיצות ODM

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

שמירה על 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.