می توانید از کامپایلر درخت دستگاه (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 و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2024-11-18 بهوقت ساعت هماهنگ جهانی.