מכשירי 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. לפרטים נוספים, ראו מחיצות של TOS.מחיצה
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
לא זמינות למודולים של מוצרים.