הטמעת DTOs

הטמעה של שכבות-על של עץ המכשיר (DTO) כוללת חלוקה של עץ המכשיר (DT), בנייה, חלוקה למחיצות והרצה. אחרי שיוצרים הטמעה תקינה, צריך גם לשמור על תאימות בין שני ה-DT ולקבוע אסטרטגיה להבטחת האבטחה של כל מחיצת DT.

חלוקת ה-DT

מתחילים בחלוקת ה-DT לשני חלקים:

  • מספר הטלפון הראשי. החלק שכולל רק את ה-SoC וההגדרות שקובעות כברירת מחדל, שמסופקים על ידי ספק ה-SoC.
  • Overlay DT. ההגדרות הספציפיות למכשיר, שסופקו על ידי ODM/OEM.

אחרי שמחלקים את ה-DT, צריך לוודא שיש תאימות בין ה-DT הראשי לבין ה-DT של שכבת העל, כך שמיזוג של ה-DT הראשי עם ה-DT של שכבת העל יניב DT מלא למכשיר. פרטים על הפורמט והכללים של DTO מופיעים במאמר בנושא תחביר DTO. לפרטים על שימוש בכמה DT, אפשר לעיין במאמר שימוש בכמה DT.

יצירת טבלאות נתונים ראשיות וטבלאות נתונים של שכבת-על

כדי ליצור את ה-DT הראשי:

  1. קומפילציה של ה-DT הראשי .dts לקובץ .dtb.
  2. מבצעים Flash של קובץ .dtb למחיצה שנגישה בזמן הריצה של טוען האתחול (מפורט בקטע [Partition DTs](#partition)).

כדי ליצור את שכבת העל של ה-DT:

  1. קומפילציה של שכבת-העל של ה-DT .dts לקובץ .dtbo. פורמט הקובץ הזה זהה לפורמט של קובץ .dtb שעבר המרה ל-DT שטוח, אבל סיומת הקובץ שונה כדי להבדיל אותו מה-DT הראשי.
  2. מבצעים Flash של קובץ .dtbo למחיצה שנגישה בזמן הריצה של טוען האתחול (מפורט בקטע [Partition DTs](#partition)).

פרטים על קומפילציה באמצעות DTC ואימות תוצאות DTO במארח מופיעים במאמר בנושא קומפילציה ואימות.

Partition DTs

קובעים מיקום מהימן בזיכרון פלאש שאפשר לגשת אליו בזמן הריצה של טוען האתחול, כדי להציב בו את .dtb ואת .dtbo.

מיקומים לדוגמה של התג הראשי של DT:

  • חלק ממחיצת האתחול, מצורף לליבה (image.gz)
  • הפרדה של בלובים של נתוני תנועה (.dtb) במחיצה ייעודית (dtb)

דוגמאות למיקומים של שכבת העל DT:

איור 1. מכניסים את הקובץ ‎ .dtbo למחיצת odm (רק אם לטוען האתחול יש אפשרות לטעון נתונים ממערכת הקבצים של מחיצת odm).

איור 2. ממקמים את הקובץ dtbo במחיצה ייחודית, כמו מחיצת dtbo.

הערה: הגודל של מחיצת ה-DT של שכבת העל תלוי במכשיר ובמספר השינויים שצריך לבצע בנוסף ל-blob ה-DT הראשי. בדרך כלל, 8 MB מספיקים בהחלט ומאפשרים להגדיל את המכסה בעתיד אם יהיה צורך בכך.

במכשירים שתומכים בעדכונים חלקים (A/B), צריך לבצע A/B במחיצות ה-DT הראשיות ובמחיצות ה-DT של שכבת העל:

איור 3. בדיקת A/B של מחיצת DTBO, דוגמה 1.

איור 4. חלוקת DTBO ל-A/B, דוגמה 2.

הרצה בתוכנת האתחול

כדי להריץ:

איור 5. הטמעה טיפוסית של DTO בזמן ריצה בתוכנת האתחול.

  1. טעינה של .dtb מהאחסון לזיכרון.
  2. טעינה של .dtbo מהאחסון לזיכרון.
  3. השכבת .dtb על .dtbo כדי ליצור DT משולב.
  4. הפעלת ליבה בהינתן כתובת הזיכרון של ה-DT הממוזג.

שמירה על תאימות

ה-DTB הראשי (מספק ה-SoC) נחשב לממשק API ל-DTBO. אחרי שמפרידים את ה-DT לחלק משותף ל-SoC ולחלק ספציפי למכשיר, צריך לוודא שהתאימות בין שני החלקים תישמר בעתיד, כולל:

  • הגדרת ה-DT ב-DT הראשי. לדוגמה, צמתים, מאפיינים, תוויות. כל שינוי בהגדרה של DT ראשי יכול לגרום לשינויים ב-DT של שכבת העל. לדוגמה, כדי לתקן שם של צומת ב-DT הראשי, מגדירים תווית alias שממפה לשם הצומת המקורי (כדי להימנע משינוי של DT השכבה).
  • הצגת מיקום החנות של DT על גבי מפה. לדוגמה, שם המחיצה, הפורמט של החנות.

הבטחת אבטחה

תוכנת האתחול צריכה לוודא שקובץ ה-DTB או ה-DTBO מאובטח, לא עבר שינוי ולא פגום. אתם יכולים להשתמש בכל פתרון כדי לאבטח את DTB או DTBO, לדוגמה, חתימה של תמונת אתחול ב-VBoot 1.0 או AVB HASH footer (VBoot 2.0).

  • אם DTB או DTBO נמצאים במחיצה ייחודית, אפשר להוסיף את המחיצה הזו לשרשרת האמון של AVB. שרשרת האמון מתחילה מ-Root of Trust שמוגן על ידי החומרה וממשיכה אל תוכנת האתחול, שמאמתת את השלמות והאותנטיות של מחיצת DTB או DTBO.
  • אם DTB או DTBO נמצאים במחיצה קיימת (כמו מחיצת odm), המחיצה הזו צריכה להיות בשרשרת האמון של AVB. (מחיצת DTBO יכולה לשתף מפתח ציבורי עם מחיצת odm).

פרטים נוספים זמינים במאמר בנושא Verified Boot.