אנדרואיד 10 כולל תמיכה בבניית מחיצות odm
באמצעות מערכת ה-build של אנדרואיד.
לגבי מחיצות ODM
יצרני עיצוב מקוריים (ODMs) מתאימים אישית את חבילות התמיכה של ספקי לוחות על שבב (SoC) (BSPs) למכשירים הספציפיים שלהם (הלוחות שלהם). זה מאפשר להם ליישם מודולי ליבה עבור רכיבים ספציפיים ללוח, דמונים ספציפיים ללוח, או תכונות משלהם בשכבות הפשטה של חומרה (HALs). ייתכן שהם גם ירצו להחליף או להתאים אישית רכיבי SoC.
במהדורות אנדרואיד נמוכות יותר, התאמות אישיות כאלה מנעו שימוש בתמונת ספק בודדת עבור מכשירים עם אותו SoC (או עם SoCs שונים, אבל באותה משפחה). באנדרואיד 10 ומעלה, אתה יכול להשתמש במחיצת odm
נפרדת עבור התאמות אישיות, המאפשרת לך להשתמש בתמונת ספק יחידה עבור מספר SKUs של חומרה.
שימוש במחיצות מוצר ו-ODM
אנדרואיד 9 הוסיפה תמיכה בבניית מחיצות product
, המאפשרת שימוש בתמונת מערכת אחת עבור מספר מק"ט של תוכנות המסופקות על ידי תמונות product.img
שונות. בעוד שמחיצת product
מיועדת ל-SKUs של תוכנה, מחיצת odm
מיועדת ל-SKUs של חומרה.
עם מחיצות מוצר ו-ODM ייעודיות, אתה יכול להשתמש במחיצת system
כדי לארח קוד גנרי לשיתוף בין SKUs רבים של תוכנות, ובמחיצת vendor
לארח קוד BSP ספציפי ל-SoC לשיתוף בין מכשירים מרובים בהתבסס על ה-SoC הנתון.
לשימוש במחיצות נפרדות יש חסרונות, כמו הקושי בניהול שטח דיסק (לדוגמה, עליך לשמור כמות מוגבלת של מקום לצמיחה עתידית). עם זאת, תמיכה באנדרואיד 10 במחיצות דינמיות מסירה את בעיית הדיסק, ומאפשרת חלוקה מחדש של מכשיר במהלך עדכון אויר (OTA) .
רכיבי ODM
מחיצת odm
מכילה את הרכיבים הבאים הספציפיים ל-ODM (בדומה למחיצת vendor
), המפורטים בטבלה הבאה.
רכיב ספציפי ל-ODM | מקום |
---|---|
מודולי ליבה ניתנים לטעינה (LKMs) | /odm/lib/modules/*.ko |
ספריות מקומיות | /odm/lib[64] |
HALs | /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 |
Priv-אפליקציות | /odm/priv-app/*.apk |
ספריות Java | /odm/framework/*.jar |
תצורות מערכת Android Framework | /odm/etc/sysconfig/* ו- /odm/etc/permissions/* |
אין תמונות מותאמות אישית
אל תשתמש בתמונות מותאמות אישית כי אין להן תמיכה עבור הדברים הבאים:
- התקנה של מודול למטרה ספציפית. תמונות מותאמות אישית תומכות בהעתקת חפצים לתמונה, אך לא ניתן להתקין מודול במחיצה ספציפית על ידי ציון מחיצת היעד כחלק מכלל בנייה.
- בקרוב. לא ניתן לבנות
custom_images
באמצעות מערכת הבנייה Soong. - עדכון OTA. תמונות מותאמות אישית משמשות כתמונות ROM של היצרן שלא ניתנות לעיבוד OTA.
שמירה על ABI בין מחיצות
מחיצת odm
היא הרחבה של מחיצת vendor
. כאשר בוחנים יציבות של ממשק בינארי של יישומים (ABI), זכור את הארכיטקטורה הבאה.
- אין יציבות ABI בין מחיצות
odm
למחיצותvendor
. יש לשדרג את שתי המחיצות בו זמנית. - המחיצות
odm
vendor
יכולות להיות תלויות זו בזו, אך מחיצתvendor
חייבת לעבוד ללא מחיצתodm
. - ה-ABI בין
odm
system
זהה ל-ABI ביןvendor
system
.
אינטראקציה ישירה בין מחיצת product
לבין vendor
או מחיצת odm
אינה מותרת . (זה נאכף על ידי SEpolicy.)
הטמעת מחיצות ODM
לפני הטמעת מחיצה חדשה, סקור את השינויים הקשורים ל-AOSP .
הגדרת מחיצות ODM
כדי להגדיר מחיצות odm
, כלול את דגלי הבנייה הבאים:
-
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
השתמש בדגלי הבנייה האלה כדי להתקין מודול למחיצת 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 כמחיצת /ספק נוספת
כדי להבטיח שהמערכת מטפלת במחיצת odm
כמחיצת vendor
, החלף את כל הפניות vendor
בקוד קשיח בקבוצה של מחיצות מוכוונות חומרה (כרגע odm
vendor
). מיקומי הפניה בולטים vendor
בפלטפורמה כוללים קישור דינמי , מנהל חבילות ו- shell/libc
.