מחזור חיים FCM

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

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

טרמינולוגיה

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

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

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

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

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

היכרות עם HAL חדש

במהלך פיתוח, בעת השקת HAL החדש (Wi-Fi, NFC, וכו ') כדי Android בגרסת 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 ו נתון לבחירה מתוך 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 ו- deprecates 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 עם שחרורו 9 Android) ו שונה כדלקמן:

<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 משלוח) יש יעד FCM גרסת V >= F .
  6. פרסם קובץ ב- AOSP.

קובץ זה לא יכול להיות מוחלף פעם השם ופורסם. לדוגמה, במהלך הפיתוח של Android 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 יש יעד FCM גרסה> = 3.

בנוסף, המוצר וה- FCMs 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 , זה אומר שכל שיגור מכשיר עם יעד FCM גרסה V = F או במאוחר אסור ליישם foo על גרסה xy או כל גרסה מבוגרת xy . גרסת HAL שהוצא משימוש עדיין נתמכת על ידי המסגרת לשדרוג מכשירים.

כאשר FCM גרסת F משתחרר, גרסת HAL foo@xy נחשבת מיושנת אם ספציפית HAL הגרסה לא נאמרה במפורש FCM האחרונה עבור יעד FCM גרסת 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 , ו compatibility_matrix.2.xml . לפיכך, health@1.0 נחשבת עוד בשימוש.

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

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

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

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

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

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

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

התקנים עם מחוץ גרסת FCM יעד של S F עבור שחרור מסגרת נתון לא יכולים לשדרג לגרסה הזאת.

סטטוס גרסת HAL

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

לא פורסם

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

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

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

שוחרר ועכשווי

עבור מכשירי HAL למכשיר, אם גרסת HAL נמצאת בכל מטריצת תאימות ציבורית וקפואה, היא משוחררת. לדוגמה, לאחר FCM גרסה 3 קפוא (כאשר 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 שוחרר הנוכחי.

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

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

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

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

דוגמאות:

לפיכך power@1.0 הוא נוכחי, אך לא מומלץ לשימוש, ב Android 9.

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

הוסר

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

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

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

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

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

מכשירי FCM מדור קודם

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

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

גרסאות FCM שפורסמו

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

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