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:
- Skompiluj główny plik DT
.dts
do pliku.dtb
. - Wgraj plik
.dtb
na partycję dostępną dla programu ładującego (szczegóły poniżej).
Aby zbudować nakładkę ID:
- 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. - 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 |
---|
Partycja ODM |
---|
.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 |
---|
Przykład 2 |
---|
Działa w bootloaderze
Biegać:
- Załaduj
.dtb
z pamięci do pamięci. - Załaduj
.dtbo
z pamięci do pamięci. - Nałóż
.dtb
na.dtbo
, aby uzyskać połączony identyfikator ID. - 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 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 .