מכשירי Android מכילים כמה מחיצות או חלקים ספציפיים בנפח האחסון שמשמשים לאחסון חלקים ספציפיים בתוכנה של המכשיר. כל מחיצה מכילה תמונת מחיצה (קובץ IMG) או תמונת מצב של כל התוכנה של המחיצה. איור 1 מציג את הפריסה של מחיצות הליבה במכשיר:
איור 1. פריסה של מחיצות ליבה.
המחיצות מסווגות לשלוש קטגוריות:
מחיצות מערכת הן מחיצות שמתעדכנות כשמבצעים עדכון של מערכת ההפעלה ותכונות אחרות.
system
,boot
ו-init_boot
הן מחיצות ליבה של המערכת.מחיצות של ספקים מכילות קוד ספציפי למכשיר ולחומרה, שאולי לא יעודכן אף פעם אחרי ההשקה הראשונית. המחיצות
vendor
,vendor_boot
ו-odm
הן מחיצות ליבה.מחיצות שלא ניתן לעדכן הן מחיצות שהתוכן שלהן לא מתעדכן או מתעדכן בנתוני משתמשים.
קוד במחיצות של המערכת והספק יכול ליצור אינטראקציה באמצעות ממשק יציב שנקרא ממשק הספק (VINTF).
מחיצות מערכת
בהמשך מפורטת רשימה של כל מחיצות המערכת והשימוש בהן:
boot
מחיצה. המחיצה הזו מכילה תמונת ליבה גנרית (GKI). המחיצה הזו מכילה גם את ה-ramdisk הגנרי במכשירים שהושקו ב-Android 12 ובגרסאות קודמות. מידע נוסף על ramdisk גנרי זמין במאמר בנושא תוכן של תמונת ramdisk גנרית.
init_boot
partition (Android מגרסה 13 ואילך). המחיצה הזו מכילה ramdisk כללי. ב-Android 11 וב-Android 12, ה-ramdisk הכללי נמצא במחיצהboot
.system
מחיצה. המחיצה הזו מכילה את תמונת המערכת שמשמשת למוצרי OEM.system_ext
מחיצה. המחיצה הזו מכילה משאבי מערכת ומודולים קנייניים של המערכת שמרחיבים את תמונת המערכת המשותפת במחיצהsystem
.system_dlkm
מחיצה. המחיצה הזו מכילה מודולים של GKI. מידע נוסף על החלוקה הזו זמין במאמר הטמעה של חלוקת מודולים ב-GKI.product
מחיצה. המחיצה הזו יכולה להכיל מודולים ספציפיים למוצר שלא נכללים בחבילה עם מחיצות אחרות.pvmfw
מחיצה. במחיצה הזו מאוחסן קושחת המכונה הווירטואלית המוגנת (pvmfw), שהוא הקוד הראשון שפועל במכונות וירטואליות מוגנות. מידע נוסף זמין במאמר Protected Virtual Machine Firmware.generic_bootloader
מחיצה. המחיצה הזו מכילה את טוען האתחול הגנרי.
מחיצות של ספקים
בהמשך מופיעה רשימה של כל המחיצות של הספקים והשימוש בהן:
vendor_boot
מחיצה. המחיצה הזו מכילה קוד הפעלה ספציפי לספק. מידע נוסף זמין במאמר בנושא מחיצות אתחול של ספקים.recovery
מחיצה. במחיצה הזו מאוחסנת תמונת השחזור, שממנה מתבצעת האתחול במהלך תהליך העדכון דרך האוויר (OTA). במכשירים שתומכים בעדכונים חלקים, אפשר לאחסן את תמונות השחזור כ-ramdisk שכלול בתמונהboot
אוinit_boot
. מידע נוסף על עדכונים ללא הפרעה זמין במאמר עדכוני A/B (ללא הפרעה).vbmeta
מחיצה. המחיצה הזו מכילה את המידע של אתחול מאומת לכל המחיצות. המידע הזה מאמת שהתמונות שהותקנו בכל מחיצה הן מהימנות. מידע נוסף על אתחול מאומת זמין במאמר בנושא אתחול מאומת.vendor
מחיצה. המחיצה הזו מכילה קובץ בינארי ספציפי לספק שלא מספיק כללי כדי להפיץ אותו ל-AOSP.vendor_dlkm
מחיצה. המחיצה הזו מכילה מודולים של ליבת הספק. אחסון מודולים של ליבת הספק במחיצה הזו במקום במחיצהvendor
מאפשר לעדכן מודולים של ליבת הספק בלי לעדכן את המחיצהvendor
. מידע נוסף זמין במאמר בנושא מחיצות DKLM של ספקים ויצרני ODM.odm
מחיצה. המחיצה הזו מכילה התאמות אישיות של יצרן עיצוב מקורי (ODM) לחבילות תמיכה בלוח (BSP) של ספק מערכת על שבב (SoC). התאמות אישיות כאלה מאפשרות ליצרני ODM להחליף או להתאים אישית רכיבי SoC, ולהטמיע מודולים של ליבת מערכת ההפעלה עבור רכיבים ספציפיים ללוח, תהליכי רקע ותכונות ספציפיות ל-ODM בשכבות הפשטה של חומרה (HAL). המחיצה הזו היא אופציונלית. בדרך כלל המחיצה הזו משמשת להכללת התאמות אישיות, כדי שמכשירים יוכלו להשתמש בתמונה יחידה של ספק עבור כמה מק"טים של חומרה. מידע נוסף זמין במאמר בנושא מחיצות ODM.odm_dlkm
מחיצה. המחיצה הזו מיועדת לאחסון מודולים של ליבת ODM. אם מאחסנים את מודולי הליבה של ODM במחיצה הזו, במקום במחיצהodm
, אפשר לעדכן את מודולי הליבה של ODM בלי לעדכן את המחיצהodm
. מידע נוסף זמין במאמר בנושא מחיצות DKLM של ספקים ויצרני ODM.radio
מחיצה. המחיצה הזו מכילה את תמונת הרדיו והיא נדרשת רק למכשירים שכוללים רדיו עם תוכנה ספציפית לרדיו במחיצה ייעודית.
מחיצות שלא ניתן לעדכן
בהמשך מופיעה רשימה של כל המחיצות שלא ניתן לעדכן והשימוש בהן:
cache
מחיצה. המחיצה הזו מכילה נתונים זמניים והיא אופציונלית אם המכשיר משתמש בעדכונים חלקים. המחיצה הזו לא צריכה להיות ניתנת לכתיבה מתוכנת האתחול, אבל היא צריכה להיות ניתנת למחיקה. גודל המחיצה תלוי בסוג המכשיר ובנפח האחסון שזמין ב-userdata
. בדרך כלל, נפח של 50 עד 100 MB מספיק.userdata
מחיצה. המחיצה הזו מכילה אפליקציות ונתונים שהמשתמש התקין, כולל נתוני התאמה אישית.metadata
מחיצה. אם המכשיר משתמש בהצפנת מטא-נתונים, המחיצה הזו מכילה את המפתח להצפנת מטא-נתונים. גודל המחיצה הזו הוא 16MB או יותר, היא לא מוצפנת והנתונים שלה לא מצולמים. המחיצה הזו נמחקת כשמבצעים איפוס להגדרות המקוריות של המכשיר.
כללים והמלצות לעדכון מחיצות
מומלץ לעדכן את כל מחיצות המערכת כמכלול אחד ואת כל מחיצות הספקים כמכלול אחר. כשמעדכנים את קבוצת המחיצות כמכלול, אפשר לבדוק כדי לוודא שהממשקים בין התמונות בכל מחיצה נשארים יציבים.
לא משנה איך מעדכנים את המחיצות, צריך לעדכן את המחיצות הבאות בגלל תלות הדוקה בין רכיבים שונים והיעדר ממשקי API יציבים:
- המחיצות
boot
ו-system_dlkm
- המחיצות
init_boot
,system
,system_ext
ו-product
מחיצות דינמיות
מכשירים עם Android 11 ומעלה יכולים לתמוך במחיצות דינמיות, שהן מערכת חלוקה למחיצות במרחב המשתמש ב-Android. המערכת הזו מאפשרת ליצור מחיצות, לשנות את הגודל שלהן או למחוק אותן במהלך עדכונים דרך האוויר (OTA). מידע נוסף זמין במאמר בנושא מחיצות דינמיות.
misc
מחיצה. המחיצה הזו משמשת את מחיצת השחזור והיא בגודל 4 KB או יותר.tos
מחיצה. המחיצה הזו מכילה את התמונה הבינארית של מערכת ההפעלה Trusty, והיא נמצאת בשימוש רק אם המכשיר כולל את Trusty. מידע נוסף זמין במאמר בנושא מחיצות של מערכת ההפעלה Trusty (TOS).
וריאציות של מוצרים ב-Soong
מערכת ה-build של Soong משתמשת בווריאציות של תמונות כדי לפצל את יחסי התלות של ה-build. מודולים מקוריים (/build/soong/cc
) יכולים לשנות מודולים של תהליכי מערכת למודולים של תהליכי ליבה וספקים, ומודולים של תהליכי ספקים למודולים של תהליכי ספקים; מודול בווריאציה אחת של תמונה לא יכול לקשר למודולים אחרים בווריאציה אחרת של תמונה.
ב-Android מגרסה 12 ואילך, מודול מערכת עם vendor_available: true
יוצר וריאנט של ספק בנוסף לווריאנט הליבה. כדי ליצור וריאציית מוצר, צריך להגדיר את product_available: true
. חלק מספריות VNDK ללא product_available: true
לא זמינות למודולים של מוצרים.