Kein Betriebssystem läuft auf so vielen Hardware-Plattformen wie Linux: Vom Supercomputer über PC und Handy bis zur Waschmaschinensteuerung ist alles dabei. Diese Flexibilität heißt aber auch, dass sich Entwickler für ein konkretes Projekt genau überlegen, welche Bootloader, Kernel, Treiber, Bibliotheken und Applikationen sie sinnvollerweise einsetzen.

Ist die Hardware erfolgreich in Betrieb genommen und der Bootloader und der Linux-Kernel zumindest rudimentär funktionstüchtig, geht es in einem nächsten Schritt an die Zusammenstellung der Software-Komponenten. Neben der projektspezifischen Applikation besteht ein fertiges System-Image dabei aus einer Vielzahl weiterer Komponenten, die in einem File System, dem sogenannten Root-Filesystem, organisiert sind.

Auf einen Blick

Passt immer: Während auf Linux-PCs und -Servern üblicherweise eine umfassende Linux-Distribution läuft, brauchen Embedded-Entwickler ein exakt an ihre Applikation angepasstes Betriebssystem, ohne überflüssige Bibliotheken und Dienste. Mit dem ELDK bietet Denx einen entsprechenden Baukasten, der dank der Linux-Foundation im Hintergrund außerordentlich stabil und zukunftssicher ist.

Für Desktop- und Server-PCs gibt es viele passende Linux-Distributionen, beispielsweise Ubuntu, Debian, Suse oder Red Hat. Hier sind neben dem eigentlichen Betriebssystem noch tausende Applikationen zu einzeln installierbaren Paketen geschnürt, ein Installer löst alle Abhängigkeiten automatisch auf. Für Admins und Anwender mag das ideal sein – Embedded-Entwickler haben aber andere Ansprüche. Embedded-Geräte bieten deutlich eingeschränktere Ressourcen als ein Desktop-System, so dass jede ungebrauchte Komponente Ballast in Form von Speicherverbrauch und Performance-Einbußen darstellt. Weil sich die vielfältigen Ansprüche nicht auf einen Nenner bringen lassen, hat sich bisher keine „Embedded-GNU/Linux-Distribution“ etablieren können.

Viele Wege führen zu Embedded-Linux

Bisher haben die Entwickler sehr vielfältige Lösungen gefunden. Bei großzügig dimensionierten Systemen konnten sie auf Desktop-Distributionen zurückgreifen, die sie von unnötigen Komponenten befreiten. Insbesondere Debian hat sich hier durch die einfache Zugänglichkeit angeboten. Nachteilig an einer solchen Herangehensweise sind jedoch die zentralen, von der Distribution vorgegebenen Komponenten, die praktisch nicht selbst zu kontrollieren sind. An ein eigenmächtiges Update zum Beispiel des verwendeten GNU-C-Compilers oder der verwendeten C-Bibliothek („libc“) ist in einem solchen Setup kaum zu denken. Das liegt daran, dass das eigentliche Compilieren der Sourcen ohne größere Anstrengungen nicht auf dem eigenen Rechner abläuft, sondern auf den Build-Servern der Distribution.

Auf der anderen Seite des Spektrums haben sich Kenner ihr eigenes Root-Filesystem komplett selbst gebaut, unter Namen wie „Linux from Scratch“ gibt es dazu auch umfassende Anleitungen. Dazu gehört auch die Cross-Toolchain, die zum Beispiel für ARM-Systeme notwendig ist. Diese Vorgehensweise ist zwar prinzipiell machbar und mit der vollen Kontrolle verbunden, allerdings ist der Aufwand enorm. Zwischen diesen beiden Extremen gibt es freie Projekte, die sich um die Build-Umgebung und Komponentenintegration für Embedded-Systeme kümmern. Eine sinnvolle Auswahl eines solchen Projekts scheiterte in der Vergangenheit weniger an der Verfügbarkeit, sondern vielmehr an der unüberschaubar großen Anzahl.

Ein Baukastenansatz löst Probleme

Entscheidend für die Tragfähigkeit eines solchen Projekts ist die Community, die das System pflegt und wartet. Um langfristig erfolgreich zu sein, müssen alle Komponenten einfach zugänglich und auf dem aktuellen Stand sein, außerdem sollte das System anbieterneutral funktionieren. Um das zu schultern, braucht die Community eine tragfähige Größe: Auch ein Spitzenentwickler kann langfristig kein Team von Programmierern ersetzen. Glücklicherweise findet die GNU/Linux-Community immer wieder Wege, gemeinsam an einem Strang zu ziehen, selbst wenn Projekte vordergründig miteinander konkurrieren. Die Linux-Foundation hat sich hier einen hervorragenden Ruf erarbeitet, nicht zuletzt da mit Linus Torvalds und Greg Kroah-Hartmann wichtige Persönlichkeiten der Kernel-Entwicklung hier ihr Tätigkeitsfeld haben.

Das ELDK (Embedded Linux Develompent Kit) ist nun schon seit über anderthalb Jahren ebenfalls Teil dieser Community. Verbunden durch die gemeinsamen Interessen setzt das ELDK seit der Version 5 auf dem von der Linux-Foundation getragenen Yocto-Projekt auf. Die unter anderem von der Open-Embedded-Community erarbeiteten Werkzeuge und Prozeduren werden darin auf einer fokussierten Basis ständig verbessert. Das offene Entwicklungsmodell, die wachsende Größe der Community und die bereits erreichten Verbesserungen, untermauern eindrücklich den Anspruch dieses Projekts. Den bisherigen Anwendern des ELDKs steht damit eine bekannte Umgebung zur Verfügung, die die neuesten Versionen der relevanten Software-Pakete in sich vereint.

