Gerätebaum-Overlays (Device Tree Overlays, DTOs) erweitern die vorhandenen Implementierungen eines zusammengefassten Gerätebaums (Flattened Device Tree, FDT), da im Nutzerbereich (Userspace) die ursprünglichen Gerätebaum-Daten im Kernel während der Ausführung modifiziert werden können. Dazu gehört beispielsweise das Laden weiterer Overlay-FDTs, um die Originaldaten zu ändern. Unter Android müssen die Laufzeitupdates von Gerätebaum-Blobs nicht im Nutzerbereich implementiert werden. Stattdessen wird empfohlen, dass die Anbieter für das Gerätebaum-Patching libfdt
oder libufdt
im Bootloader nutzen.
Unterstützung von Gerätebaum-Overlays unter Android
Die Unterstützung von Gerätebaum-Overlays variiert je nach Android-Release:
- Unter Android 7.x und niedrigeren Versionen müssen keine Gerätebäume unterstützt werden und daher gibt es auch keine Empfehlungen dazu, wie Anbieter Gerätebäume an den Kernel übergeben oder wo sie sie speichern sollen.
- Unter Android 8.x wird die Unterstützung eines Gerätebaums empfohlen, damit die platinenspezifischen und reinen SoC-Teile des Kernels voneinander getrennt bleiben.
- Unter Android 9 und höher ist eine Partition für das Overlay des Gerätebaum-Blobs (Device Tree Blob Overlay, DTBO) erforderlich und es muss mindestens ein Gerätebaum-Overlay implementiert sein.
Partitionierungsanforderungen für Gerätebaum-Overlays
Auf den meisten Android-Geräten wird der Gerätebaum-Blob bei der Entwicklung an den Kernel angehängt und der Bootloader lädt den Blob dann aus dem Kernel. Da die Gerätebaum-Blobs aber als Teil des SoC-Kernels (System-on-a-Chip) eingestuft werden, gibt es unter Android keine spezifischen Anforderungen zur Entwicklung oder Speicherung von Gerätebaum-Blobs. Auf den Geräten kann der Gerätebaum-Blob an den Kernel angehängt oder in einer separaten Partition gespeichert werden. Die einzige Voraussetzung ist, dass der Bootloader weiß, wie und wo er den Blob laden kann.
Zur Unterstützung von Gerätebaum-Overlays müssen die Geräte folgende Anforderungen erfüllen:
- Sie benötigen eine DTBO-Partition pro Kernel-Image für ein platinenspezifisches Gerätebaum-Overlay und der Bootloader muss wissen, wie und wo er den SoC-spezifischen Gerätebaum-Blob laden kann. Die Größe der Partition hängt von der Anzahl der Änderungen am SoC-Kernel ab. Wählen Sie eine Größe, die genügend Spielraum für zukünftige Updates lässt. In der Regel reichen 8 MB aus.
- DTO-Partitionen müssen für A/B-Geräte aktualisiert sein. Der Wiederherstellungs-Kernel ist mit dem Android-Kernel identisch, aber die Partition muss für A/B-Geräte eingerichtet werden, damit OTA-Updates (Over The Air) empfangen werden können. Die Größe der Partition hängt von dem Gerät und der Anzahl der Änderungen ab, die am Gerätebaum-Blob des Haupt-SoC-Kernels vorgenommen werden müssen.
Bootloader-Anforderungen für Gerätebaum-Overlays
Zur Unterstützung von Gerätebaum-Overlays muss der Bootloader folgende Anforderungen erfüllen:
- Wissen, wie und wo (unter Berücksichtigung des Boot-Slots für A/B-Geräte) der SoC-spezifische Gerätebaum-Blob für den jeweiligen Anwender geladen werden muss. Da Blobs in der Regel an den Kernel angehängt werden, müssen sie meist vom Ende des Kernel-Images geladen werden.
- Wissen, wie und wo das Overlay des Gerätebaum-Blobs für den jeweiligen Anwender geladen werden muss
- Den Blob des Haupt-Gerätebaums mit dem Overlay patchen, bevor der kombinierte Gerätebaum an den Kernel übergeben wird
Weitere Informationen zur Unterstützung von Gerätebaum-Overlays im Bootloader finden Sie unter Gerätebaum-Overlays.