54 Titelthema Linux-Magazin 07/06 Dietlibc © photocase.com Zügig Dietlibc minimiert den Speicherbedarf von -Programmen und macht C-Programme fit für den Einsatz auf Embedded-Systemen mit minimalen Ressourcen. Wo jedes Byte zählt, speckt Dietlibc das System ab: Die überschaubare C-Bibliothek ersetzt die Standard-Glibc Auf einer tionalität verwendet. mentale Ein- und Ausgabefunktionen so Systems,funda des die C-Bibliothek die ist Linux-Programme aller fast Basis Die notwendig ist. unbedingt als beanspruchen, mehr Speicher nicht daher dürfen programme schnell an die Grenzen, einfache Spezial- Systems.Embedded sind man stößt Hier dafür Bereich wichtiger ein kommt, satz aus,wenn Hardwareminimale Ein zum dagegen es sieht Anders an. mehr nicht weniger oder mehr KByte hundert paar es nur einen kleinen Teil der Glibc-Funk Welt“ „Hallo in C verbraucht 400 KByte, klassisches obwohl ein selbst Ausweg, sparsameren wesentlich keinen bietet Linken statisches Auch Hauptspeicher. den vollständigin MByte System 2 diese das lädt Programmen gelinkten misch als 2 MByte auch sehr groß ist. Bei dyna mehr mit aber Funktionalität, an reich zwar die Einsatz, zum Glibc C- bereitstellt. Meist kommt dafür die GNU- wie andere häufig benötigte Operationen Workstation kommt es auf ein abnehmen - - - - - ezct u kmlx Agrtmn so Algorithmen komplexe auf Verzicht der sorgen Speicherbedarf geringen den Für Wesentliche. das beschränkt auf Dietlibc sich Funktionalität puncto In Diät für C-Programme zum Einsatz kommt. beispiels weise der Exit-Code, falls »atexit()« nicht schrumpft damit gelangen; Programm ins Funktionen verwendeten ker-Trickssicher, die ausschließlich dass Lin stellen hinaus Darüber Funktionen. unterschiedlichen der wechselseitiger Abhängigkeiten Minimierung die wie gelinkt nur noch 1,3 KByte. statisch Welt“benötigt „Hallo einander: unter Dietlibc-Code des Module denen verschie der Affinität geringen sehr ner ei Platzgewinnresultiertaus größte Der KByte.500 einmal gerade sie wiegt setzt Über geschrieben. neu auf Grund von Dietlibc Helfer seine und Leitner von lix Fehaben Dazu bleiben. zu wartbar mit so und übersichtlich dabei und zeugen mit dem Ziel, optimierte Binaries zu er zu Binaries optimierte Ziel, dem mit oe u bris existieren bereits aus Code e CBbitee zusam C-Bibliotheken den cro Clibc, (Mi Uclibc heißt davon Eine eignen. Embedded-Systemen in Einsatz den für besonders deshalb sich und anspruchen die deutlich weniger Speicher be C-Bibliotheken, native e Dietlibc Bei noch keine Winzlinge. immer oft aber sind Glibc, der die als aus kleiner deutlich zwar fallen Binaries erzeugte Uclibc Mit haben. optimiert und mengetragen Für Linux gibt es zwei alter zwei es gibt Linux Für sich um ein jüngeres Projekt jüngeres ein um sich [4] ), deren Autoren [1] adl es handelt ------wie Dietlibc die Glibc an die Ansi-Standards. die Des sich hält C-Bibliothek Als Da sich viele Programmierer an BSD-Ei an Programmierer viele sich Da Erweiterungen übersetzt »make« den Code. Dabei zeigt Dabei Code. den »make« übersetzt Nach dem Entpacken des Dietlibc-Pakets ihrer Codebasis erschweren. unwissentlich nutzen und die Portierung nicht sie Software neuer Programmierer damit ausgeschaltet, Voreinstellung der in Dietlibc-Entwickler die C-Stan haben dards des Erweiterungen Derartige »WANT_MALLOC_ZERO«. mit akti will, es aber viert wer 99; C Ansi zwar nicht entspricht Verhalten Dies lässt. vergrößern »realloc()« mit später sich Speicherbereich dessen liefert, Pointer gültigen einen »malloc(0)« dass darauf, rierbar. Einige Programme verlassen sich konfigu »dietfeatures.h« Datei die über sind Dietlibc der Eigenschaften Weitere »-lcompat« hinzufügt. BSD_SOURCE«, »-D_GNU_SOURCE« und »-D_ Parameter die Compiler-Optionen den er indem einbinden, Lib immer compat und Defines diese sollte möchte, übersetzen Modifikationen ohne C-Code thek namens Libcompat aus. Wer Biblio seinen separate eine in Dietlibc lagert »daemon()« oder »getline()« wie rungen Erweite Funktionale »_GNU_SOURCE«. und »_BSD_SOURCE« Defines die durch Type-Definitionen zusätzliche bietet Dietlibc verlassen, GNU-Erweiterungen gehörenden C-Standard zum nicht die auf sich oder haben gewöhnt genheiten tion) und weitere Posix-Standards. Specifica Unix (Single v2 SUS auch libc Über Ansi C hinaus implementiert Diet implementiert hinaus C Ansi Über SoftwareKompilationvorausgesetzt.der erneute die austauschbar, weitgehend auch Bibliotheken beiden die sind halb René Rebe ------Titelthema Abbildung 1: Mit schon erfolgreich zum Einsatz. Auch Dietlibc kompilierte Hotplug++, die C++-Implementation Programme des Hardware-Managers, verwendet Em- beanspruchen im bedded STL bereits.

Vergleich zu Glibc Für eingebettete Systeme liegen auch Dietlibc nur einen Bruchteil optimierte, Ressourcen-sparende Versio- des Speichers. Bei nen der unumgänglichen Unix-Tools vor. Verwendung von Neben der recht bekannten Sammlung 55 »gcc -Wall« weisen Busybox [6], die die umfangreicheren Warnings auf mögliches Binutils ersetzt, gibt es optimierte Versi- Sparpotenzial hin. onen von Init-Systemen, HTTP-Servern,

Shells, Grep, Sed und vielem mehr. Voll- 07/06 Linux-Magazin ständige Listen enthalten die Seiten von sich bereits der Größenunterschied zu reits dynamische Bibliotheken. Dazu ist Dietlibc [1] und Uclibc [4]. Glibc: Der Kompiliervorgang nimmt nur Dietlibc mit »make dyn« zu kompilieren. Wer sich entschieden hat, ein Projekt mit wenige Minuten in Anspruch, bei Glibc Nach der Installation steht zusätzlich Dietlibc zu realisieren, möge sich auch selbst auf neuen Rechnern fast eine der Wrapper »dyn-diet« bereit, der äqui- die Patches des T2-Projekts [3] ansehen. Stunde. Wer Dietlibc für eine fremde valent zu »diet« funktioniert. Sie enthalten neben wichtigen Bugfixes Plattform kompiliert, erreicht das mit: Die Unterstützung für dynamische Bi- auch Korrekturen für exotischere Archi- bliotheken befindet sich jedoch noch im tekturen sowie Patches für andere Open- make ARCH=arm CROSS=arm-linux- Experimentierstadium und ist darum mit Source-Pakete. Die Installation erledigt anschließend Vorsicht zu genießen. Damit erzeugte Bi- »make install«. Die Bibliothek und die naries sollte der Programmierer ausgie- Fazit Headerdateien landen standardmäßig im big testen, bevor sie in den produktiven Verzeichnis »/opt/diet«. Außerdem ist Einsatz kommen. Dietlibc verringert in Umgebungen mit das Programm »diet« enthalten. Dabei Auch die mathematische Bibliothek Lib- begrenzten Ressourcen den Bedarf an handelt es sich um einen Wrapper, der M ist für einige Architekturen noch nicht Speicherplatz sowohl auf dem Datenträ- die Include-Pfade, die C-Bibliothek so- vollständig implementiert. Im typischen ger als auch im Hauptspeicher erheblich. wie die Start- und Stopp-Objekte einfügt. Einsatzgebiet der Dietlibc, in Embedded- Das ermöglicht es, Linux auch auf Syste- Letztere kümmern sich um den Start- Systemen, spielen ihre Funktionen glück- men mit äußerst knappen Kapazitäten code sowie den Umgang mit »atexit()« licherweise ohnehin kaum eine Rolle. einzusetzen. Auch auf sicherheitskriti- und behandeln – falls konfiguriert – Kon- schen Serversystemen sollten Admins struktoren und Destruktoren in objekt- C++ mit Embedded STL den Einsatz der Dietlibc in Betracht zie- orientierten Programmen. hen, da die schlanke C-Bibliothek wegen Wer ein neues Programm statt mit Glibc Da die in GCC enthaltene Standard Tem- des geringeren Code-Umfangs einfacher mit Dietlibc verlinken will, verwendet plate Library (STL) für C++ gegen die als die Glibc zu evaluieren ist. den folgenden Compiler-Aufruf, Abbil- C-Bibliothek des Systems gelinkt wird, Viele Distributionen setzen außerdem dung 1 zeigt das Resultat: lassen sich C++-Programme allerdings in ihren Initial-RAM-Disks (Initrd) und nicht ohne weiteres gegen die Dietlibc Installationsumgebungen schon länger diet gcc -Os -o hallo hallo.c linken; dazu müsste man die gesamte auf Dietlibc, weil damit kompilierte Pro- Der Wrapper ist erforderlich, weil der STL erneut übersetzen. Eine wesentlich gramme auch schneller starten als die Compiler sonst die systemweite C-Bibli- einfachere, aber noch unvollständige Glibc-Kollegen. (csc) ■ othek verwendet, also gewöhnlich Glibc. Lösung entsteht mit dem Projekt Embed- Ohne ihn müsste man alle benötigten ded STL [5]. Analog zur Dietlibc imple- Optionen bei jedem Compiler-Aufruf mentiert diese Bibliothek eine minimale Infos manuell hinzufügen oder einen zweiten, Standard Template Library mit geringem [1] Dietlibc: [http:// www. fefe. de/ dietlibc] entsprechend modifizierten GCC instal- Platzbedarf. [2] Weitere Dietlibc-Informationen: lieren; diesen Weg beschreitet beispiels- Die Konstruktoren und Destruktoren von [http:// www. fefe. de/ dietlibc/ diet. pdf] weise Uclibc. C++-Objekten funktionieren jedoch nur [3] Patch-Sammlung für Dietlibc: [http:// www. Bei auf Autoconf basierenden Paketen bei einer mit der Option »WANT_DYNA- t2-project. org/ packages/ dietlibc. html] reicht folgender Aufruf, um ein passen- MIC« kompilierten Dietlibc, auch wenn [4] Uclibc: [http:// www. . org] des Makefile zu erzeugen: der Programmierer nur statische Bina- [5] Embedded STL: [http:// www. exactcode. de/ ries erzeugen will. Zurzeit implementiert embeddedSTL] CC="diet -Os gcc -D_GNU_SOURCE -D_BSD_U Embedded STL jedoch nicht den gesam- [6] Busybox: [http:// www. . net] SOURCE" ./configure ten Umfang der C++-STL, es fehlen ei- [7] Single Unix Specification: Für einige Architekturen wie x86, x86- nige Container und Algorithmen. Im [http://de.wikipedia.org/wiki/Single_Unix_ 64 und ARM unterstützt die Dietlibc be- Embedded-Bereich kommt sie dennoch Specification]