Um den Preis niedrig zu halten, haben Mikrocontroller gegenüber Standard-Prozessoren Einschränkungen. Deshalb müssen viele 32-Bit-Betriebssysteme bei der Massengeschäft-verdächtigen Embedded-Domäne aufstecken. Linux nimmt diese Hürde gekonnt.
Embedded-Systeme müssen in vielen Fällen mit der minimalen Hardware-Ausstattung zurechtkommen, die gerade noch für die zu lösende Aufgabe ausreicht. Außer am Speicher wird daher gerne auch an Ausstattung und Geschwindigkeit des Prozessors gespart: Neben der Fließkommaeinheit wird oft die Memory Management Unit (MMU) weggelassen, die für die Verwaltung des virtuellen Speichers notwendig ist. Doch Linux wäre nicht Linux, wenn es sich nicht flexibel auch diesen Anforderungen anpassen ließe.
PC-Betriebssysteme wie Linux setzen normalerweise eine MMU voraus, die wichtige Aufgaben erfüllt: Sie gewährleistet den Speicherschutz der Applikationen gegeneinander, damit ein Programm nicht den Speicherbereich eines anderen ändern kann, und verwaltet einen virtuellen Adressraum, damit der Compiler keinen positionsunabhängigen Code erzeugen muss und die Applikationen mehr Arbeitsspeicher anfordern dürfen als physikalisch vorhanden ist.
Üblicherweise finden wir in eingebetteten Systemen aber weder eine Festplatte für Swapspace noch eine Mehrbenutzerumgebung vor, so dass bei sorgfältigem Entwurf der Anwendungen mit Blick auf Speicherbedarf und Kooperation der Applikationen sogar auf die virtuelle Speicherverwaltung verzichtet werden kann.
Das kann bei Linux glücklicherweise ohne größere Änderungen am Kernel erreicht werden.
Historisches
Man braucht immer einige Verrückte, um solch ein Projekt anzugehen. In diesem Fall handelt es sich um Jeff Dionne und Kenneth Albanowski, die sich Anfang 1998 das ehrgeizige Ziel setzten, Linux auf einem Palm Pilot zum Laufen zu bringen. Die Resonanz auf dem Linux-Kongress 1998 in Köln war gemischt: Die Beobachtungen gingen von verwundertem Kopfschütteln bis zur Anerkennung der Genialität dieser Linux-Hacker.
Damals war Linux auf PDAs noch kein Thema und der Einsatz von Linux auf eingebetteten Systemen stand kaum zur Diskussion. Im Jahr 2001 sieht die Situation anders aus – Linux auf PDAs und Embedded Systems ist aktuell und uClinux ist eine zuverlässige Lösung für kostensensitive Linux-Anwendungen.
Stand der Dinge
Viele Linux-Entwicklungen abseits des Mainstream laufen Gefahr, dass sie mangels Interesse nach einiger Zeit der Euphorie einschlafen. Ein Beispiel dafür ist ELKS, die Portierung von Linux auf die pre-386 Intel-Prozessoren 8086, 8088 und 80286.
Das uClinux jedoch hat von Anfang an großen Anklang gefunden und ist mittlerweile auf eine große Anzahl von Plattformen portiert. Auch in einigen kommerziellen Produkten ist uClinux bereits erfolgreich. Neben den bisher verwendeten Systemkernen, die noch aus der 2.0er Serie stammen, ist seit kurzem eine erste Portierung des 2.4er Kernels für einige der Plattformen verfügbar – die 2.2er-Kernel-Serie wurde ausgelassen.
Unterstützte Plattformen
Wie das “große” Linux selbst, profitiert auch uClinux von der Portabilität des Kernels. Deshalb wundert es nicht, dass mittlerweile eine Menge Portierungen existieren und uClinux für manche Prozessoren das einzige erhältliche Betriebssystem ist.
Motorola Dragonball
Der Dragonball – der Mikrokontroller, mit dem alles anfing – ist ein Abkömmling des von Mac, Atari ST und Amiga bekannten 68000-Prozessors. Er arbeitet mit Taktfrequenzen von 16 bis 33 MHz und einigen auf dem CPU-Silizium integrierten Peripherieeinheiten wie LCD-Controller, SPI-Interface und serieller Schnittstelle.
Dieser Prozessor wird nicht nur in PDAs von Palm und Kompatiblen eingesetzt, sondern kommt wegen seines günstigen Preises und der einfachen Anbindung an Peripherieeinheiten auch in den meisten uClinux-Hardwareprojekten zum Einsatz.
Trotz seines geradezu biblischen Alters von 22 Jahren steht die 68000-Architektur des Dragonball immer noch recht gut da.
Motorola Coldfire
Coldfire ist eine neuere CPU von Motorola, die im Embedded-Bereich als Nachfolger der altbewährten 68k-Prozessoren gedacht war. Diese CPUs zeichnen sich durch höhere Taktfrequenzen im Vergleich zur Dragonball-Serie bei weitreichender Code-Kompatibilität aus.
Im Vergleich zu den Embedded- PowerPC-Prozessoren der MPC8xx-Serie ist die Coldfire-CPU preisgünstiger und weniger komplex.
ARM 7
ARM-Prozessoren gibt es von mehreren Herstellern. Einige davon haben aus Kostengründen auch hier die MMU wegrationalisiert, so dass die bereits vorhandene ARM-LinuxPortierung auf diesen Prozessoren zunächst nicht verwendbar war. Die französische Firma Aplio hat eine Portierung auf ARM7TDMI durchgeführt, die unter [10] zu finden ist.
Axis Etrax
Die schwedische Firma Axis hat sich durch die Entwicklung des einzigen Open-Source-Bluetooth-Stacks für Linux einen Namen gemacht. Seit einiger Zeit verwendet Axis auch für ihre Netzwerk-Produkte (Printserver, Stand-alone-Webcams etc.) den eigenen Etrax-100LX-Prozessor, der auch für Drittfirmen als IC und Entwicklungssystem [12] erhältlich ist.
Dazu wurde uClinux von Axis auf den Etrax portiert, natürlich auch die benötigten Binutils und der Gcc-Compiler zur Cross-Compilierung. Zusammen mit dem Axis Journaling Flash Filesystem (JFFS) hat man in Schweden also eine komplette Embedded-Lösung entwickelt, die vollständig Open Source ist.
intel 960
Intels 960 ist ein relativ unbekannter, aber weit verbreiteter Embedded-Prozessor. Nachdem Intels Versuch mit dem i860 eine RISC-CPU zu etablieren Anfang der 90er Jahre nicht von Erfolg gekrönt war, wurde die Architektur mit einigen Änderungen für den Embedded-Markt als i960 recycled und kommt in vielen Produkten (zum Beispiel Laserdruckern) zum Einsatz.

