הטמעת DTO

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

מחלקים את ה-DT

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

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

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

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

מחיצות של טבלאות העברת נתונים

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

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

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

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

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

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

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

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

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

איור 4. מחיצה A/B של DTBO, דוגמה 2.

הפעלה בתוכנת האתחול

כדי להריץ:

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

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

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

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

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

שמירה על אבטחה

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

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

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