מחזור חיים של FCM

מהדורת מסגרת אנדרואיד כוללת מספר מטריצות תאימות למסגרת (FCM), אחת לכל גרסת Target FCM הניתנת לשדרוג, המגדירות במה המסגרת עשויה להשתמש ודרישות גרסת Target FCM. כחלק ממחזור החיים של FCM, Android מוציא משימוש ומסיר HIDL HALs, ולאחר מכן משנה קבצי FCM כדי לשקף את הסטטוס של גרסת HAL .

כדי לאפשר OTAs למסגרת בלבד במערכות האקולוגיות שלהם, שותפים שמרחיבים ממשקי ספק צריכים גם להוציא משימוש ולהסיר HIDL HALs באותן שיטות.

טרמינולוגיה

מטריצת תאימות מסגרת (FCM)
קובץ XML המפרט את דרישות המסגרת לגבי יישומי ספק תואמים. מטריצת התאימות מנוסחת, וגרסה חדשה מוקפאת עבור כל מהדורת מסגרת. כל מהדורת מסגרת מכילה מספר FCMs.
גרסאות FCM של פלטפורמה (S F )
הסט של כל גרסאות FCM במהדורת מסגרת. המסגרת יכולה לעבוד עם כל הטמעה של ספקים שעונה על אחד מה-FCMs הללו.
גרסת FCM (F)
הגרסה הגבוהה ביותר מבין כל ה-FCM במהדורת מסגרת.
גרסת יעד FCM (V)
גרסת ה-FCM הממוקדת (מ- S F ), שהוצהרה במפורש במניפסט המכשיר, שהטמעה מספקת עומדת ברצון. יש ליצור יישום של ספק כנגד FCM שפורסם, למרות שהוא עשוי להכריז על גרסאות HAL חדשות יותר במניפסט ההתקן שלו.
גרסת HAL
לגרסת HAL יש את הפורמט foo@xy , כאשר foo הוא השם HAL ו- xy היא הגרסה הספציפית; למשל nfc@1.0 , keymaster@3.0 (קידומת השורש, למשל android.hardware , מושמטת בכל מסמך זה.)
מניפסט מכשיר
קובצי XML המציינים אילו גרסאות HAL מספק צד המכשיר של ממשק הספק, כולל תמונות הספק ו-ODM. התוכן של מניפסט מכשיר מוגבל על ידי גרסת ה-Target FCM של המכשיר, אך יכול לרשום HALs שהם חדשים יותר בהחלט ביחס ל-FC המקביל ל-V.
HALs של מכשיר
HALs הרשומים (מסופקים) במניפסט המכשיר ומופיעים (חובה או אופציונלית) במטריצת תאימות המסגרת (FCM).
מטריצת תאימות מכשירים (DCM)
קובץ XML המפרט את דרישות הספק לגבי יישומי מסגרת תואמים. כל מכשיר מכיל DCM אחד.
מניפסט מסגרת
קובץ XML המציין אילו גרסאות HAL מספק צד המסגרת של ממשק הספק, כולל מערכת, system_ext ותמונות מוצר. HALs במניפסט המסגרת מושבתים באופן דינמי בהתאם לגרסת Target FCM של המכשיר.
HALs של מסגרת
HALs המפורטים כפי שסופקו במניפסט המסגרת ורשומים כנדרש או אופציונלי במטריצת תאימות המכשיר (DCM).

מחזור החיים של FCM בבסיס הקוד

מסמך זה מתאר את מחזור החיים של FCM בתקציר. כדי לראות את המניפסטים הנתמכים כעת, עיין ב- hardware/interfaces/compatibility_matrix.<FCM>.xml שבו ניתן למצוא FCM ב- system/libvintf/include/vintf/Level.h .

נכון ל-Android 14, הרמות הנתמכות הן:

FCM גרסת אנדרואיד
4 אנדרואיד 10/Q
5 אנדרואיד 11/R
6 אנדרואיד 12/S
7 אנדרואיד 13/T
8 אנדרואיד 14/U

מפתחים בגרסת FCM חדשה