Der vollständige Source-Code des ELDK ist frei verfügbar, einschließlich aller Werkzeuge und Hilfsmittel zum Bau und zur Installation. Der Entwickler benötigt zur Arbeit mit dem Kit keine Super-User-Rechte und damit auch keinen Systemadministrator. Das ELDK läuft auf x86/Linux-Distributionen und unterstützt eine Bandbreite an ARM-, PowerPC- (8xx, 82xx, 4xx, QorIQ) und MIPS-Prozessoren. Cross-Development-Tools wie Compiler, Assembler und Linker zur Softwareentwicklung für das Zielsystem bis hin zu grafischen Applikationsumgebungen sind enthalten.

Neben einem schnellen Einstieg durch die vorcompilierten Images ist das ELDK eine geeignete Build-Umgebung für den kompletten Software-Stack eines Embedded-Produkts in den weiteren Entwicklungsphasen bis hin zur endgültigen Release. Vom Bootloader über den Kernel bis zur eigenen Applikation ist alles in eine durchgängige Umgebung integrierbar.

Multiplattform-Verfügbarkeit

Dank der Multiplattform-Verfügbarkeit für ARM, PowerPC und MIPS wird selbst ein Prozessorarchitekturwechsel in einer Produktfamilie ein gangbarer Weg: Für alle Plattformen verwendet das ELDK exakt die gleichen Komponenten. Obwohl Yocto und das ELDK zwar selbst keine Distributionen im klassischen Sinn darstellen, steht damit eine stabile, gewartete Plattform zur Verfügung, in die sich eigene Applikationen sehr schnell integrieren lassen.

Ein einziger „bitbake“-Aufruf ist in der Lage, alle beteiligten Komponenten vom Compiler über die Bibliotheken, den Bootloader und den Linux-Kernel bis zu den Dienstprogrammen zu übersetzen und daraus ein Image zu generieren. In dieser Phase stehen auch alle verwendeten Komponenten in den Quellen zur Verfügung und lassen sich damit für die Zukunft archivieren. Eventuelle Bugfixes sind damit komplett unabhängig möglich, egal in welcher Schicht des Software-Stacks.

Im aktuellen Release 5.3 des ELDK sind neben GCC 4.7.2 und Qt 4.8.3 der Linux-Kernel in Version 3.6.10 und U-Boot v2012.10 integriert. Zum ersten Mal steht nun auch eine Hard-Float-Toolchain für die ARMv7-Architektur („armv7a-hf“) zur Verfügung. Applikationen können die in der Hardware enthaltene Floating-Point-Unit nutzen, ohne Performance-Verluste zu erleiden, die gewöhnlich durch Rückwärtskompatibilität anfallen. Grafische Tool-Kits, auch für ARM-Architekturen, sind ebenfalls enthalten. Neu gegenüber der Vorgängerversion ist die Möglichkeit, die Toolchain an eine beliebige Stelle im File-System zu installieren, da während der Installation eine Anpassung der Toolchain an den Zielpfad stattfindet.

Zukunftsfähig und aktuell

Die Embedded-Spezialisten der Firma Denx bieten mit dem ELDK einen Lösungsansatz im Baukastenprinzip, der durch die gemeinsame Arbeit im Rahmen der Linux-Foundation zukunftsfähig ist. Gemäß dem Motto „freie Software soll auch frei bleiben“ wird durch die Zusammenarbeit ein kontinuierliches Vorantreiben der Plattform garantiert, die zukünftigen Entwicklungen zu Gute kommt. Die Optimierung des Betriebssystems durch das Zusammenspiel trägt nicht nur zur System-Stabilität und Sicherheit bei, sondern auch zu verkürzten Entwicklungszeiten.

Infokasten

System-on-Module:  Die Bausteine der Entwicklungsplattform ELDK 5.3 sind aufeinander abgestimmt und ermöglichen dem Entwickler den unmittelbaren Einstieg in sein Projekt. Das M28 System-on-Module von Denx stellt ein mögliches Target für die kostengünstige Entwicklung von mobilen HMI-Anwendungen auf Basis des ELDK dar. Dieses ARM-basierte System setzt auf die i.MX-Prozessoren von Freescale und kommt mit vorinstalliertem Linux. Es eignet sich aufgrund des geringen Formfaktors von 70 x 35 mm² als Grundlage für tragbare Geräte, die umfangreiche Schnittstellen mit Farbdisplay zur Interaktion mit dem Benutzer benötigen, wie beispielsweise Eingabeterminals oder portable Messgeräte.

Optimiert hinsichtlich Leistung und geringem Stromverbrauch bietet die CPU Dual-CAN, Dual-Ethernet und einen Display-Controller. Die CPU besitzt darüber hinaus eine integrierte Batterie-Ladeeinheit, so dass das Modul bereits eine durchgängige Lösung für 5 V und Akkubetrieb bereitstellt.

Der Funktionsumfang des M28 im Überblick:

  • CPU: Freescale i.MX287
  • Speed: 454 MHz
  • RAM: 128 MByte DDR2 / 256 MByte
  • NAND: 256 MByte
  • LCD: 800 x 400 Pixel
  • LAN: 2x 10/100 MBit/s
  • SPI: bis 4x
  • UART: bis 4x
  • USB Host/OTG: bis 2x
  • I²C: bis 2x
  • MMC: bis 4x

Detlev Zundel

ist Geschäftsführer der Denx Software Engineering in Gröbenzell.

(lei)

Sie möchten gerne weiterlesen?

Unternehmen

DENX Software Engineering

Kirchenstr. 5
82194 Gröbenzell
Germany