پیاده‌سازی DTO

پیاده‌سازی هم‌پوشانی‌های ساختار درختی دستگاه (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 اصلی:

  1. DT اصلی .dts را در فایل .dtb کامپایل کنید.
  2. فایل .dtb را در پارتیشنی که در زمان اجرای بارکننده قابل‌دسترسی است فلش کنید (جزئیات در [Partition DTs](#partition)).

برای ساختن DT رونهاد:

  1. ‫DT رونهاد .dts را در فایل .dtbo گردآوری کنید. اگرچه این قالب فایل با فایل .dtb که به‌عنوان DT مسطح قالب‌بندی شده است یکسان است، اما پسوند فایل متفاوت آن را از DT اصلی متمایز می‌کند.
  2. فایل .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.

  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 یا AVB پانویس HASH (VBoot 2.0).

  • اگر DTB یا DTBO در بخش منحصربه‌فردی باشد، می‌توانید آن بخش را به زنجیره اعتماد AVB اضافه کنید. زنجیره اعتماد از ریشه اعتماد محافظت‌شده با سخت‌افزار شروع می‌شود و به bootloader می‌رسد که تمامیت و اصالت پارتیشن DTB یا DTBO را درستی‌سنجی می‌کند.
  • اگر DTB یا DTBO در پارتیشن موجودی (مثل پارتیشن odm باشد)، آن پارتیشن باید در زنجیره اعتماد AVB باشد. (پارتیشن DTBO می‌تواند کلید عمومی را با پارتیشن odm هم‌رسانی کند).

برای جزئیات بیشتر، به راه‌اندازی درستی‌سنجی‌شده مراجعه کنید.