מחיצות ODM

אנדרואיד 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 בין מחיצות
איור 1. שמירה על 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 .