Wdrażanie nakładek drzewa urządzeń

Wdrażanie nakładek drzewa urządzeń (DTO) obejmuje dzielenie drzewa urządzeń (DT), jego kompilowanie, dzielenie na partycje i uruchamianie. Po wdrożeniu działającego rozwiązania musisz też zachować zgodność między 2 drzewami urządzeń i określić strategię zapewniania bezpieczeństwa każdej partycji DT.

Dzielenie drzewa urządzeń

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

  • Główne drzewo urządzeń. Część dotycząca tylko układu SoC i konfiguracje domyślne dostarczane przez dostawcę układu SoC.
  • Nakładka drzewa urządzeń. Konfiguracje dotyczące konkretnych urządzeń dostarczane przez ODM/OEM.

Po podzieleniu drzew urządzeń musisz zapewnić zgodność między głównym drzewem urządzeń a nakładką drzewa urządzeń, aby scalenie tych 2 drzew urządzeń dało kompletne drzewo urządzeń dla urządzenia. Szczegółowe informacje o formacie i regułach DTO znajdziesz w artykule Składnia DTO. Więcej informacji o wielu drzewach urządzeń znajdziesz w artykule Używanie wielu drzew urządzeń.

Kompilowanie głównego drzewa urządzeń i nakładki drzewa urządzeń

Aby skompilować główne drzewo urządzeń:

  1. Skompiluj główne drzewo urządzeń .dts do pliku .dtb.
  2. Wgraj plik .dtb do partycji dostępnej w czasie działania programu ładującego (szczegóły znajdziesz w sekcji [Dzielenie drzew urządzeń na partycje](#partition)).

Aby skompilować nakładkę drzewa urządzeń:

  1. Skompiluj nakładkę drzewa urządzeń .dts do pliku .dtbo. Format tego pliku jest taki sam jak pliku .dtb sformatowanego jako spłaszczone drzewo urządzeń, ale inne rozszerzenie odróżnia go od głównego drzewa urządzeń.
  2. Wgraj plik .dtbo do partycji dostępnej w czasie działania programu ładującego (szczegóły znajdziesz w sekcji [Dzielenie drzew urządzeń na partycje](#partition)).

Szczegółowe informacje o kompilowaniu za pomocą DTC i sprawdzaniu wyników DTO na hoście znajdziesz w artykule Kompilowanie i weryfikowanie.

Dzielenie drzew urządzeń na partycje

Określ lokalizację w pamięci flash , która jest dostępna w czasie działania programu ładującego i zaufana, aby umieścić w niej pliki .dtb i .dtbo.

Przykładowe lokalizacje głównego drzewa urządzeń:

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

Przykładowe lokalizacje nakładki drzewa urządzeń:

Rysunek 1. Umieść plik .dtbo na partycji ODM (zrób to tylko wtedy, gdy program rozruchowy ma możliwość wczytywania danych z systemu plików partycji ODM).

Rysunek 2. Umieść plik .dtbo na unikalnej partycji, np. partycji dtbo.

Uwaga: rozmiar partycji nakładki drzewa urządzeń zależy od urządzenia i liczby zmian, które trzeba wprowadzić w obiekcie blob głównego drzewa urządzeń. Zwykle 8 MB to wystarczająca ilość miejsca, która w razie potrzeby pozwoli na dalszy rozwój.

W przypadku urządzeń, które obsługują bezproblemowe aktualizacje (A/B), podziel na partycje A/B główne drzewo urządzeń i nakładkę drzewa urządzeń:

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

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

Uruchamianie w programie ładującym

Aby uruchomić:

Rysunek 5. Typowe wdrożenie DTO w środowisku wykonawczym programu rozruchowego.

  1. Wczytaj plik .dtb z pamięci masowej do pamięci.
  2. Wczytaj plik .dtbo z pamięci masowej do pamięci.
  3. Nałóż plik .dtbo na plik .dtb, aby uzyskać scalone drzewo urządzeń.
  4. Uruchom jądro, podając adres pamięci scalonego drzewa urządzeń.

Zachowywanie zgodności

Główne drzewo urządzeń (od dostawcy układu SoC) jest traktowane jako powierzchnia API dla plików DTBO. Po podzieleniu drzewa urządzeń na część wspólną dla układu SoC i część dotyczącą konkretnego urządzenia musisz w przyszłości zachować wzajemną zgodność tych 2 części, w tym:

  • Definicja drzewa urządzeń w głównym drzewie urządzeń. Na przykład węzły, właściwości, etykiety. Każda zmiana definicji w głównym drzewie urządzeń może spowodować zmiany w nakładce drzewa urządzeń. Aby na przykład poprawić nazwę węzła w głównym drzewie urządzeń, zdefiniuj etykietę „alias”, która będzie mapować na oryginalną nazwę węzła (aby uniknąć zmiany nakładki drzewa urządzeń).
  • Lokalizacja przechowywania nakładki drzewa urządzeń. Na przykład nazwa partycji, format przechowywania.

Zapewnianie bezpieczeństwa

Program rozruchowy musi zapewnić, że plik DTB lub DTBO jest bezpieczny, niezmodyfikowany i nieuszkodzony. Możesz użyć dowolnego rozwiązania do zabezpieczenia pliku DTB lub DTBO, np. podpisu obrazu rozruchowego w VBoot 1.0 lub stopki AVB HASH (VBoot 2.0).

  • Jeśli plik DTB lub 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 głównego źródła zaufania i prowadzi do programu rozruchowego, który weryfikuje integralność i autentyczność partycji DTB lub DTBO.
  • Jeśli plik DTB lub DTBO znajduje się na istniejącej partycji (np. partycji odm), ta partycja powinna znajdować się w łańcuchu zaufania AVB. (Partycja DTBO może współdzielić klucz publiczny z partycją odm).

Więcej informacji znajdziesz w artykule Weryfikacja podczas uruchamiania.