پیادهسازی همپوشانیهای درخت دستگاه (DTO) شامل تقسیم درخت دستگاه (DT)، ساخت، پارتیشنبندی و اجرا است. پس از اینکه یک پیادهسازی کارآمد داشتید، باید سازگاری بین دو DT را نیز حفظ کنید و یک استراتژی برای تضمین امنیت هر پارتیشن DT تعیین کنید.
تقسیم DT
با تقسیم DT به دو قسمت شروع کنید:
- DT اصلی . بخش مخصوص SoC و پیکربندیهای پیشفرض، ارائه شده توسط فروشنده SoC.
- Overlay DT . پیکربندیهای خاص دستگاه، ارائه شده توسط ODM/OEM.
پس از تقسیم DTها، باید از سازگاری بین DT اصلی و DT پوششی اطمینان حاصل کنید تا ادغام DT اصلی و DT پوششی منجر به یک DT کامل برای دستگاه شود. برای جزئیات بیشتر در مورد قالب و قوانین DTO، به نحو DTO مراجعه کنید. برای جزئیات بیشتر در مورد چندین DT، به استفاده از چندین DT مراجعه کنید.
ساخت DT های اصلی و پوششی
برای ساخت DT اصلی:
-
.dtsاصلی را به یک فایل.dtbکامپایل کنید. - فایل
.dtbرا در یک پارتیشن قابل دسترسی در زمان اجرا توسط بوت لودر فلش کنید (جزئیات بیشتر در [Partition DTs](#partition) آمده است).
برای ساخت DT روکش:
- فایل DT
.dtsرویی را به یک فایل.dtboکامپایل کنید. اگرچه این فرمت فایل مشابه فایل.dtbاست که به صورت یک DT مسطح فرمت شده است، اما پسوند فایل متفاوت آن را از DT اصلی متمایز میکند. - فایل
.dtboرا در یک پارتیشن قابل دسترسی در زمان اجرا توسط بوت لودر فلش کنید (جزئیات بیشتر در [Partition DTs](#partition) آمده است).
برای جزئیات بیشتر در مورد کامپایل با DTC و تأیید نتایج DTO در میزبان، به Compile and verify مراجعه کنید.
DT های پارتیشن
یک مکان قابل اعتماد و قابل دسترسی در زمان اجرای بوت لودر را در حافظه فلش برای قرار دادن فایلهای .dtb و .dtbo تعیین کنید.
مکانهای نمونه برای DT اصلی:
- بخشی از پارتیشن بوت، ضمیمه شده به هسته (
image.gz) - حبابهای DT (
.dtb) را در پارتیشن اختصاصی (dtb) جدا کنید
مکانهای نمونه برای روکش DT:

شکل ۱. فایل .dtbo را در یک پارتیشن odm قرار دهید (این کار را فقط در صورتی انجام دهید که بوت لودر شما قابلیت بارگذاری دادهها از سیستم فایل یک پارتیشن odm را داشته باشد).

شکل ۲. فایل .dtbo را در یک پارتیشن منحصر به فرد، مانند پارتیشن dtbo، قرار دهید.
نکته: اندازه پارتیشن DT رویی به دستگاه و میزان تغییرات مورد نیاز روی DT blob اصلی بستگی دارد. معمولاً ۸ مگابایت بیش از حد کافی است و در صورت نیاز، امکان افزایش آن در آینده وجود دارد.
برای دستگاههایی که از بهروزرسانیهای یکپارچه (A/B) پشتیبانی میکنند، پارتیشنهای DT اصلی و DT پوششی A/B:

شکل ۳. پارتیشن DTBO A/B، مثال ۱.

شکل ۴. پارتیشن DTBO A/B، مثال ۲.
اجرا در بوت لودر
برای اجرا:

شکل ۵. پیادهسازی معمول زمان اجرا برای DTO در بوتلودر.
- فایل
.dtb را از حافظه به حافظه بارگذاری میکند. - فایل
.dtbo را از حافظه داخلی به حافظه بارگذاری میکند. - فایل
.dtb را با.dtbo همپوشانی کنید تا یک فایل DT ادغامشده باشد. - هسته را با توجه به آدرس حافظه DT ادغام شده شروع کنید.
حفظ سازگاری
DTB اصلی (از فروشنده SoC) به عنوان یک سطح API برای DTBOها در نظر گرفته میشود. پس از تفکیک DT به یک بخش مشترک SoC و یک بخش مختص دستگاه، باید این دو بخش را در آینده با هم سازگار نگه دارید، از جمله:
- تعریف DT در DT اصلی. به عنوان مثال، گرهها، ویژگیها، برچسبها. هرگونه تغییر در تعریف DT اصلی میتواند باعث ایجاد تغییراتی در DT پوششی شود. به عنوان مثال، برای اصلاح نام گره در DT اصلی، یک برچسب "نام مستعار" تعریف کنید که به نام گره اصلی نگاشت شود (برای جلوگیری از تغییر DT پوششی).
- محل ذخیره DT را روی هم قرار دهید. به عنوان مثال، نام پارتیشن، قالب ذخیره.
تضمین امنیت
بوت لودر باید اطمینان حاصل کند که DTB یا DTBO ایمن، بدون تغییر و بدون خرابی است. شما میتوانید از هر راهکاری برای ایمنسازی DTB یا DTBO استفاده کنید، به عنوان مثال، امضای تصویر بوت در VBoot 1.0 یا پاورقی AVB HASH (VBoot 2.0).
- اگر DTB یا DTBO در یک پارتیشن منحصر به فرد باشد، میتوانید آن پارتیشن را به زنجیره اعتماد AVB اضافه کنید. زنجیره اعتماد از یک ریشه اعتماد محافظتشده توسط سختافزار شروع میشود و به بوتلودر میرود که یکپارچگی و اصالت پارتیشن DTB یا DTBO را تأیید میکند.
- اگر DTB یا DTBO در یک پارتیشن موجود (مانند پارتیشن
odm) باشد، آن پارتیشن باید در زنجیره اعتماد AVB باشد. (پارتیشن DTBO میتواند یک کلید عمومی را با پارتیشنodmبه اشتراک بگذارد).
برای جزئیات بیشتر، به Verified Boot مراجعه کنید.