סקירה כללית

מכשירי 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 כולל כמה שינויים במחיצות, כולל הגבלות על קישור לספריות ולוריאציות חדשות של תמונות במהירות.

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

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