סקירה כללית על מחיצות

מכשירי Android מכילים כמה מחיצות או קטעים ספציפיים של נפח האחסון, שמשמשים לאחסון חלקים ספציפיים של תוכנת המכשיר. כל מחיצה מכילה קובץ אימג' של מחיצה (קובץ IMG) או קובץ snapshot של כל התוכנות במחיצה. תרשים 1 מציג את הפריסה של מחיצות הליבה במכשיר:

הפריסה של המחיצות הליבה.

איור 1. הפריסה של המחיצות הליבה.

המחיצות מחולקות לשלוש קטגוריות:

  • מחיצות מערכת הן מחיצות שמתעדכנות כשמעדכנים את מערכת ההפעלה ותכונות אחרות. system,‏ boot ו-init_boot הם מחיצות ליבה של המערכת.

  • מחיצות של ספקים מכילות קוד ספציפי למכשיר ולחומרה, שיכול להיות שלא יתעדכן אף פעם אחרי ההשקה הראשונית. המחיצות vendor,‏ vendor_boot ו-odm הן מחיצות ליבה של ספקים.

  • מחיצות שלא ניתן לעדכן הן מחיצות שהתוכן שלהן לא מתעדכן או מתעדכן בנתוני משתמשים.

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

מחיצות מערכת

בהמשך מופיעה רשימה של כל המחיצות במערכת והשימוש שלהן:

  • מחיצה boot. המחיצה הזו מכילה קובץ Generic Kernel Image‏ (GKI). המחיצה הזו מכילה גם את ה-ramdisk הגנרי במכשירים שהושקו עם Android 12 וגרסאות קודמות. מידע נוסף על דיסק RAM גנרי זמין במאמר תוכן של קובץ אימג' של דיסק RAM גנרי.

  • מחיצה init_boot (Android מגרסה 13 ואילך). המחיצה הזו מכילה דיסק RAM כללי. ב-Android 11 וב-Android 12, ה-ramdisk הגנרי נמצא במחיצה boot.

  • מחיצה system המחיצה הזו מכילה את קובץ האימג' של המערכת שמשמש למוצרים של יצרני ציוד מקורי.

  • מחיצה system_ext. המחיצה הזו מכילה משאבי מערכת ומודולים ייעודיים למערכת שמרחיבים את קובץ האימג' המשותף של המערכת במחיצה system.

  • מחיצה system_dlkm המחיצה הזו מכילה מודולים של GKI. למידע נוסף על המחיצה הזו, ראו הטמעת מחיצה של מודול GKI.

  • מחיצה product. המחיצה הזו יכולה להכיל מודולים ספציפיים למוצרים שלא נכללים בחבילות של מחיצות אחרות.

  • מחיצה pvmfw. במחיצה הזו מאוחסן הקושחה של המכונה הווירטואלית המוגנת (pvmfw), שהוא הקוד הראשון שפועל במכונות וירטואליות מוגנות. למידע נוסף, ראו קושחה מוגנת של מכונות וירטואליות.

  • מחיצה generic_bootloader. המחיצה הזו מכילה את מנהל האתחול הגנרי.

מחיצות של ספקים

