می توانید از کامپایلر درخت دستگاه (DTC) برای کامپایل فایل های منبع درختی دستگاه (DTS) استفاده کنید. با این حال، قبل از اعمال درخت دستگاه پوشش (DT) بر روی DT اصلی هدف، باید با شبیه سازی رفتار پوشش درخت دستگاه (DTO) نیز نتیجه را تأیید کنید.
کامپایل با DTC
هنگام استفاده از dtc برای کامپایل .dts ، باید گزینه -@ را اضافه کنید تا یک گره __symbols__ در .dtbo حاصل اضافه کنید. گره __symbols__ حاوی لیستی از تمام گره هایی است که با یک برچسب مشخص شده اند، که کتابخانه DTO می تواند برای مراجع استفاده کند.
نمونه دستور برای ساخت DT .dts اصلی:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
نمونه دستور برای ساخت همپوشانی DT .dts :
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
نتایج DTO را در هاست بررسی کنید
راستیآزمایی میتواند به شما در شناسایی خطاهایی که ممکن است هنگام قرار دادن DT روی DT اصلی رخ دهد، کمک کند. قبل از بهروزرسانی هدف، میتوانید با شبیهسازی رفتار DTO با استفاده از /include/ در .dts ، نتیجه همپوشانی DT روی میزبان را تأیید کنید.

