Wdrożenie nakładek drzewa urządzeń (DTO) polega na podziale drzewa urządzeń (DT), budowie, partycjonowaniu i uruchamianiu. Po wdrożeniu działającej implementacji musisz też zadbać o zgodność między 2 wersjami DT i określić strategię zapewniania bezpieczeństwa każdej partycji DT.
Podziel DT
Najpierw podziel DT na dwie części:
- Główny DT. Część dotycząca tylko SoC i konfiguracje domyślne udostępnione przez dostawcę SoC.
- Nakładka DT. Konfiguracje dotyczące konkretnych urządzeń, udostępnione przez ODM/OEM.
Po podziale drzew DT musisz zadbać o to, aby główne drzewo DT i nakładka drzewa DT były ze sobą zgodne, tak aby po połączeniu głównego drzewa DT z nakładką drzewa DT powstało kompletne drzewo DT dla urządzenia. Szczegółowe informacje o formacie i regułach DTO znajdziesz w artykule Składnia DTO. Szczegółowe informacje o wielu DT znajdziesz w artykule Używanie wielu DT.
Tworzenie DT głównych i nakładek
Aby utworzyć główny DT:
- Skompiluj główny plik DT
.dts
do pliku.dtb
. - Przeflashuj plik
.dtb
na partycję bootloadera dostępną w czasie działania (szczegóły w [Partition DTs](#partition)).
Aby utworzyć DT nakładki:
- Zbierz nakładkę DT
.dts
do pliku.dtbo
. Chociaż ten format pliku jest taki sam jak plik.dtb
sformatowany jako spłaszczony DT, inne rozszerzenie pliku odróżnia go od głównego DT. - Przeflashuj plik
.dtbo
na partycję bootloadera dostępną w czasie działania (szczegóły w [Partition DTs](#partition)).
Szczegółowe informacje o kompilowaniu za pomocą DTC i weryfikowaniu wyników nakładek na hoście znajdziesz w artykule Kompilowanie i weryfikowanie.
Partycje DT
Określ zaufalną lokalizację w pamięci flash, do której bootloader ma dostęp w czasie działania, 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 bloki danych 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 bootloader ma możliwość wczytywania danych z systemu plików na partycji odm).
Rysunek 2. Umieść plik .dtbo w niepowtarzalnej partycji, np. partycji dtbo.
Uwaga: rozmiar partycji nakładki DT zależy od urządzenia i liczby zmian wymaganych w głównym pliku DT. Zwykle 8 MB wystarcza w pełni i pozwala na zwiększenie rozmiaru w przyszłości, jeśli zajdzie taka potrzeba.
Na urządzeniach, które obsługują płynne aktualizacje (A/B), użyj A/B na głównych partycjach DT i partycjach DT nakładki:
Rysunek 3. Testowanie A/B w ramach usługi DTBO, przykład 1.
Rysunek 4. Particja DTBO A/B, przykład 2.
Uruchom w programie rozruchowym
Aby uruchomić:
Rysunek 5. Typowa implementacja DTO w czasie wykonywania w programie rozruchowym.
- Wczytaj
.dtb
z pamięci. - Wczytaj
.dtbo
z pamięci. - Nakładanie
.dtb
na.dtbo
, aby uzyskać scalone drzewo urządzeń. - Rozpocznij jądrowy kernel podając adres pamięci scalonej DT.
Utrzymanie zgodności
Główna DTB (od dostawcy SoC) jest traktowana jako interfejs API dla DTBO. Po rozdzieleniu DT na część wspólną dla SoC i część specyficzną dla urządzenia musisz w przyszłości dbać o to, aby te części były ze sobą zgodne. W tym celu:
- Definicja DT w głównym DT. Na przykład węzły, właściwości czy etykiety. Każda zmiana definicji w głównym DT może powodować zmiany w nakładce DT. Aby na przykład poprawić nazwę węzła w głównym DT, zdefiniuj etykietę „alias”, która będzie odpowiadać pierwotnej nazwie węzła (aby uniknąć zmiany nakładki DT).
- Nakładka z lokalizacją sklepu DT Na przykład nazwa partycji lub format przechowywania.
Zapewnienie bezpieczeństwa
Program rozruchowy musi zapewniać bezpieczeństwo, niezawodność i nienaruszalność danych w pamięci DTB lub DTBO. Do zabezpieczenia DTB lub DTBO możesz użyć dowolnego rozwiązania, na przykład podpisów obrazów startowych w VBoot 1.0 lub podpisów HASH AVB (VBoot 2.0).
- Jeśli DTB lub DTBO znajduje się w niepowtarzalnej partycji, możesz dodać tę partycję do łańcucha zaufania AVB. Łańcuch zaufania zaczyna się od korzenia zaufania chronionego sprzętowo i kończy na programie rozruchowym, który weryfikuje integralność i autentyczność partycji DTB lub DTBO.
- Jeśli DTB lub DTBO znajduje się na istniejącej partycji (np.
odm
), ta partycja powinna znajdować się w łańcuchu zaufania AVB. (partycja DTBO może udostępniać klucz publiczny partycjiodm
).
Więcej informacji znajdziesz w artykule na temat weryfikacji podczas uruchamiania.