בהמשך מופיעה רשימה של כל המחיצות של הספקים והשימוש שלהן:

  • מחיצה vendor_boot. המחיצה הזו מכילה קוד אתחול ספציפי לספק. מידע נוסף זמין במאמר מחיצות אתחול של ספקים.

  • מחיצה recovery. במחיצה הזו מאוחסנת קובץ האימג' לשחזור, שמופעל במהלך תהליך העדכון האווירי (OTA). במכשירים שתומכים בעדכונים חלקים, אפשר לאחסן את קובצי האימג' לשחזור כ-ramdisk שמכיל את קובץ האימג' boot או init_boot. למידע נוסף על עדכונים ללא הפרעה, ראו עדכוני A/B (ללא הפרעה).

  • מחיצה vbmeta. המחיצה הזו מכילה את המידע של Verified Boot לכל המחיצות. המידע הזה מאמת שהתמונות שמותקנות בכל מחיצה מהימנות. למידע נוסף על אתחול מאומת, ראו אתחול מאומת.

  • מחיצה vendor המחיצה הזו מכילה כל קובץ בינארי שספציפי לספק ולא כללי מספיק כדי להפיץ אותו ל-AOSP.

  • מחיצה vendor_dlkm. המחיצה הזו מכילה מודולים של ליבה של ספקים. אחסון מודולי הליבה של הספק במחיצה הזו במקום במחיצה vendor מאפשר לעדכן את מודולי הליבה בלי לעדכן את המחיצה vendor. למידע נוסף, ראו מחיצות DKLM של ספקים ו-ODM.

  • מחיצה odm המחיצה הזו מכילה התאמות של יצרן העיצוב המקורי (ODM) לחבילות התמיכה של לוחות של ספקי מערכת על שבב (SoC). התאמות אישיות כאלה מאפשרות ליצרני ציוד מקורי להחליף או להתאים אישית רכיבי SoC, ולהטמיע מודולים של ליבה לרכיבים ספציפיים ללוח, לדיימונים ולתכונות ספציפיות ליצרן ציוד מקורי בשכבות הפשטה של החומרה (HAL). המחיצה הזו היא אופציונלית. בדרך כלל, המחיצה הזו משמשת לצורך אחסון של התאמות אישיות, כדי שאפשר יהיה להשתמש בתמונת ספק אחת במספר מק"טים של חומרה. למידע נוסף, ראו מחיצות ODM.

  • מחיצה odm_dlkm. המחיצה הזו מיועדת לאחסון מודולים של ליבה של ODM. אחסון מודולי הליבה של ODM במחיצה הזו, במקום במחיצה odm, מאפשר לעדכן מודולי ליבה של ODM בלי לעדכן את המחיצה odm. למידע נוסף, ראו מחיצות DKLM של ספקים ו-ODM.

  • מחיצה radio. המחיצה הזו מכילה את קובץ האימג' של הרדיו, והיא נדרשת רק במכשירים שכוללים רדיו עם תוכנה ספציפית לרדיו במחיצה ייעודית.

מחיצות שלא ניתן לעדכן

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

  • מחיצה cache המחיצה הזו מכילה נתונים זמניים והיא אופציונלית אם במכשיר שלכם מופעלים עדכונים חלקים. אין צורך שאפשר יהיה לכתוב במחיצה הזו מ-bootloader, אבל צריך שאפשר יהיה למחוק אותה. גודל המחיצה תלוי בסוג המכשיר ובנפח האחסון הזמין ב-userdata. בדרך כלל, מספיקים 50 עד 100MB.

  • מחיצה userdata המחיצה הזו מכילה אפליקציות ונתונים שהמשתמשים התקינו, כולל נתוני התאמה אישית.

  • מחיצה metadata. אם במכשיר שלכם מופעלת הצפנת מטא-נתונים, המחיצה הזו מכילה את מפתח ההצפנה של המטא-נתונים. הגודל של המחיצה הזו הוא 16MB או יותר, היא לא מוצפנת ולא נוצרות לה קובצי snapshot. המחיצה הזו נמחקת כשהמכשיר מאופס להגדרות המקוריות.

כללים והמלצות לעדכון מחיצות

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

לא משנה איך מעדכנים את המחיצות, צריך לעדכן את המחיצות הבאות בגלל יחסי תלות הדוקים וחוסר בממשקי API יציבים:

  • המחיצות boot ו-system_dlkm
  • המחיצות init_boot,‏ system,‏ system_ext ו-product

מחיצות דינמיות

במכשירים עם Android מגרסה 11 ואילך יש תמיכה במחיצות דינמיות. מחיצות דינמיות הן מערכת מחיצות של מרחב משתמש ב-Android שמאפשרת ליצור מחיצות, לשנות את הגודל שלהן או למחוק אותן במהלך עדכונים אוויריים (OTA). מידע נוסף זמין במאמר מחיצות דינמיות.

  • מחיצה misc. מחיצת האתחול משמשת את מחיצת השחזור, והיא צריכה להיות בגודל 4KB או יותר.

  • מחיצה tos. המחיצה הזו מכילה את התמונה הבינארית של Trusty OS, והיא משמשת רק אם המכשיר כולל את Trusty. מידע נוסף זמין במאמר מחיצות של Trusty OS‏ (TOS).

וריאציות של מוצרים ב-Soong

מערכת ה-build של Soong משתמשת בוריאנטים של קובצי אימג' כדי לפצל את יחסי התלות ב-build. מודולים מקומיים (/build/soong/cc) יכולים לשנות מודולים של תהליך מערכת לווריאנט הליבה ומודולים של תהליך ספק לווריאנט הספק. מודול בווריאנט אחד של קובץ אימג' לא יכול לקשר למודולים אחרים בווריאנט אחר של קובץ אימג'.

ב-Android מגרסה 12 ואילך, מודול מערכת עם vendor_available: true יוצר וריאנט של ספק בנוסף לווריאנט הליבה. כדי ליצור וריאציה של מוצר, צריך להגדיר את product_available: true. חלק מספריות VNDK ללא product_available: true לא זמינות למודול המוצר.