Wdrożenie nakładek drzewa urządzeń (DTO) polega na podzieleniu drzewa urządzeń (DT), utworzeniu, podzieleniu i uruchomieniu. 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 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 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 dane DT
.dts
w pliku.dtbo
. Chociaż ten format pliku jest taki sam jak plik.dtb
sformatowany jako spłaszczony DT, inna nazwa rozszerzenia 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 pliki 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 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), należy przeprowadzić A/B na głównych partycjach DT i partycjach DT nakładki:
Rysunek 3. DTBO partycji A/B, przykład 1.
Rysunek 4. DTBO partycji A/B, przykład 2.
Uruchom w programie rozruchowym
Aby uruchomić:
Rysunek 5. Typowa implementacja DTO w bootloaderze.
- Wczytaj
.dtb
z pamięci. - Wczytaj
.dtbo
z pamięci. - Nakładanie
.dtb
na.dtbo
w celu utworzenia scalonego drzewa urządzeń. - Rozpoczęcie działania rdzenia z adresem pamięci scalonego 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 hashów 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 chronionego sprzętowo korzenia zaufania 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.