4.4 Linux für eingebettete Systeme
245
Hardware
Architekturabhängiger Code
Systemaufruf-Schnittstelle
Ein-/Ausgabe
Prozessverwaltung
KernModule
Gerätetreiber
Systembibliotheken (z.B. libc)
Anwendungen
Dateisysteme
Netzwerk
Gerätespez. Code
Scheduler
Speicherverwaltg.
IPC
Abb. 4.14 Struktur eines typischen Linux-Systems
Android ® -Systeme verwenden anstelle von libc die Bionic-Bibliothek, die von BSDUnix-Varianten abgeleitet ist. Bionic ist dafür entworfen worden, Systeme mit geringerer Rechenleistung zu unterstützen. Dies geschieht z.B. durch die Bereitstellung
einer maßgeschneiderten Version der pthreads Multithreading-Bibliothek, die effizient die in Android verwendete Java-VM Dalvik unterstützt. Die Codegröße von
Bionic beträgt ungefähr die Hälfte einer typischen glibc-Version14.
libc-Version
musl
uClibc dietlibc
glibc
Größe der statischen Bibliothek
426 kB 500 kB 120 kB 2.0 MB
Größe der dynamischen Bibliothek
527 kB 560 kB 185 kB 7,9 MB
Minimale Größe C-Programm, statisch gelinkt
1,8 kB
5 kB
0,2 kB 662 kB
Minimale Größe „Hello, World”, statisch gelinkt
13 kB
70 kB
6 kB 662 kB
Abb. 4.15 Größenvergleich verschiedener libc-Konfigurationen für Linux
Daneben existieren aber auch weitere deutlich kleinere Implementierungen der
C-Bibliothek, wie z.B. newlib, musl, uClibc, PDCLib und dietlibc. Jede dieser
Varianten ist für einen bestimmten Anwendungsfall optimiert, so ist z.B. musl für
den Einsatz in statisch gelinkten Programmen optimiert. uClibc wurde ursprünglich
für Linux-Systeme ohne Speicherverwaltungseinheit (MMU)15 entwickelt, wogegen
newlib eine plattformunabhängige C-Bibliothek ist, die auch für verschiedene andere
Betriebssystemplattformen verfügbar ist. Die Größen der zugehörigen Binärdateien
14 Die Größe der glibc-Bibliothek beinhaltet allerdings umfangreichere Unterstützung für Internationalisierung.
15 Eine Einführung in MMUs findet sich in Anhang C.
245
Hardware
Architekturabhängiger Code
Systemaufruf-Schnittstelle
Ein-/Ausgabe
Prozessverwaltung
KernModule
Gerätetreiber
Systembibliotheken (z.B. libc)
Anwendungen
Dateisysteme
Netzwerk
Gerätespez. Code
Scheduler
Speicherverwaltg.
IPC
Abb. 4.14 Struktur eines typischen Linux-Systems
Android ® -Systeme verwenden anstelle von libc die Bionic-Bibliothek, die von BSDUnix-Varianten abgeleitet ist. Bionic ist dafür entworfen worden, Systeme mit geringerer Rechenleistung zu unterstützen. Dies geschieht z.B. durch die Bereitstellung
einer maßgeschneiderten Version der pthreads Multithreading-Bibliothek, die effizient die in Android verwendete Java-VM Dalvik unterstützt. Die Codegröße von
Bionic beträgt ungefähr die Hälfte einer typischen glibc-Version14.
libc-Version
musl
uClibc dietlibc
glibc
Größe der statischen Bibliothek
426 kB 500 kB 120 kB 2.0 MB
Größe der dynamischen Bibliothek
527 kB 560 kB 185 kB 7,9 MB
Minimale Größe C-Programm, statisch gelinkt
1,8 kB
5 kB
0,2 kB 662 kB
Minimale Größe „Hello, World”, statisch gelinkt
13 kB
70 kB
6 kB 662 kB
Abb. 4.15 Größenvergleich verschiedener libc-Konfigurationen für Linux
Daneben existieren aber auch weitere deutlich kleinere Implementierungen der
C-Bibliothek, wie z.B. newlib, musl, uClibc, PDCLib und dietlibc. Jede dieser
Varianten ist für einen bestimmten Anwendungsfall optimiert, so ist z.B. musl für
den Einsatz in statisch gelinkten Programmen optimiert. uClibc wurde ursprünglich
für Linux-Systeme ohne Speicherverwaltungseinheit (MMU)15 entwickelt, wogegen
newlib eine plattformunabhängige C-Bibliothek ist, die auch für verschiedene andere
Betriebssystemplattformen verfügbar ist. Die Größen der zugehörigen Binärdateien
14 Die Größe der glibc-Bibliothek beinhaltet allerdings umfangreichere Unterstützung für Internationalisierung.
15 Eine Einführung in MMUs findet sich in Anhang C.
