סקירה כללית על תוכנת אתחול

תוכנת אתחול היא תמונה קניינית של ספק שאחראית להפעלת ליבת המערכת במכשיר. טוען האתחול שומר על מצב המכשיר ואחראי לאתחול סביבת המחשוב האמינה (TEE) ולקישור שלה ל-Root of Trust. טוען האתחול גם מאמת את השלמות של המחיצות boot ו-recovery לפני שהוא מעביר את ההרצה לליבת מערכת ההפעלה.

דוגמה לתהליך של bootloader

דוגמה לתהליך של bootloader:

  1. טעינה והפעלה של הזיכרון.

  2. מאמתים את המכשיר בהתאם לתהליך ההפעלה המאומתת.

  3. מאמתים את מחיצות האתחול, כולל boot, dtbo, init_boot ו-recovery, בהתאם לתהליך של הפעלה מאומתת. כחלק מהשלב הזה, בודקים את הגרסה של כותרת תמונת האתחול ומנתחים את הכותרת בהתאם.

  4. אם נעשה שימוש בעדכוני A/B, צריך לקבוע את חריץ האתחול הנוכחי.

  5. קובעים אם צריך להפעיל את מצב השחזור. מידע נוסף זמין במאמר בנושא תמיכה בעדכוני OTA.

  6. טוענים את קובצי האימג' לאתחול, כמו boot.img,‏ vendor_boot.img,‏ init_boot.img וקובצי אימג' אחרים לאתחול של ספקים קנייניים. תמונות האתחול האלה מכילות את הליבה ואת תמונות ה-ramdisk.

    1. טוענים את הליבה לזיכרון כקובץ בינארי דחוס שניתן להפעלה עצמית. הליבה מבצעת דקומפרסיה של עצמה ומתחילה לפעול בזיכרון.

    2. טוענים את ramdisks ואת הקטע bootconfig לזיכרון כדי ליצור את initramfs.

תכונות נוספות שקשורות לטוען האתחול

בהמשך מופיעה רשימה של תכונות נוספות שקשורות לטוען האתחול שאפשר להטמיע:

  • שכבת-על של פירוט מבנה המכשיר (DTO). שכבת-על של עץ המכשיר מאפשרת לטוען האתחול לתמוך בתצורות חומרה שונות. קובץ DTO עובר קומפילציה ל-device tree blob (DTB) שמשמש את טוען האתחול.

  • הקצאה אקראית של כתובות וירטואליות לתמונת הליבה. טוען האתחול תומך בהקצאה אקראית של הכתובת הווירטואלית שבה נטען קובץ האימג' של הליבה. כדי להגדיר כתובת אקראית, מגדירים את RANDOMIZE_BASE ל-true בהגדרות של ליבת המערכת. טוען האתחול צריך לספק אנטרופיה על ידי העברת ערך אקראי מסוג u64 בצומת /chosen/kaslr-seed של עץ המכשיר.

  • הפעלה מאומתת. הפעלה מאומתת מאפשרת לטוען האתחול לוודא שכל הקוד שמופעל מגיע ממקור מהימן.

  • הגדרת אתחול הגדרת ההפעלה זמינה ב-Android מגרסה 12 ואילך, והיא מנגנון להעברת פרטי הגדרה מה-build ומטוען האתחול למערכת ההפעלה. לפני Android 12, נעשה שימוש בפרמטרים של שורת הפקודה של הליבה עם הקידומת androidboot.

  • עדכונים דרך האוויר (OTA). מכשירי Android בשטח יכולים לקבל ולהתקין עדכוני OTA למערכת, לתוכנת האפליקציות ולכללי אזור הזמן. לתכונה הזו יש השלכות על ההטמעה של טוען האתחול. מידע כללי על OTA זמין במאמר עדכוני OTA. פרטים על הטמעה של OTA ספציפי ל-bootloader זמינים במאמר בנושא תמיכה בעדכוני OTA.

  • קישור גרסה. קישור לגרסה מקשר מפתחות אבטחה לגרסה של מערכת ההפעלה ולרמת התיקון. התאמה לגרסה מבטיחה שתוקף שמגלה חולשה בגרסה ישנה של המערכת או של תוכנת TEE לא יוכל להחזיר מכשיר לגרסה הפגיעה ולהשתמש במפתחות שנוצרו בגרסה החדשה יותר. טוען האתחול חייב לספק מידע מסוים כדי לתמוך בקישור גרסה. מידע נוסף זמין במאמר בנושא פרטי גרסה במאפייני AVB.

שורת פקודה של ליבה

משרשרים את שורת הפקודה של ליבת המערכת מהמיקומים הבאים:

  • שורת פקודה של תוכנת האתחול: קבוצה של פרמטרים סטטיים ודינמיים שנקבעים על ידי תוכנת האתחול

  • פירוט מבנה המכשיר (DT): מהצומת chosen/bootargs

  • defconfig: מ-CONFIG_CMDLINE

  • boot.img: משורת הפקודה (לגבי היסטים וגדלים, אפשר לעיין ב-system/core/mkbootimg/bootimg.h)

החל מ-Android 12, כדי להעביר פרמטרים של androidboot.* למרחב המשתמש של Android, אפשר להשתמש ב-bootconfig במקום בשורת הפקודה של ליבת המערכת.