Wdrażanie DTO

Implementacja DTO obejmuje podzielenie drzewa urządzeń, budowanie, partycjonowanie i uruchamianie. Po utworzeniu działającej implementacji należy także zachować kompatybilność pomiędzy dwoma identyfikatorami ID i określić strategię zapewnienia bezpieczeństwa każdej partycji ID.

Dzielenie DT

Zacznij od podzielenia drzewa urządzeń na dwie (2) części:

  • Główny ID . Część przeznaczona wyłącznie dla SoC i konfiguracje domyślne dostarczone przez dostawcę SoC.
  • Nakładka DT . Konfiguracje specyficzne dla urządzenia, dostarczone przez ODM/OEM.

Po podzieleniu drzew urządzeń należy zapewnić kompatybilność pomiędzy głównym ID a nałożonym ID, tak aby połączenie głównego ID i nałożonego ID dało w rezultacie kompletny ID urządzenia. Aby uzyskać szczegółowe informacje na temat formatu i reguł DTO, zobacz Składnia DTO . Aby uzyskać szczegółowe informacje na temat wielu drzew urządzeń, zobacz temat Wiele identyfikatorów ID .

Budowanie głównych i nakładkowych DT

Aby zbudować główny DT:

  1. Skompiluj główny plik DT .dts do pliku .dtb .
  2. Wgraj plik .dtb na partycję dostępną dla programu ładującego (szczegóły poniżej).

Aby zbudować nakładkę ID:

  1. Skompiluj nakładkę DT .dts do pliku .dtbo . Chociaż ten format pliku jest taki sam, jak plik .dtb sformatowany jako spłaszczone drzewo urządzeń, inne rozszerzenie pliku odróżnia go od głównego ID.
  2. Wgraj plik .dtbo na partycję dostępną dla programu ładującego (jak opisano poniżej).

Aby uzyskać szczegółowe informacje na temat kompilacji z kodem DTC i weryfikowania wyników DTO na hoście, zobacz Kompilowanie i weryfikacja .

Partycjonowanie ID

Określ dostępną i zaufaną lokalizację w pamięci flash programu ładującego, w której chcesz umieścić .dtb i .dtbo .

Przykładowe lokalizacje głównego DT:

  • Część partycji rozruchowej dołączona do jądra ( image.gz ).
  • Oddzielne obiekty blob DT ( .dtb ) na dedykowanej partycji ( dtb ).

Przykładowe lokalizacje nakładki ID:

Unikalna partycja
Rysunek 1. Umieść .dtbo na unikalnej partycji, np. partycji dtbo .
Partycja ODM
Rysunek 2. Umieść plik .dtbo na partycji odm (zrób to tylko wtedy, gdy twój bootloader ma możliwość załadowania danych z systemu plików partycji odm ).

Uwaga: Rozmiar nakładki partycji DT zależy od urządzenia i ilości zmian potrzebnych na głównym obiekcie blob DT. Zazwyczaj 8 MB jest więcej niż wystarczające i pozwala na rozbudowę w przyszłości, jeśli zajdzie taka potrzeba.

W przypadku urządzeń obsługujących płynne aktualizacje (A/B) , A/B główne partycje DT i nakładki DT:

Przykład 1
Rysunek 3. Partycja DTBO A/B, przykład 1.
Przykład 2
Rysunek 4. Partycja DTBO A/B, przykład 2.

Działa w bootloaderze

Biegać:

Rysunek 5. Typowa implementacja środowiska uruchomieniowego dla nakładki drzewa urządzeń w bootloaderze.
  1. Załaduj .dtb z pamięci do pamięci.
  2. Załaduj .dtbo z pamięci do pamięci.
  3. Nałóż .dtb na .dtbo , aby uzyskać połączony identyfikator ID.
  4. Uruchom jądro, biorąc pod uwagę adres pamięci połączonego ID.

Utrzymanie kompatybilności

Główny DTB (od dostawcy SoC) jest traktowany jako powierzchnia API dla DTBO. Po rozdzieleniu drzewa urządzeń na część wspólną SoC i część specyficzną dla urządzenia, w przyszłości należy zapewnić wzajemną kompatybilność obu części, w tym:

  • Definicja ID w głównym ID (np. węzły, właściwości, etykiety) . Jakakolwiek zmiana definicji w głównym ID może wywołać zmiany w nałożonym ID. Na przykład, aby poprawić nazwę węzła w głównym ID, zdefiniuj etykietę „alias” odwzorowującą oryginalną nazwę węzła (aby uniknąć zmiany nałożonego ID).
  • Nakładka lokalizacja magazynu DT (np. nazwa partycji, format zapisu) .

Zapewnienie bezpieczeństwa

Program ładujący musi zapewnić, że DTB/DTBO jest bezpieczne, niezmodyfikowane i nieuszkodzone. Możesz użyć dowolnego rozwiązania do zabezpieczenia DTB/DTBO, na przykład podpisu obrazu rozruchowego w VBoot 1.0 lub stopce AVB HASH (VBoot 2.0).

  • Jeśli DTB/DTBO znajduje się na unikalnej partycji, możesz dodać tę partycję do łańcucha zaufania AVB. Łańcuch zaufania rozpoczyna się od chronionego sprzętowo katalogu głównego zaufania i trafia do programu ładującego, który weryfikuje integralność i autentyczność partycji DTB/DTBO.
  • Jeśli DTB/DTBO znajduje się na istniejącej partycji (takiej jak partycja odm ), partycja ta powinna znajdować się w łańcuchu zaufania AVB. (Partycja DTBO może współdzielić klucz publiczny z partycją odm ).

Aby uzyskać szczegółowe informacje, zobacz Zweryfikowany rozruch .