Do kompilacji plików źródłowych drzewa urządzeń można użyć kompilatora drzewa urządzeń (DTC). Jednak przed zastosowaniem nakładki ID na docelowym głównym ID, należy również zweryfikować wynik, symulując zachowanie DTO.
Kompilowanie z DTC
Używając dtc
do kompilacji .dts
, musisz dodać opcję -@
, aby dodać węzeł __symbols__
w wynikowym .dtbo
. Węzeł __symbols__
zawiera listę wszystkich węzłów oznaczonych etykietą, do której biblioteka DTO może się odwoływać.
Przykładowe polecenie do zbudowania głównego DT .dts
:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Przykładowe polecenie do zbudowania nakładki DT .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Sprawdź wyniki DTO na hoście
Weryfikacja może pomóc w identyfikacji błędów, które mogą wystąpić podczas umieszczania nakładki ID na głównym ID. Przed aktualizacją celu możesz zweryfikować wynik nałożenia ID na hoście, symulując zachowanie DTO za pomocą /include/
w .dts
.
/include/
do symulacji DTO na hoście- Utwórz kopię nakładki
.dts
. W kopii usuń nagłówek pierwszego wiersza. Przykład:/dts-v1/; /plugin/;
Zapisz plik jakomy_overlay_dt_wo_header.dts
(lub dowolną nazwę pliku). - Utwórz kopię głównego
.dts
. W kopii, po ostatnim wierszu, dołącz składnię dołączania dla pliku utworzonego w kroku 1. Na przykład:/include/ "my_overlay_dt_wo_header.dts"
Zapisz plik jakomy_main_dt_with_include.dts
(lub dowolną nazwę pliku). - Użyj
dtc
, aby skompilowaćmy_main_dt_with_include.dts
, aby uzyskać scalony ID, który powinien mieć taki sam wynik jak DTO. Na przykład:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- Użyj
dtc
, aby zrzucićmy_merged_dt.dto
.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Weryfikacja DTO w Androidzie 9
Android 9 wymaga partycji nakładki obiektów blob drzewa urządzeń (DTBO). Aby dodać węzły lub wprowadzić zmiany we właściwościach w SoC DT, bootloader musi dynamicznie nakładać ID specyficzne dla urządzenia na SoC DT.
Wskazanie zastosowanych nakładek
Aby umożliwić Vendor Test Suite (VTS) ocenę poprawności aplikacji nakładki, dostawcy muszą dodać nowy parametr wiersza poleceń jądra androidboot.dtbo_idx
, który wskazuje nakładki wybrane z partycji DTBO. W systemie Android 12 korzystającym z jądra w wersji 5.10 lub nowszej ten parametr przechodzi przez bootconfig. Na przykład parametr androidboot.dtbo_idx=x,y,z
zgłasza x
, y
i z
jako liczone od zera indeksy nakładek drzewa urządzeń (DTO) z partycji DTBO zastosowanej (w tej kolejności) przez bootloader do bazy Drzewo urządzeń (DT).
Nakładki mogą dotyczyć węzłów z głównego drzewa urządzenia lub dodawać nowe węzły, ale nie mogą odnosić się do węzła dodanego w poprzedniej nakładce. To ograniczenie jest konieczne, ponieważ aplikacja nakładki nie łączy tablicy symboli nakładek z główną tablicą symboli DT (brak łączenia pozwala uniknąć konfliktów w nazwach symboli i komplikacji zależności między nakładkami).
Przykład: nieprawidłowe nakładki
W tym przykładzie overlay_2.dts
odnosi się do węzła e
, który został dodany przez overlay_1.dts
. Po zastosowaniu overlay_1
do głównego ID, jeśli zostanie podjęta próba zastosowania overlay_2
do wynikowego ID, aplikacja nakładki zakończy się niepowodzeniem z błędem, że symbol e
nie jest obecny w tablicy symboli dla podstawowego ID.
main.dts | nakładka_1.dts | nakładka_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>; }; |
Przykład: prawidłowe nakładki
W tym przykładzie overlay_2.dts
odnosi się tylko do węzła b
z głównego DTS. Kiedy overlay_1
jest stosowany do podstawowego ID, a następnie nakładany jest overlay_2
, wartość właściwości prop
w węźle e
(ustawiona przez overlay_1.dts
) jest zastępowana wartością ustawioną przez overlay_2.dts
.
main.dts | nakładka_1.dts | nakładka_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>; }; }; |
Wdrożenie partycji DTBO
Aby zaimplementować wymaganą partycję DTBO, upewnij się, że bootloader może wykonać następujące czynności:
- Zidentyfikuj płytę, na której działa, i wybierz odpowiednią nakładkę (nakładki), którą chcesz zastosować.
- Dołącz parametr
androidboot.dtbo_idx
do wiersza polecenia jądra.- Parametr musi wskazywać liczone od zera indeksy DTO z obrazu partycji DTBO zastosowane do podstawowego ID (w tej samej kolejności).
- Indeksy muszą odnosić się do pozycji nakładki w partycji DTBO.
Szczegółowe informacje na temat struktury partycji DTBO można znaleźć w sekcji Nakładki drzewa urządzeń na stronie source.android.com.
Walidacja partycji DTBO
Za pomocą VTS można zweryfikować:
- Istnienie parametru wiersza poleceń jądra
androidboot.dtbo_idx
(poprzez sprawdzenie, czyInit
automatycznie ustawił odpowiednią właściwość systemowąro.boot.dtbo_idx
). - Poprawność właściwości systemowej
ro.boot.dtbo_idx
(poprzez sprawdzenie, czy właściwość określa co najmniej jeden prawidłowy indeks obrazu DTBO). - Ważność partycji DTBO (sprawdza również nakładki w partycji DTBO, które są stosowane do podstawowego DT).
- Dodatkowe węzły lub zmiany właściwości w wynikowym DT są prezentowane jądru Linux.
Na przykład w poniższych nakładkach i ostatecznym DT dodanie androidboot.dtbo_idx=5,3
do wiersza poleceń jądra przechodzi weryfikację, ale dodanie androidboot.dtbo_idx=3,5
do wiersza poleceń jądra nie przechodzi walidacji.
Nakładka ID przy indeksie 3 | Nakładka ID przy indeksie 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; | [overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
Końcowy ID |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2022-09-07 UTC.