מכשירי Android כוללים מספר מחיצות שממלאות פונקציות שונות תהליך האתחול.
מחיצות רגילות
מחיצה
boot
. המחיצה הזו מכילה תמונת ליבה ונוצרת באמצעותmkbootimg
. ניתן להשתמש במחיצה וירטואלית כדי להבהב כל אחת מהתמונות ישירות בלי להבהב מחיצת הפעלה חדשה. המחיצה הזו מכילה גם את ה-ramdisk הכללי במכשירים שהופעלו לפני Android מגרסה 13.kernel. המחיצה הווירטואלית
kernel
מחליפה את הליבה (zImage
,zImage-dtb
,Image.gz-dtb
) על ידי כתיבת תמונת הליבה החדשה מעל קובץ אימג' של הליבה. אם ליבת הפיתוח שסופקה אינה תואמת, ייתכן צריך לעדכן את המחיצותvendor
,system
אוdtb
(אם קיימת) עם ולשייך אותו למודולים של ליבה (kernel).ramdisk. המחיצה הווירטואלית
ramdisk
מחליפה את הר IAM ב- וכותבת את התמונה של ה-ramdisk החדש מעל התמונה הישנה של רדיסק.
פעולת ההחלפה קובעת את מיקום ההתחלה של התמונה הקיימת ב-eMMC ומעתיקים את התמונה החדשה למיקום הזה. התמונה החדשה (kernel או ramdisk) עשוי להיות גדול יותר מהמכשיר הקיים. לפנות מקום, תוכנת האתחול יכולה להעביר נתונים אחרי התמונה או לנטוש את הפעולה עם שגיאה.
מחיצה
init_boot
. המחיצה הזו מכילה את ה-ramdisk הכללי עבור עם Android מגרסה 13 ואילך.מחיצה
system
. המחיצה הזו מכילה את ה-framework של Android.מחיצה
odm
. המחיצה הזו מכילה יצרן עיצוב מקורי (ODM) התאמות אישיות בחבילות תמיכה של לוח (BSP) של מערכת על שבב (SoC). התאמות אישיות כאלה מאפשרות ל-ODM להחליף או להתאים אישית רכיבי SoC, וכן להטמיע מודולים של ליבה (kernel) לרכיבים ספציפיים ללוח, לדימונים תכונות ספציפיות ל-ODM בשכבות הפשטה של חומרה (HAL). המחיצה הזו היא אופציונלי; בדרך כלל הוא מכיל התאמות אישיות, כדי שמכשירים להשתמש בתמונה אחת של ספק לכמה מק"טים של חומרה. מידע נוסף מופיע כאן: ODM מחיצות.מחיצה
odm_dlkm
. המחיצה הזו מיועדת לאחסון ליבה (kernel) של ODM מודולים. אחסון מודולים של ליבה (kernel) של ODM במחיצהodm_dlkm
(בניגוד לאחסון של מודולים של ליבה (kernel) של ODM למחיצהodm
) אפשר לעדכן מודולים של ליבה (kernel) של ODM בלי לעדכן את המחיצהodm
.מחיצה
recovery
. המחיצה הזו מאחסנת את תמונת השחזור, במהלך תהליך OTA. מכשירים שתומכים בצורה חלקה יכולים לאחסן את תמונות השחזור בתור ramdisk שנמצא בתמונהboot
אוinit_boot
(במקום בתמונה נפרדת תמונה).מחיצה
cache
. המחיצה הזו מאחסנת נתונים זמניים והיא אופציונלית אם המכשיר משתמש בעדכונים חלקים. מחיצת המטמון לא צריכה להיות ניתנים לכתיבה מתוכנת האתחול, אבל צריך להיות ניתנים למחיקה. המחיצה הגודל תלוי בסוג המכשיר ובזמינות המקום במכשירuserdata
. בדרך כלל, 50MB-100MB מספיקים.מחיצה
misc
. המחיצה הזו משמשת את מחיצת השחזור, 4 KB או יותר.מחיצה
userdata
. המחיצה הזו מכילה אפליקציות שהותקנו על ידי משתמשים וגם כולל נתוני התאמה אישית.מחיצה
metadata
. המחיצה הזו משמשת לאחסון המטא-נתונים מפתח הצפנה כשהמכשיר משתמש במטא-נתונים הצפנה. הגודל הוא 16MB ומעלה. הוא לא מוצפן והנתונים שלו לא נשמרים בתמונת מצב. הנתונים נמחקים כשמאפסים את המכשיר להגדרות המקוריות. השימוש במחיצה הזו הוא באופן מוגבל.מחיצה
vendor
. המחיצה הזו מכילה כל קובץ בינארי שאינו מופצת ל-AOSP. אם המכשיר לא מכיל מידע קנייני, אפשר להשמיט את המחיצה הזו.מחיצה
vendor_dlkm
. המחיצה הזו מיועדת לאחסון של של המודולים של הליבה. אחסון מודולים של ליבה (kernel) של ספק במחיצהvendor_dlkm
(בניגוד למחיצהvendor
), אפשר לעדכן את הליבה מודולים בלי לעדכן את המחיצהvendor
.מחיצה
radio
. המחיצה הזו מכילה את תמונת הרדיו ויש צורך בה רק עבור התקנים שכוללים רדיו עם תוכנה ספציפית לרדיו למחיצה ייעודית.מחיצה
tos
. המחיצה הזו מאחסנת את התמונה הבינארית של מערכת ההפעלה Trusty ומשמש רק אם המכשיר כולל את Trusty. פרטים נוספים זמינים במאמר תנאים והגבלות מחיצות.מחיצה
pvmfw
. המחיצה הזו מאחסנת את המכונה הווירטואלית מוגנת קושחה (pvmfw) שהיא הקוד הראשון שרץ במכונות וירטואליות מוגנות. צפייה קושחה מוגנת למכונה וירטואלית לקבלת פרטים נוספים.
מחיצות דינמיות
מכשירים עם Android מגרסה 11 ואילך יכולים לתמוך מחיצות דינמיות, שהן מערכת חלוקה למחיצות (partitioning) במרחב המשתמשים ל-Android שמאפשר ליצור מחיצות, לשנות את הגודל שלהן או להרוס אותן במהלך שידור אלחוטי (OTA) לפרטים נוספים, ראו דינמית .
הקצאת מחיצות חיוניות
אם המכשיר דורש מחיצות או נתונים ספציפיים כדי לפעול, עליך להקצות
מחיצות או נתונים אלה כמוגנים באופן מלא או כניתנים להבהוב מחדש, כלומר
אפשר ליצור אותם מחדש, לספק אותם או לחלץ אותם באמצעות פקודת fastboot oem
.
המידע כולל נתונים כמו הגדרות ספציפיות להגדרות המקוריות של כל מכשיר, מספרים סידוריים,
נתוני כיול ועוד.
שינויים ב-Android 11
Android 11 כולל כמה שינויים במחיצות, כולל הגבלות על קישור לספריות ולוריאציות חדשות של תמונות במהירות.
איור 1. פריסת המחיצות ב-Android 11
תמונת מערכת יחידה (SSI). תמונה רעיונית חדשה שמכילה את
system
ו-system_ext
תמונות. מתי המחיצות האלה נפוצות עבור קבוצה של מכשירי היעד, המכשירים האלה יכולים לשתף את ה-SSI ולדלג עלsystem
ו-system_ext
תמונות.מחיצה
system_ext
. מחיצה חדשה שיכולה להשתמש במשאביsystem
והם יכולים לכלול מודולים של המערכת:מרחיבים את המודולים של מערכת AOSP במחיצה
system
. ההמלצות שלנו להעביר מודולים כאלה ל-AOSP כדי שיהיה אפשר להתקין אותם ב-system
למחיצה מאוחר יותר.חבילות מודולים של OEM (יצרן ציוד מקורי) או מודולים ספציפיים ל-SoC. מומלץ לבטל את הקיבוץ של מודולים כאלה כך שיהיה אפשר להתקין אותם במחיצה
product
אוvendor
.
מחיצה
system
. תמונת מערכת נפוצה שמשמשת עבור מוצרים של OEM. רביעי מומלץ להעביר מודולים קנייניים מהמחיצהsystem
, להעלות אותם ל-AOSP או להעביר אותם למחיצהsystem_ext
.מחיצה
product
. מחיצה זו יכולה כעת להשתמש בממשקים מורשים כדי להתקין מודולים ספציפיים למוצר שלא מקובצים יחד עם מחיצות.
שינויים ב-VNDK
ערכת פיתוח נייטיב של הספק (VNDK)
היא קבוצה של ספריות המותקנות במחיצה system
ותוכננו
שמיועדת באופן בלעדי לספקים כדי שיוכלו להטמיע את פתרון ה-HAL שלהם.
ב-Android 10 ומטה, המחיצה
vendor
יכולה לקשר לספריות VNDK ב- את המחיצהsystem
, אבל לא ניתן לקשר לספריות אחרות ב-system
מחיצה. מודולים מקוריים במחיצה שלproduct
יכולים לקשר לכל ספרייה במחיצהsystem
.ב-Android מגרסה 11 ואילך,
product
וvendor
מחיצות יכולות לקשר לספריות VNDK במחיצהsystem
, אבל לא יכולות מקשרים לספריות אחרות במחיצהsystem
.
וריאציות של מוצר בקרוב
מערכת ה-build של Soong משתמשת בווריאציות של תמונה כדי לפצל
וליצור יחסי תלות. מודולים מקוריים (/build/soong/cc
) יכולים לשנות את המערכת
לעבד מודולים למודולים של תהליכי הליבה ושל תהליכי הספק
וריאנט של הספק; מודול בווריאנט של תמונה אחת לא יכול לקשר למודולים אחרים
וריאציה אחרת של התמונה.
ב-Android מגרסה 10 ומטה, מודול מערכת יוצר באופן אוטומטי וריאנטים ליבה. הוא יכול גם ליצור וריאנטים של ספק על ידי הגדרת
vendor_available: true
Android.bp
קבצים; כך המודולים של הספקים יוכלו לקשר למודולים של המערכת. גם ספריות VNDK, שהן וריאציות ספק של ספריותsystem
, יכולות ליצור וריאנטים של ספק למודולים של ספקים על ידי הגדרתvendor_available: true
בקובציAndroid.bp
שלו (אפשר לראות דוגמה).ב-Android 11, מודול מערכת יכול גם ליצור וריאציית מוצר (בנוסף לווריאציות הליבה והספק) על ידי מגדירה את
vendor_available: true
.ב-Android מגרסה 12 ואילך, יש מודול מערכת עם
vendor_available: true
יוצר וריאנט של ספק בנוסף ליבה הווריאנט. כדי ליצור וריאציית מוצר,product_available: true
צריך להיות מוגדר. חלק מספריות VNDK ללאproduct_available: true
זמינים למודולים של מוצרים.