Wdrażanie nakładek drzewa urządzeń

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:

  1. Skompiluj główny plik DT .dts do pliku .dtb.
  2. Przeflashuj plik .dtb na partycję bootloadera dostępną w czasie działania (szczegóły w [Partition DTs](#partition)).

Aby utworzyć DT nakładki:

  1. 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.
  2. 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.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.

  1. Wczytaj .dtb z pamięci.
  2. Wczytaj .dtbo z pamięci.
  3. Nakładanie .dtb na .dtbo w celu utworzenia scalonego drzewa urządzeń.
  4. 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 partycji odm).

Więcej informacji znajdziesz w artykule na temat weryfikacji podczas uruchamiania.