OTA עבור התקני A/B עם מחיצות דינמיות

אנדרואיד 10 תומך במחיצות דינמיות , מערכת מחיצות למרחב משתמש שיכולה ליצור, לשנות גודל ולהרוס מחיצות במהלך עדכוני אויר (OTA).

דף זה מתאר כיצד לשנות את גודל המחיצות הדינמיות במהלך עדכון עבור מכשירי A/B שהושקו עם תמיכה במחיצות דינמיות, עבור מכשירים עם אנדרואיד 9 ומטה .

רקע כללי

יש מחיצת super אחת במכשיר. מחיצה זו אינה סיומת חריץ. התקן החסימה חייב להתקיים יחד עם הערך blk_device עבור /misc ב- fstab . לדוגמה, אם הקובץ fstab רשום:

/dev/block/bootdevice/by-name/misc    /misc    # Other fields

אז התקן החסימה של super חייב להתקיים ב- /dev/block/bootdevice/by-name/super , אבל מחיצת super לא צריכה להיות רשומה בקובץ fstab .

במחיצת super , ישנם שני חריצי מטא נתונים , הממוספרים 0 ו-1, המתאימים לחריצי A/B עבור מחיצות. בדף זה, חריצי המטא נתונים נקראים Metadata S (מקור) ומטא נתונים T (יעד). באופן דומה, מחיצות מכונות system_s , vendor_t וכן הלאה.

לפני השדרוג, Metadata S מכיל את המידע עבור המחיצות הדינמיות שבהן נעשה שימוש (בדרך כלל, system_s , vendor_s , product_s וכן הלאה). המערכת קוראת את היקף המחיצות הללו במהלך העדכון, כך שלא ניתן למחוק אותן.

מחיצות שייכות לקבוצות עדכון . ראה הטמעת מחיצות דינמיות לפרטים.

דוגמה למטא נתונים במכשיר היא כדלקמן.

  • מטא נתונים 0
    • קבוצה foo_a
      • system_a מחיצות_א
      • חלוקה product_services_a
      • מחיצות אחרות שעודכנו על ידי Foo
    • קבוצה בר_א
      • ספק מחיצה_ vendor_a
      • מחיצה product_a
      • מחיצות אחרות שעודכנו על ידי בר
    • קבוצה foo_b (שארית מהשדרוג הקודם)
    • קבוצה bar_b (שארית מהשדרוג הקודם)
  • מטא נתונים 1
    • קבוצה foo_a (שארית מהשדרוג הקודם)
    • קבוצה bar_a (שארית מהשדרוג הקודם)
    • קבוצה foo_b
      • system_b מחיצות_ב
      • חלוקה product_services_b
      • מחיצות אחרות שעודכנו על ידי Foo
    • קבוצה bar_b
      • ספק vendor_b
      • מחיצה product_b
      • מחיצות אחרות שעודכנו על ידי בר

אתה יכול להשתמש בכלי lpdump (קוד מקור תחת system/extras/partition_tools ) כדי לזרוק את המטא נתונים במכשיר שלך. לדוגמה:

lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super

עדכון זרימה

  1. אתחל את המטא נתונים של מחיצת super .
    1. טען את ההיקפים עבור מחיצות המקור הדינמיות מ- Metadata S. תן ל-M להיות המטא-נתונים הטעונים.
    2. הסר קבוצות יעד ומחיצות (לדוגמה, foo_t , bar_t ) מ-M כך ש-M יכיל רק מחיצות וקבוצות עם סיומת _s .
    3. הוסף קבוצות יעד ומחיצות לפי השדה dynamic_partition_metadata במניפסט העדכון.
      ניתן למצוא את הגודל של כל מחיצה ב- new_partition_info .
    4. כתוב M ל- Metadata T.
    5. מפה את המחיצות שנוספו בממפ המכשיר כניתנות לכתיבה.
  2. החל את העדכון על מכשירי החסימה.
    1. במידת הצורך, מפה את מחיצות המקור בממפה המכשיר כקריאה בלבד. זה הכרחי עבור טעינת צד מכיוון שמחיצות המקור אינן ממופה לפני העדכון.
    2. החל עדכון מלא או דלתא על כל מכשירי החסימה בחריץ היעד.
    3. התקן את המחיצות כדי להפעיל את הסקריפט שלאחר ההתקנה, ולאחר מכן בטל את טעינת המחיצות.
  3. בטל את מיפוי מחיצות היעד.

לפני ואחרי העדכון, מאפייני המערכת הבאים צריכים להיות בעלי הערכים המתאימים:

ro.boot.dynamic_partitions=true
ro.boot.dynamic_partitions_retrofit=true

הוסף קבוצות ומחיצות למניפסט העדכון

בעת ביצוע עדכון OTA במכשיר A/B עם מחיצות דינמיות, או התקן A/B שמוסיף תמיכה למחיצות דינמיות, עליך להוסיף קבוצות ומחיצות למניפסט העדכון. הקטע שלהלן מציג מידע נוסף על מניפסט העדכון לתמיכה במחיצות דינמיות. ראה update_metadata.proto לתיעוד מפורט על כל שדה.

message DeltaArchiveManifest {
    optional DynamicPartitionMetadata dynamic_partition_metadata;
}

message DynamicPartitionMetadata {
    repeated DynamicPartitionGroup groups;
}

message DynamicPartitionGroup {
    required string name;
    optional uint64 size; // maximum size of group
    repeated string partition_names;
}