Kompilowanie i weryfikacja

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.

  1. Utwórz kopię nakładki .dts. Z kopii usuń w nagłówku pierwszego wiersza. Przykład:
    /dts-v1/;
    /plugin/;
    
    Zapisz plik jako my_overlay_dt_wo_header.dts (lub inną nazwę pliku).
  2. 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 jako my_main_dt_with_include.dts (lub inną nazwę pliku).
  3. 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
    
  4. Użyj dtc, aby zrobić zrzut my_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ć :

  1. Zidentyfikuj tablicę, na której działa, i wybierz odpowiednią które mają być zastosowane.
  2. 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, czy Init ma automatycznie skonfiguruj odpowiedni system ro.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";
	};
};