Do kompilowania plików źródłowych drzewa urządzeń można użyć kompilatora drzewa urządzeń (DTC). Jednakże przed nałożeniem nakładki ID na docelowy główny ID należy również zweryfikować wynik poprzez symulację zachowania DTO.
Kompilacja 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ą, których biblioteka DTO może używać jako odniesień.
Przykładowe polecenie do zbudowania głównego pliku 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 zidentyfikowaniu błędów, które mogą wystąpić podczas umieszczania nakładki ID na głównym ID. Przed aktualizacją celu możesz sprawdzić wynik nałożenia DT 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 pod nazwąmy_overlay_dt_wo_header.dts
(lub dowolną inną nazwą). - Utwórz kopię głównego
.dts
. W kopii po ostatniej linii dołącz składnię dołączania 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ą inną nazwę). - Użyj
dtc
do skompilowaniamy_main_dt_with_include.dts
, aby uzyskać połączony identyfikator ID, który powinien być takim samym wynikiem jak DTO. Na przykład:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- Użyj
dtc
, aby zrzucić plikmy_merged_dt.dto
.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Weryfikacja DTO w Androidzie 9
Android 9 wymaga partycji Device Tree Blob Overlay (DTBO). Aby dodać węzły lub wprowadzić zmiany we właściwościach SoC DT, program ładujący musi dynamicznie nakładać identyfikator specyficzny dla urządzenia na identyfikator SoC DT.
Wskazanie zastosowanych nakładek
Aby umożliwić Vendor Test Suite (VTS) ocenę poprawności aplikacji nakładek, 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
raportuje x
z
y
indeksy od zera nakładek drzewa urządzeń (DTO) z partycji DTBO zastosowane (w tej kolejności) przez program ładujący do bazy Drzewo urządzeń (DT).
Nakładki mogą dotyczyć węzłów z głównego drzewa urządzeń 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 tabeli symboli nakładki z główną tablicą symboli ID (niescalanie pozwala uniknąć konfliktów w nazwach symboli i komplikacji zależności pomię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
. Jeśli po nałożeniu overlay_1
na główny ID zostanie podjęta próba zastosowania overlay_2
na powstałym ID, aplikacja nakładki zakończy się niepowodzeniem z powodu błędu polegającego na tym, że symbolu e
nie ma w tablicy symboli podstawowego ID.
główne.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
zostanie zastosowany do bazowego ID, a następnie zostanie zastosowany overlay_2
, wartość właściwości prop
w węźle e
(ustawiona przez overlay_1.dts
) zostanie nadpisana przez wartość ustawioną przez overlay_2.dts
.
główne.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>; }; }; |
Implementacja partycji DTBO
Aby zaimplementować wymaganą partycję DTBO, upewnij się, że program ładujący może wykonać następujące czynności:
- Zidentyfikuj płytę, na której działa, i wybierz odpowiednią nakładkę(-y), która ma zostać zastosowana.
- Dołącz parametr
androidboot.dtbo_idx
do wiersza poleceń jądra.- Parametr musi wskazywać od zera indeksy DTO z obrazu partycji DTBO zastosowanego do podstawowego ID (w tej samej kolejności).
- Indeksy muszą odnosić się do położenia nakładki w przegrodzie DTBO.
Szczegółowe informacje na temat struktury partycji DTBO można znaleźć w artykule Nakładki drzewa urządzeń na stronie source.android.com.
Sprawdzanie poprawności partycji DTBO
Możesz użyć VTS, aby zweryfikować następujące kwestie:
- Istnienie parametru wiersza poleceń jądra
androidboot.dtbo_idx
(poprzez sprawdzenie, czyInit
automatycznie skonfigurował odpowiednią właściwość systemowąro.boot.dtbo_idx
). - Ważność właściwości systemowej
ro.boot.dtbo_idx
(poprzez sprawdzenie, czy właściwość określa przynajmniej jeden ważny indeks obrazu DTBO). - Ważność partycji DTBO (weryfikuje również nakładki w partycji DTBO, które są stosowane do bazowego DT).
- Dodatkowe węzły lub zmiany właściwości w powstałym ID są prezentowane jądru Linuksa.
Na przykład w poniższych nakładkach i ostatecznym DT dodanie androidboot.dtbo_idx=5,3
do linii poleceń jądra przechodzi weryfikację, ale dodanie androidboot.dtbo_idx=3,5
do linii poleceń jądra nie przechodzi walidacji.
Nakładka DT przy indeksie 3 | Nakładka DT przy indeksie 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; | [overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
Ostateczny DT |
---|
/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: 2024-04-29 UTC.