شما می توانید از Device Tree Compiler (DTC) برای کامپایل فایل های Device Tree Source استفاده کنید. با این حال، قبل از اعمال همپوشانی 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 روی میزبان را تأیید کنید.
/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 به یک پارتیشن Device Tree Blob Overlay (DTBO) نیاز دارد. برای افزودن گره ها یا ایجاد تغییراتی در خصوصیات در SoC DT، بوت لودر باید به صورت پویا یک DT خاص دستگاه را روی SoC DT پوشش دهد.
نشان دادن پوشش های اعمال شده
برای فعال کردن مجموعه تست فروشنده (VTS) برای ارزیابی صحت برنامه همپوشانی، فروشندگان باید یک پارامتر خط فرمان هسته جدید androidboot.dtbo_idx
اضافه کنند که همپوشانی های انتخاب شده از پارتیشن DTBO را نشان می دهد. در اندروید 12 با استفاده از کرنل نسخه 5.10 یا بالاتر، این پارامتر از طریق bootconfig عبور می کند. برای مثال، پارامتر androidboot.dtbo_idx=x,y,z
x
، y
و z
را به عنوان شاخصهای مبتنی بر صفر Device Tree Overlays (DTOs) از پارتیشن DTBO اعمال شده (به ترتیب) توسط بوت لودر به پایه گزارش میکند. درخت دستگاه (DT).
همپوشانیها میتوانند روی گرههای درخت اصلی دستگاه اعمال شوند یا گرههای جدیدی اضافه کنند، اما نمیتوانند به گره اضافهشده در همپوشانی قبلی اشاره کنند. این محدودیت ضروری است زیرا برنامه همپوشانی جدول نمادهای همپوشانی را با جدول نماد اصلی DT ادغام نمی کند (ادغام نکردن از تضاد در نام نمادها و پیچیدگی وابستگی ها بین همپوشانی ها جلوگیری می کند).
مثال: همپوشانی نامعتبر
در این مثال، overlay_2.dts
به گره e
اشاره دارد که توسط overlay_1.dts
اضافه شده است. پس از اعمال overlay_1
به DT اصلی، اگر تلاش شود overlay_2
روی DT حاصل اعمال شود، برنامه overlay با خطای عدم وجود نماد 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، به Device Tree Overlays در source.android.com مراجعه کنید.
اعتبار سنجی پارتیشن 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 و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2022-09-07 بهوقت ساعت هماهنگ جهانی.