Turbo für Embedded Linux

Tipps zur unkomplizierten Bootzeit-Optimierung

7. Januar 2011, 10:42 Uhr | Von Robert Schwebel
Bild 1. Grundsätzlicher Aufbau des Linux-Software-Stacks.
© Pengutronix

Aktuelle ARM-CPUs lassen sich mit Linux auf einfache Art für Industrieanwendungen nutzen. Nicht optimierte Systeme auf Basis von Standard-Distributionen zeigen dabei allerdings oft vermeidbar lange Bootzeiten und Flacker-Effekte beim Start der grafischen Benutzeroberfläche. Das lässt sich vermeiden.

Wird ein neues Embedded-System auf Basis von ARMCPUs geplant, steht oft Linux als eine attraktive Betriebssystem- Option zur Auswahl. Seit nunmehr ungefähr zehn Jahren wird diese Kombination immer attraktiver: Während anfänglich die Gerätehersteller beim Einsatz von Linux noch vollständig auf sich allein gestellt waren, sind die Chip-Hersteller zwischenzeitlich den Anforderungen des Marktes nachgekommen und sorgen mit eigenen Entwicklern und gesponserten Ressourcen aus der Anwender-Gemeinde dafür, das der Projektstart schnell vonstatten gehen kann. Das wichtigste Mittel hierzu ist der Mainline-Kernel von Linus Torvalds. Nur Prozessor-Support, der dort untergebracht wurde, steht zukünftig einer breiten Nutzergruppe zur Verfügung[1].

Der Betriebssystem-Kern stellt aber nur eine Komponente eines Systems dar: Für gewöhnlich besteht ein Gesamtsystem aus Bootloader, Kernel, POSIX-Runtime sowie der Userspace- Infrastruktur mit Bibliotheken (Shared Libraries) und Systemdiensten (Daemons), siehe Bild 1. Schließlich laufen auf dieser Umgebung die Applikationen, die die eigentliche Funktionalität des Embedded-Systems umsetzen. Wer schon einmal versucht hat, die Betriebssystem-Umgebung mit Hilfe einer konventionellen Distribution zu realisieren, bemerkt schnell, dass dabei oft unakzeptable Bootzeiten und -effekte auftreten. So vergehen oft, je nach Ausstattung eines unoptimierten Systems, bis zu 90 s vom Power-On bis zur Betriebsbereitschaft der Applikation. Und bei grafisch orientierten Systemen, z.B. Bedienterminals, Navigationsgeräten oder Infotainment- Systemen, kommt es oft zu mehrfachem unschönen Flackern auf dem Bildschirm, bis die Anwendungs-Applikation läuft.

All diese Effekte sind durch eine Optimierung der Systeme auf den jeweiligen Anwendungsfall hin wirkungsvoll in den Griff zu bekommen.

Der Bootloader

Nach dem Einschalten und der Stabilisierung der Versorgungsspannung sorgt zunächst der Reset-Controller dafür, dass die CPU loslaufen darf. Die meisten modernen SoC-CPUs verfügen über einen ROM-Bootloader, der es ermöglicht, auch von Medien wie einem NAND-Flash oder einer SD-Karte zu booten. Aus diesem Boot-Medium wird sodann der Bootloader geladen und gestartet, dessen Hauptaufgabe es ist, die Hardware, Takte und Timings der Kernkomponenten des Systems zu initialisieren. Moderne Bootloader wie Barebox[2] richten nur die Hardware ein, die zum Booten unbedingt benötigt wird. Sollen für die Engineering-Phase Funktionalitäten wie ein System-Monitor oder andere für Entwickler hilfreiche Tools im Bootloader aktiviert werden, muss darauf geachtet werden, dass diese im Produktionssystem nicht zu Verzögerungen führen.

Die Hauptaufgabe des Bootloaders ist es, den Kernel vom Bootmedium in den Hauptspeicher zu laden und das Kernel- Image zu starten. Dabei muss zwischen der Größe des Kernels und mehreren zur Verfügung stehenden Komprimierungsalgorithmen abgewogen werden. Je nach eingesetzter CPU und der Geschwindigkeit des Bootmediums muß hier eine optimale Kombination gefunden werden. Auch können Tricks wie das asynchrone Laden und Entpacken des Kernels angewandt werden.


  1. Tipps zur unkomplizierten Bootzeit-Optimierung
  2. Tipps zur unkomplizierten Bootzeit-Optimierung
  3. Tipps zur unkomplizierten Bootzeit-Optimierung

Verwandte Artikel

Pengutronix e.K. Industrial Linux Solutions