شکل 1. از دستور /include/ برای شبیه سازی DTO در میزبان استفاده کنید.
- یک کپی از همپوشانی
.dtsایجاد کنید. در کپی، هدر خط اول را حذف کنید. مثال: فایل را به عنوان/dts-v1/; /plugin/;
my_overlay_dt_wo_header.dts(یا هر نام فایلی که می خواهید) ذخیره کنید. - یک کپی از
.dtsاصلی ایجاد کنید. در کپی، بعد از آخرین خط، دستور include را برای فایلی که در مرحله 1 ایجاد کردید اضافه کنید. به عنوان مثال: فایل را به عنوان/include/ "my_overlay_dt_wo_header.dts"
my_main_dt_with_include.dts(یا هر نام فایلی که می خواهید) ذخیره کنید. - از
dtcبرای کامپایلmy_main_dt_with_include.dtsاستفاده کنید تا DT ادغام شده را بدست آورید، که باید همان نتیجه DTO باشد. به عنوان مثال:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- از
dtcبرای حذفmy_merged_dt.dtoاستفاده کنید.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
DTO را در اندروید 9 تأیید کنید
اندروید 9 به یک پارتیشن پوششی حباب درختی دستگاه (DTBO) نیاز دارد. برای افزودن گره ها یا ایجاد تغییرات در ویژگی های SoC DT، بوت لودر باید به صورت پویا یک DT خاص دستگاه را روی SoC DT پوشش دهد.
پوشش های اعمال شده را نشان دهید
برای فعال کردن مجموعه تست فروشنده (VTS) برای ارزیابی درستی برنامه همپوشانی، فروشندگان باید یک پارامتر خط فرمان هسته جدید androidboot.dtbo_idx اضافه کنند که همپوشانی های انتخاب شده از پارتیشن DTBO را نشان می دهد. در اندروید 12 با استفاده از هسته نسخه 5.10 یا بالاتر، این پارامتر از طریق bootconfig عبور می کند. به عنوان مثال، پارامتر androidboot.dtbo_idx=x,y,z x ، y و z را به عنوان شاخصهای مبتنی بر صفر DTOها از پارتیشن DTBO اعمال شده (به ترتیب) توسط بوت لودر به DT پایه گزارش میکند.
همپوشانیها میتوانند روی گرههای DT اصلی اعمال شوند یا گرههای جدیدی اضافه کنند، اما نمیتوانند به گرهای که در همپوشانی قبلی اضافه شده است اشاره کنند. این محدودیت ضروری است زیرا برنامه همپوشانی جدول نمادهای همپوشانی را با جدول نمادهای اصلی DT ادغام نمی کند (ادغام نکردن از تداخل در نام نمادها و پیچیدگی وابستگی ها بین همپوشانی ها جلوگیری می کند).
مثال: همپوشانی نامعتبر
در این مثال، overlay_2.dts به گره e اشاره دارد که توسط overlay_1.dts اضافه شده است. پس از اعمال overlay_1 به DT اصلی، اگر تلاش برای اعمال overlay_2 به DT حاصل شود، برنامه همپوشانی با خطای عدم وجود نماد e در جدول نماد DT پایه شکست میخورد.
| main.dts | overlay_1.dts | overlay_2.dts |
|---|---|---|
[main.dts]
/dts-v1/;
/ {
a: a {};
b: b {};
c: c {};
};
|
[overlay_1.dts]
/dts-v1/;
/plugin/;
&b { ref1 = <&a>;
e: e {
prop = <0x0a>;
phandle = <0x04>;
};
};
|
[overlay_2.dts]
/dts-v1/;
/plugin/;
/* invalid! */
&e {
prop = <0x0b>;
};
|
مثال: همپوشانی های معتبر
در این مثال، overlay_2.dts فقط به گره b از DTS اصلی اشاره دارد. هنگامی که overlay_1 روی پایه DT اعمال می شود، سپس برنامه overlay_2 به دنبال آن اعمال می شود، مقدار ویژگی prop در گره e (تنظیم شده توسط overlay_1.dts ) با مقدار تنظیم شده توسط overlay_2.dts بازنویسی می شود.
| main.dts | overlay_1.dts | overlay_2.dts |
|---|---|---|
[final.dts]
/dts-v1/;
/ {
a: a {};
b: b {};
c: c {};
};
|
[overlay_1.dts]
/dts-v1/;
/plugin/;
&b { ref1 = <&a>;
e {
prop = <0x0c>;
};
};
|
[overlay_2.dts]
/dts-v1/;
/plugin/;
/* valid */
&b { ref1 = <&c>;
e {
prop = <0x0d>;
};
};
|
پارتیشن DTBO را پیاده سازی کنید
برای پیاده سازی پارتیشن DTBO مورد نیاز، مطمئن شوید که بوت لودر می تواند کارهای زیر را انجام دهد:
- بردی را که روی آن اجرا می شود شناسایی کنید و پوشش های مربوطه را برای اعمال انتخاب کنید.
- پارامتر
androidboot.dtbo_idxبه خط فرمان هسته اضافه کنید.- این پارامتر باید شاخصهای مبتنی بر صفر DTOها را از تصویر پارتیشن DTBO که روی DT پایه اعمال میکند (به همان ترتیب) نشان دهد.
- شاخص ها باید به موقعیت پوشش در پارتیشن DTBO اشاره کنند.
برای جزئیات بیشتر در مورد ساختار پارتیشن DTBO، به همپوشانی درخت دستگاه مراجعه کنید.
پارتیشن DTBO را اعتبار سنجی کنید
می توانید از VTS برای تأیید موارد زیر استفاده کنید:
- وجود پارامتر خط فرمان هسته
androidboot.dtbo_idx(با بررسی اینکهInitبه طور خودکار ویژگی سیستم مربوطهro.boot.dtbo_idxرا تنظیم کرده است). - اعتبار ویژگی سیستم
ro.boot.dtbo_idx(با بررسی اینکه این ویژگی حداقل یک شاخص تصویر DTBO معتبر را مشخص می کند). - اعتبار پارتیشن DTBO (همچنین همپوشانی های موجود در پارتیشن DTBO که روی DT پایه اعمال می شوند را تأیید می کند).
- گره های اضافی یا تغییرات ویژگی در DT حاصل به هسته لینوکس ارائه می شوند.
به عنوان مثال، در همپوشانیهای زیر و DT نهایی، افزودن androidboot.dtbo_idx=5,3 به خط فرمان کرنل اعتبارسنجی را انجام میدهد اما افزودن androidboot.dtbo_idx=3,5 به خط فرمان هسته اعتبارسنجی را تأیید نمیکند.
| پوشش DT در شاخص 3 | روکش DT در شاخص 5 |
|---|---|
[overlay_1.dts]
/dts-v1/;
/plugin/;
&c { prop = <0xfe>; };
|
[overlay_2.dts]
/dts-v1/;
/plugin/;
&c { prop = <0xff>; };
|
| DT نهایی |
|---|
/dts-v1/;
/ {
a {
phandle = <0x1>;
};
b {
phandle = <0x2>;
};
c {
phandle = <0x3>;
prop = <0xfe>;
};
__symbols__ {
a = "/a";
b = "/b";
c = "/c";
};
};
|
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-10-10 بهوقت ساعت هماهنگ جهانی.