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

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

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

شکل ۳. بخش DTBO A/B، مثال ۱.

شکل ۴. بخش DTBO A/B، مثال ۲.
اجرا در راهانداز سیستم
برای اجرا کردن:

شکل ۵. پیادهسازی زمان اجرای معمول برای DTO در bootloader.
-
.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 اضافه کنید. زنجیره اعتماد از ریشه اعتماد محافظتشده با سختافزار شروع میشود و به bootloader میرسد که تمامیت و اصالت پارتیشن DTB یا DTBO را درستیسنجی میکند.
- اگر DTB یا DTBO در پارتیشن موجودی (مثل پارتیشن
odmباشد)، آن پارتیشن باید در زنجیره اعتماد AVB باشد. (پارتیشن DTBO میتواند کلید عمومی را با پارتیشنodmهمرسانی کند).
برای جزئیات بیشتر، به راهاندازی درستیسنجیشده مراجعه کنید.