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
Na początek podziel DT na 2 części:
- Główny DT. Część dotycząca tylko SoC oraz domyślne konfiguracje 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 głównych i nakładających się DT
Aby utworzyć główny DT:
- Zkompiluj główny plik DT
.dts
do pliku.dtb
. - Przeflashuj plik
.dtb
na partycji dostępnej w czasie działania bootloadera (szczegóły w [Partition DTs](#partition)).
Aby utworzyć nakładkę DT:
- 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 zaufane miejsce w pamięci flash, do którego bootloader ma dostęp w czasie działania, aby umieścić w nim .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ść wczytania danych z systemu plików na partycji odm).
Rysunek 2. Umieść plik .dtbo w niepowtarzalnej partycji, np. partycji dtbo.
Uwaga: rozmiar partycji DT nakładki 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. Partycja DTBO w testach A/B, 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 masowej do pamięci. - Wczytaj
.dtbo
z pamięci masowej do pamięci. - Nakładanie
.dtb
na.dtbo
, aby uzyskać scalone drzewo urządzeń. - Rozpocznij jądrowy kernel podając adres pamięci scalonego DT.
Utrzymywanie 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 podpisu obrazu rozruchowego w VBoot 1.0 lub podpisu 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.