סקירה כללית

מכשירי 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.

פריסת המחיצות ב-Android

איור 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 לא זמינות למודולים של מוצרים.