Do skompilowania źródła drzewa urządzenia (DTS) możesz użyć kompilacji drzewa urządzeń (DTC). . Jednak przed zastosowaniem nakładanego drzewa urządzenia (DT) do docelowego głównego przenoszenia danych trzeba powinien również zweryfikować wynik, symulując działanie nakładki drzewa urządzenia (DTO).
Kompilowanie z DTC
Jeśli używasz narzędzia dtc
do skompilowania pliku .dts
, musisz dodać element
opcję -@
, aby dodać węzeł __symbols__
w
w wyniku: .dtbo
. Węzeł __symbols__
zawiera element
lista wszystkich węzłów oznaczonych etykietą, której może użyć biblioteka DTO
pod kątem plików referencyjnych.
Przykładowe polecenie do utworzenia głównego pliku przenoszenia danych .dts
:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Przykładowe polecenie do tworzenia nakładki DT .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Sprawdź wyniki nakładek drzewa urządzeń na hoście
Weryfikacja może pomóc w wykrywaniu błędów, które mogą wystąpić przy umieszczaniu
w nakładce na głównym pliku przenoszenia danych. Zanim zaktualizujesz wartość docelową, możesz sprawdzić
nałożenie przenoszenia danych na hoście przez symulowanie zachowania DTO przy użyciu
/include/
w .dts
.
Rysunek 1. Użyj składni /include/, aby zasymulować DTO na hoście.
- Utwórz kopię nakładki
.dts
. Z kopii usuń w nagłówku pierwszego wiersza. Przykład:/dts-v1/; /plugin/;
Zapisz plik jakomy_overlay_dt_wo_header.dts
(lub inną nazwę pliku). - Utwórz kopię głównego dokumentu
.dts
. W kopii, po tagu ostatni wiersz, dołącz składnię include 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 inną nazwę pliku). - Do skompilowania użyj narzędzia
dtc
my_main_dt_with_include.dts
, aby pobrać scalony plik przenoszenia danych, który powinien będzie taki sam jak w przypadku nakładek drzewa urządzeń. Na przykład:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- Użyj
dtc
, aby zrobić zrzutmy_merged_dt.dto
.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Weryfikacja podmiotu zajmującego się handlem narkotykami w Androidzie 9
Android 9 wymaga nakładki blob drzewa urządzenia (DTBO). Aby dodawać węzły lub wprowadzać zmiany we właściwościach w SOC DT, program rozruchowy musi dynamicznie nakładać pliki przenoszenia danych specyficzne dla urządzenia SoC DT.
Wskazywanie zastosowanych nakładek
Aby włączyć funkcję
Vendor Test Suite (VTS) do oceny poprawności nakładki.
aplikacja, dostawcy muszą dodać nowy parametr wiersza poleceń jądra
androidboot.dtbo_idx
, który wskazuje nakładki wybrane z
partycji DTBO. Android 12 z wersją jądra
w wersji 5.10 lub nowszej, ten parametr przechodzi przez konfigurację rozruchową.
Na przykład parametr androidboot.dtbo_idx=x,y,z
raportuje
x
, y
i z
jako indeksy liczone od zera dla
DTO z zastosowanej partycji DTBO (w tej kolejności)
przez program rozruchowy do podstawowego pliku przenoszenia danych.
Nakładki można stosować do węzłów z głównego przenoszenia danych lub dodawać nowe węzły, ale nie może odnosić się do węzła dodanego w poprzedniej nakładce. Ten konieczne jest ograniczenie, ponieważ nakładka nie scala tabela symboli nakładanych z główną tabelą symboli DT (brak scalania pozwala uniknąć konflikty nazw symboli i złożoności zależności między nakładki).
Przykład: nieprawidłowe nakładki
W tym przykładzie overlay_2.dts
odnosi się do węzła
e
, która została dodana przez
overlay_1.dts
. Po zastosowaniu parametru overlay_1
do
głównego przenoszenia danych, jeśli zostanie podjęta próba zastosowania parametru overlay_2
do
w wyniku przenoszenia danych, aplikacja do nakładek kończy działanie i pojawia się błąd, który oznacza,
e
nie występuje w tabeli symboli dla
DT.
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
Funkcja overlay_1
jest stosowana do podstawowego przenoszenia danych, a po niej następuje
aplikacja overlay_2
, wartość właściwości
prop
w węźle e
(ustawione przez overlay_1.dts
) zostanie zastąpione 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>; }; }; |
Wdróż partycję DTBO
Aby wdrożyć wymaganą partycję DTBO, upewnij się, że program rozruchowy może wykonać :
- Zidentyfikuj tablicę, na której działa, i wybierz odpowiednią które mają być zastosowane.
- Dołącz parametr
androidboot.dtbo_idx
do jądra systemu wiersza poleceń.- Parametr musi wskazywać indeksy nakładek drzewa urządzeń od zera. z obrazu partycji DTBO zastosowanego do podstawowego przenoszenia danych (w tym samym zamówienie).
- Indeksy muszą odnosić się do pozycji nakładki w DTBO. partycji danych.
Szczegółowe informacje o strukturze partycji DTBO znajdziesz w sekcji Nakładki drzewa urządzeń.
Zweryfikuj partycję DTBO
Za pomocą VTS możesz sprawdzić, czy:
- Obecność parametru wiersza poleceń jądra
androidboot.dtbo_idx
(sprawdzając, czyInit
ma automatycznie skonfiguruj odpowiedni systemro.boot.dtbo_idx
). - Ważność właściwości systemowej
ro.boot.dtbo_idx
(do sprawdzając, czy właściwość określa co najmniej jeden prawidłowy obraz DTBO. ). - Prawidłowość partycji DTBO (weryfikacja nakładek w DTBO). zastosowane do podstawowego przenoszenia danych).
- Wyświetlane są dodatkowe węzły lub zmiany właściwości w powstałym pliku przenoszenia danych. do jądra systemu Linux.
Na przykład w poniższych nakładkach i w ostatnim pliku przenoszenia danych dodanie
Kody androidboot.dtbo_idx=5,3
do wiersza poleceń jądra
ale dodanie androidboot.dtbo_idx=3,5
do jądra
nie przeszedł weryfikacji.
Nakładka DT w indeksie 3 | Nakładka DT w indeksie 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; |
[overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
Końcowy DT |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |