Download Tagungsband.qxd

Transcript
M. Fuchs / M. Sturm / D. Lippik
Speicheradresse ist demnach prinzipiell egal, solange der Bootloader sie kennt. Zur
Laufzeit wird der Kernel im dynamischen Speicher ausgeführt, sodass er komprimiert
gespeichert werden kann. In der Regel wird er in Form des so genannten zImages verwendet, dass beim Kompilieren automatisch erstellt wird. Das Archiv ist selbstentpackend und enthält den Kernel in komprimierter Form. Bevor es durch den Bootloader
gestartet wird, kopiert dieser es vom statischen in den dynamischen Speicher. Auch der
Kernel muss, genau wie der Bootloader, auf die Zielhardware portiert werden, insofern
sie nicht bereits unterstützt wird. Dies ist sehr zeitaufwendig und verlangt vom
Entwickler ein sehr großes Know-How über den Aufbau und die Funktionsweise des
Kernels. Der Aufwand dafür ist umso größer, je weniger verwendeten
Hardwarekomponenten durch Treiber bereits unterstützt werden. Aber auch wenn eine
Portierung für die Hardwareplattform vorhanden ist, gestaltet sich die Konfiguration des
Kernels viel schwieriger als beim Bootloader. Letztlich hängt die Größe des zImages sehr
stark von der gewählten Konfiguration ab. Die Größe des Kernels für die easyToWebARM-Platine beträgt mit TCP/IP-Stack ca. 1 MiB.
Für die Implementierung des Root-Dateisystems existieren verschiedene Möglichkeiten.
Zum einen ist das Speichern in unkomprimierter Form möglich. Meist werden aber die
Kernkomponenten eines einmal erstellten Root-Dateisystems nicht verändert, sodass es
durchaus sinnvoll ist, es komprimiert statisch zu speichern und es beim Systemstart in
den dynamischen Speicher zu entpacken. Speziell dazu unterstützt der Kernel die
Verwendung eines Initial-Ramdisk-Images. Wenn der Bootloader dem Kernel die Position
des komprimierten Root-Dateisystems mitteilt, ist dieser in der Lage, es automatisch zu
entpacken und, wie in Abb. 1 bereits dargestellt, den init-Prozess zu starten. Vernachlässigt man die Zeit für eine mögliche Portierung des Kernels und des Bootloaders, so ist
das Erstellen eines Root-Dateisystems der aufwändigste Prozess bei der Implementierung eines Embedded-Linux-Systems. Nichtsdestotrotz kommt diesem Arbeitsschritt
eine hohe Bedeutung zu, weil er den Speicherbedarf des Gesamtsystems maßgeblich
beeinflusst. In [4] wird sehr detailliert beschrieben, wie ein Root-Dateisystem Schritt für
Schritt erstellt werden kann. Als Alternative für diese so genannte „From-Sratch“Variante bietet sich die Verwendung einer Embedded-Linux-Distribution an, die entweder Teil eines Linux-BSP ist, die aber auch im Internet als Open-Source-Lösung verfügbar ist. Ein Beispiel für eine solche Distribution ist Embedded Debian. Meist muss der
Entwickler die Distribution aber entsprechend den Anforderungen anpassen. Das für die
easyToWeb-ARM-Platine exemplarisch implementierte Root-Dateisystem hat eine Größe
von ca. 3.5 MiB und das daraus erstellte Initial-Ramsik-Image ca. 1.6 MiB.
Falls das Root-Dateisystem zur Laufzeit im dynamischen Speicher ausgeführt wird, gibt
es zunächst keine Möglichkeit, Daten, wie zum Beispiel Messwerte, statisch zu speichern. Eine Lösung ist die Verwendung eines zusätzlichen Dateisystems auf einer
Partition des statischen Speichers. Dieses Dateisystem kann dann in das RootDateisystem eingebunden werden. Ein für Flash-Speicher geeignetes Dateisystem ist
JFFS2.
36
Tagungsband 8. Nachwuchswissenschaftlerkonferenz FH Jena