Abb. 3: Den Intel i960 gibt es in verschiedenen Bauformen – uClinux läuft mit allen
Intel konzentriert ihre Embedded-Aktivitäten aber mittlerweile mehr auf die von Digital übernommene Strong-ARM-Architektur.
Sparc
Eine Sparc ohne MMU ist recht ungewöhnlich. Aber Sparc-CPUs kommen auch im Embedded-Bereich zum Einsatz – bei uClinux sogar als Open Hardware. Die European Space Agency (ESA) hat eine unter der GNU LGPL stehende Implementation einer Sparc V8 CPU ohne MMU namens LEON in VHDL entwickelt [23], die auf FPGAs zum Einsatz kommen kann. uClinux wurde von Lineo als passendes Betriebssystem dazu portiert [24].
Userland
Doch nicht nur der Kernel muss den Anforderungen eingebetteter Systeme angepasst werden. Auch die gesamte Userland-Umgebung, also Systemprogramme und Bibliotheken einer normalen Linux-Distribution, ist schlecht für Systeme mit kleinem Speicher angepasst.
BusyBox |
|
BusyBox vereint Versionen vieler Unix-Tools in ein einziges kleines Programm. Dabei zaubert es eine recht komplette POSIX-Umgebung für Embedded Systems. Selbst die mit der Glibc statisch gelinkte x86-Version benötigt gerade mal 500 KByte. Dabei ersetzt BusyBox ein ganzes /bin-Verzeichnis! Folgende Kommandos sind integriert: ar, basename, cat, chgrp, chmod, chown, chroot, chvt, clear, cp, cut, date, dc, dd, deallocvt, df, dirname, dmesg, dos2unix, du, dumpkmap, dutmp, echo, expr, false, fbset, fdflush, find, free, freeramdisk, fsck.minix, getopt, grep, gunzip, gzip, halt, head, hostid, hostname, id, init, insmod, kill, killall, length, ln, loadacm, loadfont, loadkmap, logger, logname, ls, lsmod, makedevs, md5sum, mkdir, mkfifo, mkfs.minix, mknod, mkswap, mktemp, more, mount, mt, mv, nc, nslookup, ping, poweroff, printf, ps, pwd, rdate, reboot, renice, reset, rm, rmdir, rmmod, sed, setkeycodes, sh, sleep, sort, swapoff, swapon, sync, syslogd, tail, tar, tee, telnet, test, [ , touch, tr, true, tty, umount, uname, uniq, unix2dos, unrpm, update, uptime, usleep, uuencode, uudecode, wc, which, whoami, xargs, yes und zcat |
Allen voran die Glibc, die für sich schon mehr Speicher verbraucht als Embedded Systems überhaupt zur Verfügung stellen, bedarf der Überarbeitung. Deshalb wurden kleine Werkzeuge entwickelt, welche die grundlegenden Funktionen der jeweiligen Unix-Programme implementieren und teilweise mehrere Unix-Tools in einem ausführbaren Programm miteinander vereinen.
uClibc
uClibc hat eine lange und verworrene Geschichte. Sie entstand aus der Linux-8086-Library (einem Bestandteil des ELKS-Projekts) mit Teilen aus der Libc4, Glibc und Code aus vielen anderen Quellen. uClibc steht unter der LGPL und ist größtenteils unabhängig von Kernel-Header-Dateien.
Mit uClibc ist das berühmte “Hello World”-Programm gerade mal 4 KByte groß – mit Glibc gelinkt benötigt es mehr als 200 KByte!
Dietlibc und Newlib
Diese beiden Libraries – zu finden unter [27] und [28] – sind zwei Alternativen zu uClibc, die ebenfalls einen Blick wert sind. Dietlibc ist sehr portabel gehalten und unterstützt momentan die Plattformen Alpha, ARM, x86, MIPS, PowerPC und Sparc. Die Entwicklung von Newlib, die auch mit dem Echtzeitbetriebssystem Ecos verwendet werden kann, wird von Red Hat unterstützt.
TinyLogin
TinyLogin ist eine Sammlung von Unix-Programmen, die für Logins, Authentisierung, Passwortänderung und anderen Funktionen für das Verwalten von Benutzern und Gruppen bei Embedded Systems zuständig ist. TinyLogin ist die ideale Ergänzung zur BusyBox, kann aber natürlich auch ohne sie verwendet werden.
Für uClinux entwickeln
Für die Entwicklung von Treibern und Applikationen für das geplante Embedded System wird wohl niemand ernstlich in Erwägung ziehen auf dem Zielsystem selbst zu kompilieren. Also muss die Entwicklungsarbeit auf einem Hostsystem stattfinden, bevorzugt natürlich einem Linux-Rechner.
Aktuelles: Kernel 2.4
Da uClinux auf Kernel 2.0 basiert, vermisst man einige Features der aktuellen Kernel-Versionen wie etwa Irda, USB und Quality of Service für Netzverbindungen. Die 2.4er Version ist momentan für Dragonball- und ColdFire-Prozessoren verfügbar – mit weiteren Portierungen ist in der nächsten Zeit zu rechnen.
Doch ist der gegenwärtige Stand der 2.4er Portierung noch nicht überzeugend. Als Plattformen werden nur der NetTel mit ColdFire-5307-Prozessor und Xcopilot als Emulator mit Dragonball unterstützt. Bei dieser Version ist zudem die Interrupt-Vektortabelle bei der Portierung durcheinander gekommen. Die ColdFire-Version leidet zurzeit noch unter einigen Memory Leaks. Es ist aber damit zu rechnen, dass diese Probleme bald behoben werden. ( bku) n
Der Autor |
|
Michael Engel beschäftigt sich seit einigen Jahren mit RISC-Prozessoren und Linux. Seit neuestem interessieren ihn Embedded Linux und der Einsatz von Linux in mobilen Geräten. |







