מכשירי Android כוללים כמה מחיצות שממלאות פונקציות שונות בתהליך האתחול.
מחיצות רגילות
מחיצה
boot
המחיצה הזו מכילה קובץ אימג' של ליבה ונוצרת באמצעותmkbootimg
. אפשר להשתמש במחיצה וירטואלית כדי להטמיע את אחת מהתמונות ישירות, בלי להטמיע מחיצה חדשה לאתחול. המחיצה הזו מכילה גם את ה-ramdisk הגנרי במכשירים שהושקו לפני Android 13.kernel המחיצה הווירטואלית
kernel
מחליפה את הליבה (zImage
,zImage-dtb
, Image.gz-dtb
) על ידי כתיבת קובץ האימג' החדש של הליבה מעל קובץ האימג' הישן של הליבה. אם ליבה הפיתוח שסופקה לא תואמת, יכול להיות שתצטרכו לעדכן את המחיצהvendor
,system
אוdtb
(אם היא קיימת) באמצעות מודולי הליבה המשויכים.ramdisk המחיצה הווירטואלית
ramdisk
מחליפה את ה-ramdisk על ידי כתיבת קובץ האימג' החדש של ה-ramdisk מעל קובץ האימג' הישן של ה-ramdisk.
פעולת הכתיבה מחדש קובעת את מיקום ההתחלה של התמונה הקיימת ב-eMMC ומעתיקה את התמונה החדשה למיקום הזה. יכול להיות שהתמונה החדשה (ליבה או דיסק RAM) תהיה גדולה יותר מהתמונה הקיימת. כדי לפנות מקום, מנהל האתחול יכול להעביר נתונים אחרי התמונה או לבטל את הפעולה עם הודעת שגיאה.
מחיצה
init_boot
המחיצה הזו מכילה את ה-ramdisk הגנרי למכשירים שיושקו עם Android 13 ואילך.מחיצה
system
המחיצה הזו מכילה את מסגרת Android.מחיצה
odm
המחיצה הזו מכילה התאמות של יצרן העיצוב המקורי (ODM) לחבילות התמיכה של לוחות של ספקי מערכת על שבב (SoC). התאמות אישיות כאלה מאפשרות ליצרני ציוד מקורי להחליף או להתאים אישית רכיבי SoC, ולהטמיע מודולים של ליבה לרכיבים ספציפיים ללוח, לדיימונים ולתכונות ספציפיות ליצרן ציוד מקורי בשכבות הפשטה של החומרה (HAL). המחיצה הזו היא אופציונלית. בדרך כלל היא משמשת לצורך שמירת התאמות אישיות, כדי שאפשר יהיה להשתמש בתמונת ספק אחת במכשירים עם מספר מק"טים של חומרה. פרטים נוספים זמינים במאמר מחיצות ODM.מחיצה
odm_dlkm
המחיצה הזו מיועדת לאחסון מודולים של ליבה של ODM. אחסון מודולים של ליבה של ODM במחיצהodm_dlkm
(לעומת המחיצהodm
) מאפשר לעדכן מודולים של ליבה של ODM בלי לעדכן את המחיצהodm
.מחיצה
recovery
במחיצה הזו מאוחסנת קובץ האימג' לשחזור, שמופעל במהלך תהליך ה-OTA. במכשירים שתומכים בעדכונים חלקים, אפשר לאחסן את קובצי האימג' של השחזור כ-ramdisk שמכיל את קובץ האימג'boot
אוinit_boot
(במקום קובץ אימג' נפרד).מחיצה
cache
במחיצה הזו מאוחסנים נתונים זמניים, והיא אופציונלית אם במכשיר מופעלים עדכונים חלקים. לא צריך שאפשר יהיה לכתוב במחיצה של המטמון מ-bootloader, אבל צריך שאפשר יהיה למחוק אותה. גודל המחיצה תלוי בסוג המכשיר ובנפח האחסון הפנוי ב-userdata
. בדרך כלל, מספיקים 50MB עד 100MB.מחיצה
misc
מחיצת האתחול משמשת את מחיצת השחזור, והיא צריכה להיות בגודל 4KB או יותר.מחיצה
userdata
המחיצה הזו מכילה אפליקציות ונתונים שהמשתמשים התקינו, כולל נתוני התאמה אישית.מחיצה
metadata
המחיצה הזו משמשת לאחסון מפתח ההצפנה של המטא-נתונים כשהמכשיר משתמש בהצפנת המטא-נתונים. הקובץ גדול מ-16MB. הוא לא מוצפן והנתונים שלו לא נשמרים בתמונות מצב. הוא נמחק כשמבצעים איפוס להגדרות המקוריות של המכשיר. השימוש במחיצה הזו מוגבל מאוד.מחיצה
vendor
המחיצה הזו מכילה כל קובץ בינארי שלא ניתן להפיץ ל-AOSP. אם המכשיר לא מכיל מידע קנייני, אפשר להשמיט את המחיצה הזו.מחיצה
vendor_dlkm
המחיצה הזו מיועדת לאחסון מודולים של ליבה של ספקים. אחסון מודולי הליבה של הספק במחיצהvendor_dlkm
(לעומת המחיצהvendor
) מאפשר לעדכן מודולי ליבה בלי לעדכן את המחיצהvendor
.מחיצה
radio
המחיצה הזו מכילה את קובץ האימג' של הרדיו, והיא נדרשת רק במכשירים שכוללים רדיו עם תוכנה ספציפית לרדיו במחיצה ייעודית.מחיצה
tos
במחיצה הזו מאוחסן קובץ האימג' הבינארי של Trusty OS, והיא משמשת רק אם המכשיר כולל את Trusty. פרטים נוספים זמינים במאמר מחיצות של תנאי השימוש.מחיצה
pvmfw
במחיצה הזו מאוחסן הקושחה של המכונה הווירטואלית המוגנת (pvmfw), שהוא הקוד הראשון שפועל במכונות וירטואליות מוגנות. פרטים נוספים זמינים במאמר קושחת מכונה וירטואלית מוגנת.
מחיצות דינמיות
במכשירים עם Android מגרסה 11 ואילך יש תמיכה במחיצות דינמיות. מחיצות דינמיות הן מערכת מחיצות של מרחב משתמש ב-Android שמאפשרת ליצור מחיצות, לשנות את הגודל שלהן או למחוק אותן במהלך עדכונים אופליין (OTA). פרטים נוספים זמינים במאמר מחיצות דינמיות.
הקצאת מחיצות קריטיות
אם המכשיר דורש מחיצות או נתונים ספציפיים כדי לפעול, צריך להגדיר את המחיצות או הנתונים האלה כמוגנים באופן מלא או ככאלה שאפשר לבצע להם איפוס באמצעות הפקודה fastboot oem
. כלומר, אפשר לבנות אותם מחדש, לספק אותם או לחלץ אותם באמצעות הפקודה fastboot oem
.
הנתונים האלה כוללים הגדרות ספציפיות למכשיר מבית היוצר, מספרים סידוריים, נתוני כיול ועוד.
שינויים ב-Android 11
ב-Android 11 יש שינויים רבים במחיצות, כולל הגבלות על קישור לספריות וריאנטים חדשים של קובצי אימג' של Soong.
איור 1. פריסת המחיצות ב-Android 11
Single System Image (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
.
וריאציות של מוצרים ב-Soong
מערכת ה-build של Soong משתמשת בגרסת אימג' שונות כדי לפצל את יחסי התלות ב-build. מודולים מקומיים (/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
לא זמינות למודולים של מוצרים.