Wdrażanie DTO

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Implementacja DTO obejmuje dzielenie drzewa urządzeń, budowanie, partycjonowanie i uruchamianie. Po utworzeniu działającej implementacji należy również zachować zgodność między dwoma identyfikatorami i określić strategię zapewnienia bezpieczeństwa każdej partycji identyfikatorów.

Dzielenie ID

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

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

Po podzieleniu drzew urządzeń należy zapewnić zgodność między głównym ID a nałożonym ID, aby połączenie głównego ID i nakładki ID dało 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 Wiele ID .

Budowanie głównych i nakładkowych DT

Aby zbudować główny ID:

  1. Skompiluj główny DT .dts do pliku .dtb .
  2. Zamień plik .dtb na partycję dostępną w środowisku uruchomieniowym programu rozruchowego (szczegóły poniżej).

Aby zbudować ID nakładki:

  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 DT.
  2. Zamień plik .dtbo na partycję dostępną w środowisku uruchomieniowym programu rozruchowego (jak opisano poniżej).

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

Identyfikatory partycjonowania

Określ zaufaną lokalizację dostępną dla środowiska uruchomieniowego programu rozruchowego w pamięci flash, aby umieścić .dtb i .dtbo .

Przykładowe lokalizacje dla głównego ID:

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

Przykładowe lokalizacje dla nakładki ID:

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

Uwaga: Rozmiar partycji nakładki 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 w razie potrzeby zwiększyć miejsce w przyszłości.

W przypadku urządzeń obsługujących aktualizacje bezproblemowe (A/B) , A/B główne partycje DT i nakładkowe partycje 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 runtime dla nakładki drzewa urządzeń w bootloaderze.
  1. Załaduj .dtb z magazynu do pamięci.
  2. Załaduj .dtbo z magazynu do pamięci.
  3. .dtb .dtb na .dtbo , aby był połączonym ID.
  4. Uruchom jądro podając adres pamięci scalonego identyfikatora.

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, należy zachować zgodność tych dwóch części w przyszłości, w tym:

  • Definicja ID w głównym ID (np. węzły, właściwości, etykiety) . Każda zmiana definicji w głównym ID może wywołać zmiany w nakładce ID. Na przykład, aby poprawić nazwę węzła w głównym ID, zdefiniuj etykietę „alias”, która odwzorowuje oryginalną nazwę węzła (aby uniknąć zmiany nakładki ID).
  • Nakładka lokalizacji magazynu DT (np. nazwa partycji, format magazynu) .

Zapewnienie bezpieczeństwa

Bootloader musi zapewnić, że DTB/DTBO jest bezpieczny, niezmodyfikowany i nieuszkodzony. Możesz użyć dowolnego rozwiązania, aby zabezpieczyć DTB/DTBO, na przykład podpis obrazu rozruchowego w VBoot 1.0 lub AVB HASH stopce (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 zaczyna się od chronionego sprzętowo źródła zaufania i przechodzi do programu ładującego, który weryfikuje integralność i autentyczność partycji DTB/DTBO.
  • Jeśli DTB/DTBO znajduje się w 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 .