Yaml soll Device Trees vereinfachen

Device Tree Sources (DTS) sollen sich in Zukunft auch im Yaml-Format definieren lassen, lautet ein Vorschlag auf dem Kernel Summit. Das sei eine radikale Änderung, die aber durchaus einige Vorteile mit sich bringe.

Device Trees kommen zum Einsatz, um Hardware zu beschreiben, die Linux andernfalls nicht entdecken würde. Die Informationen zu dieser Hardware landen dann in einer Baumstruktur. Sie kommen zum Beispiel für ARM-Boards zum Einsatz und beschreiben die darin verbaute Hardware im Detail. Auf dem Kernel Summit stellt nun die amerikanische Consulting-Gruppe Konsulko ihren Vorschlag vor, das Format für diese Device Trees auf Yaml zu ändern. Das sei eine radikale Änderung, die sich aber aufgrund einige Vorteile durchaus lohnen könne.

Status Quo

Der Umgang mit Device Trees folgt auf Linux-Systemen üblicherweise einem festen Schema. Aus den so genannten Device Tree Source Files generiert ein Compiler dynamisch einen In-Memory-Tree. Diese Baumstruktur im Speicher wird dann serialisiert (“flatten”), um ein Device Tree Blob zu erzeugen (DTB). Dieses File landet auf dem entsprechenden Gerät selbst. Zugleich erfährt der Bootloader, wo er es findet, etwa auf einem Dateisystem oder im nichtflüchtigen Speicher.

Der Bootloader holt das DTB und reicht es entweder unverändert an das Betriebssystem weiter oder nimmt davor kleine Änderungen vor. Er modifiziert etwa die Boot-Kommandozeile. Das Betriebssystem deserialisiert den Blob wieder und verwendet dafür ein für diesen Zweck geschaffenes Interface. Es erzeugt einen weiteren In-Memory-Tree, unter Umständen mit den Änderungen des Bootloaders.

Der Kernel nutzt diese Baumstruktur dann, die dann auch als “live-tree” bezeichnet wird. Das Betriebssystem scannt die Struktur, initialisiert und konfiguriert das zugehörige Gerät. Dazu muss es alle Nodes und Eigenschaften des aktiven Nodes kennen, weil die Zugriffsmethoden diese Informationen brauchen. Das ist aber ein Punkt, an dem potenziell Fehler ins Spiel kommen, weil etwa die Type-Informationen verloren gehen.

Wo es hakt

Das eben beschrieben Szenario gilt dann auch hauptsächlich für einzelne Maschinen. Kommt etwa ein einzelnes Image für verschiedene, aber sehr ähnliche Plattformen zum Einsatz, müssen dennoch für jede unterstützte Plattform eigene Device Tree Blobs (DTB) her. Auch wenn die Änderungen nur minimal ausfallen. FPGAs oder Expansion Boards brauchen Änderungen am Device Tree zur Laufzeit und nutzen dafür Device Tree Overlays. Die funktionieren subtil anders als die In-Memory-Trees.

Damit Device Trees reibungslos funktionieren, müssen am Ende zudem verschiedene Komponenten (Compiler, Bootloader, Betriebssystem) ohne Fehler zusammenarbeiten. Das dies nicht immer funktioniert, liegt unter am bisher genutzten Format, das noch einige Ungereimtheiten in sich trägt. Werden Eigenschaften zum Beispiel als einzelne Werte oder Sequenz von Werten definiert, gehen ihre Type-Informationen verloren. Fehler im Umgang mit Device Trees fallen aber erst spät auf, nämlich wenn der Rechner versucht, das System zu booten. Dann hängt es sich in der Regel einfach auf, ohne einen Hinweise auf die Ursache zu geben.

Yaml soll helfen

Das Yaml-Format soll hier laut Konsulko Abhilfe schaffen. Es deckt nicht nur alle DTS-Features ab, sondern ist von Menschen gut lesbar, einfach zu parsen und nachträglich zu verändern, verbreitet, ausgereift und hat guten Tool-Support. Es unterstütze Referenzen, Anker, Typen für Eigenschaften und begleite den kompletten Kompiliervorgang mit nützlichen Fehlermeldungen. Auch lasse sich Yaml, wie Object Files, als Zwischenformat verwenden, um das finale Linken auf einen späteren Zeitpunkt zu vertagen. Nicht zuletzt sei Yaml zukunftssicher, denn die Daten lassen sich einfach in künftige Formate konvertieren.

Der Plan der Ideengeber scheint zu sein, traditionelle DTS nach und nach durch Yaml-Dateien abzulösen. Ob alle Kernel-Entwickler mit dem Vorschlag einverstanden sind, muss sich zeigen. In dem Workshop schien es aber keine grundlegenden Vorbehalte zu geben. Json und XML als Formate lehnten die Entwickler im Workshop ab. XML sei zu sperrig. Json unterstütze Yaml nicht, während Yaml aber Json supporte. Offene Fragen werfen aber unter anderem noch das Diffing und die Versionierung auf. Auch über die Auswirkungen des neuen Formats auf die Device Trees in speziellen Fällen wurde diskutiert.

E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben