Sie können Device Tree Compiler (DTC) verwenden, um die Device Tree Source-Dateien zu kompilieren. Bevor Sie jedoch das Überlagerungs-DT auf das Ziel-Haupt-DT anwenden, sollten Sie das Ergebnis auch überprüfen, indem Sie das Verhalten von DTO simulieren.
Kompilieren mit DTC
Wenn Sie dtc
zum Kompilieren von .dts
, müssen Sie die Option -@
hinzufügen, um einen __symbols__
Knoten in der resultierenden .dtbo
. Der Knoten __symbols__
enthält eine Liste aller mit einem Label gekennzeichneten Knoten, die die DTO-Bibliothek für Referenzen verwenden kann.
Beispielbefehl zum Erstellen von Haupt-DT .dts
:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Beispielbefehl zum Erstellen des Overlay-DT .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Überprüfen Sie die DTO-Ergebnisse auf dem Host
Die Überprüfung kann Ihnen dabei helfen, Fehler zu identifizieren, die beim Platzieren des Overlay-BMK auf dem Haupt-BMK auftreten können. Bevor Sie das Ziel aktualisieren, können Sie das Ergebnis der Überlagerung von DT auf dem Host überprüfen, indem Sie das Verhalten von DTO mit /include/
in .dts
.
/include/
, um DTO auf dem Host zu simulieren- Erstellen Sie eine Kopie der Overlay
.dts
. Entfernen Sie in der Kopie die Kopfzeile der ersten Zeile. Beispiel:/dts-v1/; /plugin/;
Speichern Sie die Datei untermy_overlay_dt_wo_header.dts
(oder einem beliebigen Dateinamen). - Erstellen Sie eine Kopie der Haupt-
.dts
. Hängen Sie in der Kopie nach der letzten Zeile die Include-Syntax für die Datei an, die Sie in Schritt 1 erstellt haben. Beispiel:/include/ "my_overlay_dt_wo_header.dts"
Speichern Sie die Datei untermy_main_dt_with_include.dts
(oder einem beliebigen Dateinamen). - Verwenden Sie
my_main_dt_with_include.dts
dtc
kompilieren, um das zusammengeführte DT zu erhalten, das dasselbe Ergebnis wie DTO sein sollte. Zum Beispiel:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- Verwenden Sie
dtc
, ummy_merged_dt.dto
zu sichern.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Überprüfung von DTO in Android 9
Android 9 erfordert eine Device Tree Blob Overlay (DTBO)-Partition. Um Knoten hinzuzufügen oder Änderungen an den Eigenschaften im SoC-DT vorzunehmen, muss der Bootloader dynamisch einen gerätespezifischen DT über den SoC-DT legen.
Zeigt angewendete Überlagerungen an
Damit die Vendor Test Suite (VTS) die Korrektheit der Overlay-Anwendung bewerten kann, müssen Anbieter einen neuen Kernel-Befehlszeilenparameter androidboot.dtbo_idx
, der die von der DTBO-Partition ausgewählten Overlays angibt. In Android 12 mit Kernel-Version 5.10 oder höher durchläuft dieser Parameter bootconfig. Beispielsweise meldet der Parameter androidboot.dtbo_idx=x,y,z
x
, y
und z
als die nullbasierten Indizes der Device Tree Overlays (DTOs) von der DTBO-Partition, die (in dieser Reihenfolge) vom Bootloader auf die Basis angewendet werden Gerätebaum (DT).
Overlays können auf Knoten aus dem Hauptgerätebaum angewendet oder neue Knoten hinzugefügt werden, aber nicht auf einen Knoten verweisen, der in einem vorherigen Overlay hinzugefügt wurde. Diese Einschränkung ist notwendig, da die Overlay-Anwendung die Overlay-Symboltabelle nicht mit der Haupt-DT-Symboltabelle zusammenführt (das Nicht-Mischen vermeidet Konflikte in Symbolnamen und komplizierte Abhängigkeiten zwischen Overlays).
Beispiel: Ungültige Overlays
In diesem Beispiel verweist overlay_2.dts
auf den Knoten e
, der durch overlay_1.dts
hinzugefügt wurde. Nachdem overlay_1
auf das Haupt-DT angewendet wurde und versucht wird, overlay_2
auf das resultierende DT anzuwenden, schlägt die Overlay-Anwendung mit einem Fehler fehl, dass das Symbol e
nicht in der Symboltabelle für das Basis-DT vorhanden ist.
main.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[main.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; | [overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e: e { prop = <0x0a>; phandle = <0x04>; }; }; | [overlay_2.dts] /dts-v1/; /plugin/; /* invalid! */ &e { prop = <0x0b>; }; |
Beispiel: Gültige Overlays
In diesem Beispiel bezieht sich overlay_2.dts
nur auf Knoten b
vom Haupt-DTS. Wenn overlay_1
auf das Basis-DT angewendet wird, gefolgt von der Anwendung von overlay_2
, wird der Wert der Eigenschaft prop
in Knoten e
(festgelegt durch overlay_1.dts
) durch den Wert überschrieben, der durch overlay_2.dts
festgelegt wird.
main.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[final.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; | [overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e { prop = <0x0c>; }; }; | [overlay_2.dts] /dts-v1/; /plugin/; /* valid */ &b { ref1 = <&c>; e { prop = <0x0d>; }; }; |
Implementierung der DTBO-Partition
Um die erforderliche DTBO-Partition zu implementieren, stellen Sie sicher, dass der Bootloader Folgendes tun kann:
- Identifizieren Sie das Board, auf dem es ausgeführt wird, und wählen Sie die entsprechenden Overlays aus, die angewendet werden sollen.
- Hängen Sie den Parameter
androidboot.dtbo_idx
an die Kernel-Befehlszeile an.- Der Parameter muss die nullbasierten Indizes der DTOs aus dem DTBO-Partitionsabbild angeben, das er auf das Basis-DT angewendet hat (in derselben Reihenfolge).
- Die Indizes müssen sich auf die Position des Overlays in der DTBO-Partition beziehen.
Einzelheiten zur Struktur der DTBO-Partition finden Sie unter Device Tree Overlays auf source.android.com.
Validierung der DTBO-Partition
Sie können VTS verwenden, um Folgendes zu überprüfen:
- Vorhandensein des Kernel-Befehlszeilenparameters
androidboot.dtbo_idx
(durch Überprüfung, obInit
automatisch die entsprechendero.boot.dtbo_idx
eingerichtet hat). - Gültigkeit der
ro.boot.dtbo_idx
(durch Überprüfung, ob die Eigenschaft mindestens einen gültigen DTBO-Bildindex angibt). - Gültigkeit der DTBO-Partition (überprüft auch die Overlays in der DTBO-Partition, die auf das Basis-DT angewendet werden).
- Zusätzliche Knoten oder Eigenschaftsänderungen im resultierenden DT werden dem Linux-Kernel präsentiert.
Beispielsweise besteht in den folgenden Überlagerungen und dem abschließenden DT das Hinzufügen von androidboot.dtbo_idx=5,3
zur Kernel-Befehlszeile die Validierung, aber das Hinzufügen von androidboot.dtbo_idx=3,5
zur Kernel-Befehlszeile besteht die Validierung nicht.
Overlay DT bei Index 3 | Overlay DT bei Index 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; | [overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
Letzte DT |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Last updated 2022-09-07 UTC.