Wdrażanie nakładek drzewa urządzenia (DTO) obejmuje dzielenie drzewa urządzenia (DT), tworzenie, partycjonowanie i uruchamianie. Po wdrożeniu działającego rozwiązania musisz też zachować zgodność między tymi dwoma DT i określić strategię zapewniania bezpieczeństwa każdej partycji DT.
Podziel DT
Zacznij od podzielenia DT na 2 części:
- Główny DT Część tylko z układem SoC i konfiguracje domyślne, dostarczone przez dostawcę układu SoC.
- Nakładka DT Konfiguracje dotyczące konkretnych urządzeń dostarczane przez ODM/OEM.
Po podzieleniu drzew urządzeń musisz zadbać o kompatybilność między głównym drzewem urządzeń a nakładką drzewa urządzeń, aby scalenie głównego drzewa urządzeń i nakładki drzewa 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 DT znajdziesz w artykule Używanie wielu DT.
Tworzenie głównych i nakładkowych DT
Aby utworzyć główny DT:
- Skompiluj główny DT
.dts
do pliku.dtb
. - Wgraj plik
.dtb
do partycji dostępnej w czasie działania programu rozruchowego (szczegóły w sekcji [Partition DTs](#partition)).
Aby utworzyć nakładkę DT:
- Skompiluj nakładkę DT
.dts
do pliku.dtbo
. Ten format pliku jest taki sam jak plik.dtb
sformatowany jako spłaszczony DT, ale inne rozszerzenie odróżnia go od głównego DT. - Wgraj plik
.dtbo
do partycji dostępnej w czasie działania programu rozruchowego (szczegóły w sekcji [Partition DTs](#partition)).
Szczegółowe informacje o kompilowaniu za pomocą DTC i sprawdzaniu wyników nakładek drzewa urządzeń na hoście znajdziesz w sekcji Kompilowanie i sprawdzanie.
Partycje DT
Określ lokalizację w pamięci flash, do której program rozruchowy ma dostęp w czasie działania i która jest zaufana, aby umieścić w niej .dtb
i .dtbo
.
Przykładowe lokalizacje głównego DT:
- Część partycji rozruchowej dołączona do jądra (
image.gz
) - Oddzielne obiekty DT (
.dtb
) w wydzielonej partycji (dtb
)
Przykładowe lokalizacje nakładki DT:
Rysunek 1. Umieść plik .dtbo na partycji odm (zrób to tylko wtedy, gdy program rozruchowy może wczytywać dane z systemu plików partycji odm).
Rysunek 2. Umieść plik .dtbo w unikalnej partycji, np. partycji dtbo.
Uwaga: rozmiar partycji DT nakładki zależy od urządzenia i liczby zmian, które należy wprowadzić w głównym pliku binarnym DT. Zwykle 8 MB to więcej niż wystarczająco, a w razie potrzeby w przyszłości można zwiększyć ten limit.
W przypadku urządzeń obsługujących płynne aktualizacje (A/B) przeprowadź test A/B głównych partycji DT i nakładki DT:
Rysunek 3. Partycja DTBO A/B, przykład 1.
Rysunek 4. Partycja DTBO A/B, przykład 2.
Uruchom w programie rozruchowym
Aby uruchomić:
Rysunek 5. Typowa implementacja środowiska wykonawczego nakładek drzewa urządzeń w programie rozruchowym.
- Wczytaj
.dtb
z pamięci masowej do pamięci. - Wczytaj
.dtbo
z pamięci masowej do pamięci. - Nałóż
.dtb
na.dtbo
, aby uzyskać scalone drzewo urządzeń. - Uruchom jądro, podając adres pamięci scalonego DT.
Zachowanie zgodności
Główny DTB (od dostawcy SoC) jest traktowany jako interfejs API dla DTBO. Po rozdzieleniu DT na część wspólną dla układu SoC i część specyficzną dla urządzenia musisz w przyszłości zachować wzajemną zgodność tych dwóch części, w tym:
- Definicja DT w głównym DT. Na przykład węzły, właściwości, etykiety. Każda zmiana definicji w głównym DT może spowodować zmiany w nakładce DT. Aby na przykład poprawić nazwę węzła w głównym DT, zdefiniuj etykietę „alias”, która jest mapowana na oryginalną nazwę węzła (aby uniknąć zmiany nakładki DT).
- Nakładka z lokalizacją sklepu DT Na przykład nazwa partycji, format sklepu.
Zapewnianie bezpieczeństwa
Program rozruchowy musi zapewniać, że DTB lub DTBO jest bezpieczny, niezmieniony i nieuszkodzony. Do zabezpieczenia DTB lub DTBO możesz użyć dowolnego rozwiązania, np. podpisu obrazu rozruchowego w VBoot 1.0 lub stopki HASH AVB (VBoot 2.0).
- Jeśli DTB lub DTBO znajduje się w 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 DTB lub DTBO znajduje się na istniejącej partycji (np. na partycji
odm
), powinna ona być częścią łańcucha zaufania AVB. (Partycja DTBO może udostępniać klucz publiczny partycjiodm
).
Więcej informacji znajdziesz w artykule Weryfikacja podczas uruchamiania.