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

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

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

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

טרמינולוגיה

מטריצת תאימות מסגרת (FCM) קובץ XML המפרט את דרישות המסגרת על יישומי ספק תואמים. מטריצת התאימות מנוסחת, וגרסה חדשה מוקפאת עבור כל מהדורת מסגרת. כל מהדורת מסגרת מכילה FCM מרובים.
גרסאות 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 שהם בהחלט חדשים יותר ביחס ל-FCM המקבילים ל-V.
HAL של מכשיר HALs הרשומים (מסופקים) במניפסט המכשיר ומופיעים (חובה או אופציונלית) במטריצת תאימות המסגרת (FCM).
מטריצת תאימות מכשירים (DCM) קובץ XML המפרט את דרישות הספק לגבי יישומי מסגרת תואמים. כל מכשיר מכיל DCM אחד.
מניפסט מסגרת קובץ XML המציין אילו גרסאות HAL מספק צד המסגרת של ממשק הספק, כולל מערכת, system_ext ותמונות מוצר. HALs במניפסט המסגרת מושבתים באופן דינמי בהתאם לגרסת Target FCM של המכשיר.
HALs של מסגרת HALs המפורטים כפי שסופקו במניפסט המסגרת ורשומים כנדרש או כאופציונלי במטריצת תאימות המכשיר (DCM).

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

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

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

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

מציגים HAL חדש

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

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

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

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

<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.current.xml חייב לציין x.(z+1) ו- optional="false" .
  • לא נדרש במכשירים המופעלים עם V = F , ה- compatibility_matrix.current.xml חייב להעתיק את xy-z ואת האופציונליות מ-comatibility_matrix 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.current.xml (שונה ל- compatibility_matrix.2.xml לאחר פרסום אנדרואיד 8.1) ושונה באופן הבא:

<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.current.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 החדשה. ב- 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.current.xml (שונה ל- compatibility_matrix.3.xml עם מהדורת Android 9) ושונה באופן הבא:

<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 הזה נחשב ללא שימוש).
  • מכיוון שה-1.0 HAL קיים ב-legacy/1/2.xml (גרסאות FCM ישנות יותר שאיתן אנדרואיד 9 יכול לעבוד) כ-HAL אופציונלי, המסגרת של Android 9 עדיין יכולה לעבוד עם 1.0 HAL (שאינה נחשבת לגרסת HAL שהוסרה ).

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

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

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

לא ניתן לשנות קובץ זה לאחר שינוי שם ופרסום. לדוגמה, במהלך פיתוח אנדרואיד 9 הקבצים הבאים בנויים עבור hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.current.xml

כאשר אנדרואיד 9 יוצא לאור, השם compatibility_matrix.current.xml שונה ל- compatibility_matrix.3.xml והקבצים הבאים בנויים עבור hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.3.xml

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

בנוסף, ה-FCM של המוצר וה-system_ext עשויים לרשום גם דרישות עבור כל גרסאות FCM של פלטפורמה. שחרור גרסאות FCM במחיצות המוצר ו-system_ext נעשה על ידי הבעלים של תמונות אלו, בהתאמה. מספרי הגרסה של FCM במחיצות המוצר ו-system_ext חייבים להתאים לאלה שבמחיצת המערכת. בדומה לגרסאות FCM במחיצת המערכת, מטריצת התאימות ב-FCM בגרסה F במחיצות המוצר ו-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.1.xml compatibility_matrix.legacy.xml compatibility_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 .

הסרת תמיכה ב-Target FCM גרסאות

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

  • הסרת compatibility_matrix.V.xml מכללי הבנייה (כדי שלא יותקן בתמונת המערכת), ומחיקת כל קוד שיישם או תלוי בפונקציונליות שהוסרה.
  • הסרת HALs של מסגרת עם max-level נמוכה מ-V או שווה ל- V ממניפסט המסגרת, ומחיקת כל קוד שמיישם את HALs המסגרת שהוסרו.

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

מצב גרסת HAL

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

לא שוחרר

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

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

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

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

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

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

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

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

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

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

דוגמאות:

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

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

הוסר

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

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

מטריצות תאימות שהן ציבוריות, קפואות, אך אינן נתמכות על ידי ה-framework, נשמרות בבסיס הקוד כדי להגדיר את ערכת גרסאות ה-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 .