אנדרואיד מגדיל את גרסת ה-FCM עבור כל מהדורת מסגרת (כגון אנדרואיד 8, 8.1 וכו'). במהלך הפיתוח, ה- compatibility_matrix.F.xml החדש נוצר וה- compatibility_matrix.f.xml הקיים (כאשר f < F ) אינו משתנה עוד.

כדי להתחיל לפתח בגרסה FCM חדשה F :

  1. העתק את compatibility_matrix.<F-1>.xml ל- compatibility_matrix.F.xml .
  2. עדכן את תכונת level בקובץ ל- F
  3. הוסף כללי בנייה מתאימים כדי להתקין מטריצת תאימות זו למכשיר.

מציגים HAL חדש

במהלך הפיתוח, כאשר מציגים HAL חדש (Wi-Fi, NFC וכו') לאנדרואיד בגרסת FCM הנוכחית F , הוסף את ה-HAL ל- compatibility_matrix.F.xml עם ההגדרות optional הבאות:

  • optional="false" אם מכשירים הנשלחים עם V = F חייבים להפעיל עם HAL זה,
  • optional="true" אם מכשירים הנשלחים עם V = F יכולים להשיק ללא HAL זה.

לדוגמה, אנדרואיד 8.1 הציגה את cas@1.0 כ-HAL אופציונלי. מכשירים המופעלים עם אנדרואיד 8.1 אינם נדרשים ליישם HAL זה, ולכן הערך הבא נוסף ל- compatibility_matrix.F.xml (שבעבר נקרא compatibility_matrix.current.xml באופן זמני במהלך פיתוח המהדורה הזו):

<hal format="hidl" optional="true">
    <name>android.hardware.cas</name>
    <version>1.0</version>
    <interface>
        <name>IMediaCasService</name>
        <instance>default</instance>
    </interface>
</hal>

שדרוג HAL (מינורי)

במהלך הפיתוח, כאשר ל-HAL יש שדרוג גרסה מינורית מ- xz ל- x.(z+1) ב-FCM גרסה F הנוכחית, אם גרסה זו היא:

  • נדרש במכשירים המופעלים עם V = F , ה- compatibility_matrix.F.xml חייב לציין x.(z+1) ו- optional="false" .
  • לא נדרש במכשירים המופעלים עם V = F , ה- compatibility_matrix.F.xml חייב להעתיק xy-z ואת האופציונליות מ- compatibility_matrix.<F-1>.xml ולשנות את הגרסה ל- xw-(z+1) (כאשר w >= y ).

לדוגמה, אנדרואיד 8.1 הציגה את broadcastradio@1.1 כשדרוג גרסה מינורי של 1.0 HAL. הגרסה הישנה יותר, broadcastradio@1.0 , היא אופציונלית עבור מכשירים המופעלים עם אנדרואיד 8.0 ואילו הגרסה החדשה יותר, broadcastradio@1.1 , היא אופציונלית עבור מכשירים המופעלים עם אנדרואיד 8.1. ב- compatibility_matrix.1.xml :

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

ערך זה הועתק אל compatibility_matrix.F.xml ושונתה באופן הבא:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0-1</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

שדרוג HAL (גדול)

במהלך הפיתוח, כאשר ל-HAL יש שדרוג של גרסה עיקרית ב-FCM גרסה F הנוכחית, הגרסה הראשית החדשה x.0 מתווספת ל- compatibility_matrix.F.xml עם ההגדרות optional הבאות:

  • optional="false" רק עם גרסה x.0 , אם מכשירים הנשלחים עם V = F חייבים להפעיל עם x.0 .
  • optional="false" אך יחד עם גרסאות עיקריות ישנות יותר באותו תג <hal> , אם מכשירים הנשלחים עם V = F חייבים להפעיל עם HAL זה, אך יכולים להשיק עם גרסה עיקרית ישנה יותר.
  • optional="true" אם מכשירים הנשלחים עם V = F אינם חייבים להפעיל את ה-HAL.

לדוגמה, אנדרואיד 9 מציגה את health@2.0 כשדרוג הגרסה העיקרית של ה-1.0 HAL ומוציאה משימוש את ה-1.0 HAL. הגרסה הישנה יותר, health@1.0 , היא אופציונלית עבור מכשירים המופעלים עם אנדרואיד 8.0 ו-Android 8.1. למכשירים המופעלים עם אנדרואיד 9 אסור לספק את 1.0 HAL שהוצא משימוש, ובמקום זאת חייבים לספק את גרסת 2.0 החדשה. I compatibility_matrix.legacy.xml , compatibility_matrix.1.xml ו- compatibility_matrix.2.xml :

<hal format="hidl" optional="true">
    <name>android.hardware.health</name>
    <version>1.0</version>;
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

ערך זה הועתק אל compatibility_matrix.F.xml ושונה כדלקמן:

<hal format="hidl" optional="false">
    <name>android.hardware.health</name>
    <version>2.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

הגבלות:

  • מכיוון שה-2.0 HAL נמצא ב- compatibility_matrix.3.xml עם optional="false" , מכשירים המופעלים עם אנדרואיד 9 חייבים להישלח עם 2.0 HAL.`
  • מכיוון שה-1.0 HAL אינו ב- compatibility_matrix.3.xml , התקנים המופעלים עם אנדרואיד 9 אינם חייבים לספק את ה-1.0 HAL (כיוון שה-HAL הזה נחשב הוצא משימוש).
  • מכיוון שה-HAL 1.0 קיים ב-legacy/1/2.xml (גרסאות FCM ישנות יותר שאיתן אנדרואיד 9 יכול לעבוד) כ-HAL אופציונלי, המסגרת של אנדרואיד 9 עדיין יכולה לעבוד עם ה-1.0 HAL (שאינה נחשבת לגרסת HAL שהוסרה ).

גרסאות FCM חדשות

תהליך שחרור גרסת FCM על מחיצת המערכת נעשה אך ורק על ידי Google כחלק מגרסה של AOSP וכולל את השלבים הבאים:

  1. ודא של- compatibility_matrix.F.xml יש את התכונה level="F" .
  2. ודא שכל המכשירים בונים ומאתחלים.
  3. עדכן בדיקות VTS כדי להבטיח שלמכשירים המופעלים עם המסגרת העדכנית ביותר (בהתבסס על רמת משלוח API) יש Target FCM Version V >= F .
  4. פרסם קובץ ל-AOSP.

לדוגמה, בדיקות VTS מבטיחות שלמכשירים המופעלים עם אנדרואיד 9 יש Target FCM Version >= 3.

בנוסף, ה-FCM של המוצר וה-system_ext עשויים גם לרשום דרישות עבור כל גרסאות FCM של פלטפורמה. שחרור גרסאות FCM במחיצות המוצר ו-system_ext נעשה על ידי הבעלים של תמונות אלו, בהתאמה. מספרי הגרסה של FCM במחיצות המוצר ו-system_ext חייבים להתאים לאלה שבמחיצת המערכת. בדומה לגרסאות FCM במחיצת המערכת, מטריצת התאימות בגרסה FCM במחיצות המוצר ו-system_ext משקפת דרישות במכשיר עם גרסת FCM היעד F.

הוצאה משימוש בגרסת HAL

ביטול גרסת HAL הוא החלטה של ​​מפתחים (כלומר עבור AOSP HALs, גוגל מקבלת את ההחלטה). זה יכול לקרות כאשר יוצאת גרסת HAL גבוהה יותר (בין אם מינור או גדול).

הוצא משימוש מכשיר HAL

כאשר מכשיר נתון HAL foo@xy הוצא משימוש ב-FCM גרסה F , פירוש הדבר שכל מכשיר המופעל עם Target FCM Version V = F ואילך לא חייב ליישם foo בגרסה xy או כל גרסה ישנה מ- xy . גרסת HAL שהוצאה משימוש עדיין נתמכת על ידי המסגרת לשדרוג מכשירים.

כאשר FCM גרסה F משוחררת, גרסת HAL foo@xy נחשבת שהוצאה משימוש אם גרסת ה-HAL הספציפית אינה מצוינת במפורש ב-FCM העדכנית ביותר עבור Target FCM Version V = F . עבור מכשירים המופעלים עם V = F , אחד מהתנאים הבאים מתקיים:

  • המסגרת דורשת גרסה גבוהה יותר (מז'ור או מינור);
  • המסגרת לא דורשת יותר את ה-HAL.

לדוגמה, באנדרואיד 9, health@2.0 מוצג כשדרוג גרסה מרכזי של 1.0 HAL. health@1.0 הוסר מ- compatibility_matrix.3.xml אך קיים ב- compatibility_matrix.legacy.xml , compatibility_matrix.1.xml ו- comatibility_matrix.2.xml . לפיכך, health@1.0 נחשב הוצא משימוש.

הוצא משימוש מסגרת HAL

כאשר מסגרת נתונה HAL foo@xy הוצאה משימוש ב-FCM גרסה F , פירוש הדבר שכל מכשיר המופעל עם Target FCM Version V = F ואילך, אסור לצפות שהמסגרת תספק foo בגרסה xy , או בכל גרסה ישנה מ- xy . גרסת HAL שהוצאה משימוש עדיין מסופקת על ידי המסגרת לשדרוג מכשירים.

כאשר גרסה F של FCM משוחררת, גרסת HAL foo@xy נחשבת שהוצאה משימוש אם מניפסט המסגרת מציין max-level=" F - 1 " עבור foo@xy . עבור מכשירים המופעלים עם V = F , המסגרת לא מספקת את ה-HAL foo@xy . מטריצת תאימות המכשיר במכשירים המופעלים עם V = F אינה יכולה לרשום HALs של מסגרת עם max-level < V .

לדוגמה, ב-Android 12, schedulerservice@1.0 הוצא משימוש. תכונת max-level שלו מוגדרת ל 5 , גרסת FCM שהוצגה באנדרואיד 11. ראה מניפסט מסגרת של Android 12 .

הסרת תמיכה בגרסאות יעד FCM

כאשר מכשירים פעילים של Target FCM Version V מסויימת יורדים מתחת לסף מסוים, Target FCM Version מוסרת מהסט S F של מהדורת המסגרת הבאה. זה נעשה על ידי שני השלבים הבאים:

  1. הסרת compatibility_matrix.V.xml מכללי הבנייה (כדי שלא יותקן בתמונת המערכת), ומחיקת כל קוד שיישם או תלוי בפונקציונליות שהוסרה.

  2. הסרת HALs של מסגרת עם max-level נמוכה מ-V או שווה ל- V ממניפסט המסגרת, ומחיקת כל קוד שמיישם את HALs המסגרת שהוסרו.

מכשירים עם גירסת יעד FCM מחוץ ל- SF עבור מהדורת מסגרת נתונה לא יכולים לשדרג לגרסה זו.

מצב גרסת HAL

הסעיפים הבאים מתארים (בסדר כרונולוגי) את המצבים האפשריים של גרסת HAL.

לא שוחרר

עבור מכשירי HAL, אם גרסת HAL אינה נמצאת באף אחת ממטריצות התאימות הציבוריות והקפואות, היא נחשבת ללא הפצתה ואולי בפיתוח. זה כולל גרסאות HAL שנמצאות רק ב- compatibility_matrix.F.xml . דוגמאות:

  • במהלך הפיתוח של אנדרואיד 9 ה- health@2.0 HAL נחשב ל-HAL שלא פורסם והיה קיים רק ב- compatibility_matrix.3.xml .
  • ה- teleportation@1.0 HAL אינו נמצא בשום מטריצת תאימות שפורסמה, והוא נחשב גם ל-HAL שלא פורסם.

עבור HALs של מסגרת, אם גרסת HAL נמצאת רק במניפסט ה-framework של ענף פיתוח לא קשור, היא נחשבת ללא הפצתה.

משוחרר ונוכחי

עבור HAL של מכשירים, אם גרסת HAL נמצאת במטריצת תאימות ציבורית וקפואה כלשהי, היא משוחררת. לדוגמה, לאחר הקפאת גרסה 3 של FCM ופורסמה ל-AOSP, ה- health@2.0 HAL נחשב לגרסת HAL משוחררת ועדכנית.

אם גרסת HAL נמצאת במטריצת תאימות ציבורית וקפואה שיש לה את גרסת ה-FCM הגבוהה ביותר, גרסת HAL עדכנית (כלומר לא הוצאה משימוש). לדוגמה, גרסאות HAL קיימות (כגון nfc@1.0 שהוצגו ב- compatibility_matrix.legacy.xml שממשיכות להתקיים ב- compatibility_matrix.3.xml נחשבות גם כגרסאות HAL משוחררות ונוכחיות.

עבור HALs של מסגרת, אם גרסת HAL נמצאת במניפסט ה-framework של הענף האחרון ששוחרר ללא התכונה max-level או (באופן יוצא דופן) max-level וגרסת HAL נוכחית. לדוגמה, ה- displayservice HAL משוחרר ומעודכן באנדרואיד 12, כפי שצוין במניפסט המסגרת של Android 12 .

שוחרר אך הוצא משימוש

עבור HALs של מכשירים, גרסת HAL מבוטלת אם ורק אם מתקיימים כל התנאים הבאים:

  • זה משוחרר.
  • לא במטריצת התאימות הציבורית והקפואה יש את גרסת ה-FCM הגבוהה ביותר.
  • המסגרת עדיין תומכת במטריצת תאימות ציבורית וקפואה.

דוגמאות:

מכאן power@1.0 קיים, אך לא הוצא משימוש, באנדרואיד 9.

עבור HALs של מסגרת, אם גרסת HAL נמצאת במניפסט המסגרת של הענף האחרון ששוחרר עם תכונת max-level נמוכה יותר מהגרסה של גרסת FCM בענף זה, היא נחשבת לגרסת HAL שהופצה אך הוצאה משימוש. לדוגמה, ה- schedulerservice HAL שוחרר אך הוצא משימוש באנדרואיד 12, כפי שצוין במניפסט המסגרת של Android 12 .

הוסר

עבור HALs של מכשירים, גרסת HAL מוסרת אם ורק אם הדברים הבאים נכונים:

  • זה שוחרר בעבר.
  • המסגרת לא תומכת בשום מטריצת תאימות ציבורית וקפואה.

מטריצות תאימות שהן ציבוריות, קפואות, אך אינן נתמכות על ידי המסגרת נשמרות בבסיס הקוד כדי להגדיר את ערכת גרסאות ה-HAL שהוסרו, כך שניתן לכתוב בדיקות VTS כדי לוודא ש-HAL שהוסרו אינם במכשירים חדשים.

עבור HALs של מסגרת, גרסת HAL מוסרת אם ורק אם מתקיימים התנאים הבאים:

  • זה שוחרר בעבר.
  • זה לא נמצא במניפסט כלשהו של הענף האחרון ששוחרר.

FCMs מדור קודם

מדור קודם של Target FCM Version הוא ערך מיוחד עבור כל המכשירים שאינם טרבלים. ה-FCM מדור קודם, compatibility_matrix.legacy.xml , מפרט את הדרישות של המסגרת במכשירים מדור קודם (כלומר מכשירים שהושקו לפני אנדרואיד 8.0).

אם קובץ זה קיים עבור FCM עם גרסה F , ניתן לשדרג כל מכשיר שאינו טרבל ל- F בתנאי שהמניפסט של המכשיר שלו תואם לקובץ זה. ההסרה שלו מתבצעת באותו הליך כמו FCMs עבור גירסאות Target FCM אחרות (הוסרה לאחר שמספר המכשירים הפעילים לפני 8.0 יורד מתחת לסף מסוים).

שוחררו גרסאות FCM

ניתן למצוא את רשימת גרסאות FCM שפורסמו תחת hardware/interfaces/compatibility_matrices .

כדי למצוא את גרסת ה-FCM שפורסמה עם גרסת אנדרואיד ספציפית, ראה Level.h .