OpenWrt Buildroot – Über

OpenWrt Buildroot ist die von OpenWrt verwendete toolchain. Es handelt sich um ein modifiziertes Buildroot, welches die Standard C Bibliothek µClibC bereits integriert hat.

OpenWrt Buildroot umfasst einen Satz von Makefiles und patches, welche es einfach machen, ein komplettes embedded Linux zu erzeugen. Es kann einige ausgewählte Komponenten erzeugen, oder alle: eine Toolchain zum kross-compilieren , ein root Dateisystem, ein Kernel-Image und schließlich ein Firmware-Datei. Es kann auch Urlader-Images erzeugen. OpenWrt Buildroot automatisiert den kompletten Prozess zur Erzeugung eines embedded Systems.


Eine der größten Hürden im Zusammenhang mit embedded Geräten besteht darin, dass man auf seiner GNU/Linux-Distribution der Wahl nicht ohne Weiteres eine Firmware für das embedded Gerät kompilieren können wird. Ein Compiler und jegliche verfügbaren Entwicklerwerkzeuge sind immer noch nicht ausreichend, um ein Firmware-Image zu erhalten, denn das embedded Gerät stellt in den allermeisten Fällen eine komplett verschiedene Hardware Plattform dar, welche mit derjenigen des Entwickler-PCs nicht kompatibel ist. Deswegen muss man sich zuerst einmal einen Compiler compilieren, mit dem dann der Quellcode für die Befehlssatzarchitektur des jeweiligen embedded Gerätes kross-compiliert werden kann. Der so erhaltene Binaries sind erst lauffähig.

Der Prozess diesen Kross-Compiler zu erzeugen ist mit einigen Schwierigkeiten verbunden und weil es nicht etwas ist, was sehr häufig versucht wird, ist Erfahrung damit nicht weit verbreitet und es gibt einen gewissen Dunst von Mysterien und Schwarzer Magie.

Wenn man sich mit embedded Geräten beschäftigt, wird man in der Regel mit einer Binär-Kopie eines passenden Kross-Compilers und den Grundbibliotheken abgespeist anstatt mit Instruktionen, wie man selber diesen Kross-Compiler erzeugt. Die mitgelieferte Binär-Kopie zu benutzen spart zwar Zeit, aber (fast) ausnahmslos bedeutet das gleichzeitig, dass man recht veraltete Software benutzen muss. Ebenfalls ist es üblich, eine bereits gepatchte Version des Linux Kernels vom Board- oder Chipzwischenhändler zu bekommen, die ebenfalls schon älter ist. Und da die Patches nicht separat mitgeliefert werden, sondern bloß den bereits modifizierten Kernel, kann es schwierig sein fest zu stellen, was alles verändert worden ist, um den Kernel auf dem Gerät zum laufen zu bekommen. Sehr selten bemühen sich die Patch Ersteller außerdem, ihre Veränderungen in den Mainstream-Kernel einfließen zu lassen, es mangelt an Qualität und Wartbarkeit.

OpenWrt geht vollkommen anders heran, und es wird alles sauber von Grund auf aufgebaut. Die Entwickler nehmen den Mainstream Linux Kernel von hier http://kernel.org/ und schreiben saubere und wartbare Patches für die verschiedenen unterstützen Plattformen und es wird viel Wert darauf gelegt, ganze Patches oder Teile davon in den Mainstream Kernel zu bekommen. Dafür müssen recht hohe Qualitätsstandards erfüllt werden. Der Vorteile sauberen Code zu schreiben und ihn in den Mainstream Kernel zu bekommen anstatt mal eben schnell etwas zu schreiben und anschließend dieses etwas ungewartet auf einem Hersteller-Server vergammeln zu lassen, liegen hoffentlich auf der Hand.

Die OpenWrt-Patches werden grundsätzlich separat gehalten und wirklich erst beim Erzeugungsprozess eingespielt. Sie werden gepflegt und zu gegebener Zeit auf den jeweils neuesten Kernel portiert. Bei dem Cross-Compiler wird genauso vorgegangen!

Einfach ausgedrückt: OpenWrt beinhaltet keine fertig ausführbaren Dateien, ja eigentlich noch nicht einmal (besonders viel) Quellcode (von den Patches abgesehen); es ist ein vollkommen automatisiertes System um Quellcode von den Projekten selber herunterzuladen, diesen für die jeweilige Plattform zu patchen und zu kross-compilieren. Durch einfache Änderungen in den Makefiles lässt sich jeder Schritt im Prozess verändern.

Als Beispiel sei der Linux Kernel genannt: wenn ein neuer Kernel freigegeben wird, wird ein simple Veränderung in den Makefiles, diese Version anstatt der alten herunterladen, den Quellcode patchen und kross-compilieren. Je nachdem, müssen die Patches mal mehr, mal weniger an den neuen Kernel angepasst werden. Eine sehr transparente Vorgehensweise, die sich nicht nur auf den Kernel sondern auf alles, was OpenWrt umfasst, ausdehnt. – Es ist dieses bewusst einfach gehaltene Konzept, das es OpenWrt erlaubt auf sehr vielen embedded Geräten zu laufen, und dabei dennoch mit stets neuesten Compilern, neuesten Kernel und neuesten Versionen von Applikationen unangefochten an der Spitze der Entwicklung zu stehen.

Ganz kurz

Auf einem Linux System wird GCC eingesetzt um die Toolchain zu compilieren, dann wird mit Hilfe dieser Toolchain der Quellcode kross-compiliert. Anschließend werden diese Binaries zu opkg-Software-Paketen paketiert und ganz zum Schluss erzeugt der Image Generator (früher Image Builder genannt, obwohl dieses Programm gar nichts "buildet" = compiliert) darauß eine Image-Datei, die sich wie gewohnt auf den Flash-Speicher der Geräte aufspielen lässt.

Verfügbare Dokumentation

  • Wir unterscheidenden vier Wege um eine fertige Image-Datei zu erhalten. →obtain.firmware

Back to top

de/about/toolchain.txt · Last modified: 2011/08/24 21:47 by orca