• Keine Ergebnisse gefunden

Funktionsbestimmende Applikationen

3.2 Das Userland

3.2.2 Funktionsbestimmende Applikationen

# [Init Utilities][init]

...

quade@felicia:~/embedded/qemu/userland/busybox-1.21.1> make ...

quade@felicia:~/embedded/qemu/userland/busybox-1.21.1> make install ...

quade@felicia:~/embedded/qemu/userland/busybox-1.21.1> cd ../..

quade@felicia:~/embedded/qemu>./mkrootfs.sh ...

Wenn Sie jetzt per start_el.sh das selbst gebaute System im Emulator booten, sollte es vom Entwicklungsrechner aus über das Netzwerk er-reichbar sein.

3.2.2 Funktionsbestimmende Applikationen

Um dem Embedded Linux die Funktion eines Webservers zu geben, sind die folgenden Schritte notwendig:

1. In Busybox die Funktion httpd freischalten, Busybox generieren und in-stallieren

2. Die Konfigurationsdatei httpd.conf im Verzeichnis userland/target/

anlegen

3. Die Webseite index.html im Verzeichnis userland/target/ anlegen 4. Das Skript ps.cgi im Verzeichnis userland/target/ anlegen

5. Generierungsskript mkrootfs.sh anpassen, sodass httpd.conf, in-dex.html und ps.cgi ins Image kopiert werden

6. Target-System per mkrootfs.sh generieren

Für die funktionsbestimmenden Applikationen steht im Umfeld einge-betteter Systeme meist nur eine eingeschränkte Umgebung zur

Verfü-3.2 Das Userland 59

gung. Insbesondere fehlt häufig ein Framework für dynamische Biblio-theken, sodass eigene Programme statisch gelinkt werden müssen.

Das bisher von uns aufgebaute System soll die Funktion eines Webser-vers bekommen, der neben einer statischen Webseite als dynamischen Inhalt die Liste der aktiven Rechenprozesse in einer zweiten Webseite darstellen soll (Abb. 3-7).

Der auf Serversystemen übliche Webserver Apache wird im Bereich eingebetteter Systeme nur in Ausnahmefällen eingesetzt. Er ist komplex, benötigt viele Ressourcen und eben auch eine umfangreiche Unterstüt-zung durch das System. In eingebetteten Systemen wird auf einfachere Varianten, beispielsweise den Webbserver boa oder lighttpd, zurückge-griffen. Auch Busybox bringt einen Webserver mit, der für unsere Zwe-cke ausreichend und dabei sehr schlank und einfach ist.

Neben dem Webserver benötigen wir noch die Inhalte, die Websei-ten. Webseiten sind technisch nach dem HTML-Format aufgebaut. In unserem Fall soll eine statische und eine dynamische Webseite zur Ver-fügung gestellt werden. Statische Webseiten sind direkt im Filesystem als HTML-Dateien abgelegt. Demgegenüber werden dynamische Web-seiten von Skripten oder Programmen generiert, die der Webserver eventuell mit Parametern versehen startet. Sie generieren dann eine HTML-Seite, die dem Webserver als Ergebnis geliefert wird. Der Web-server reicht diese Webseite an den anfragenden Webbrowser (Client) weiter.

Als Programmiersprachen für die Skripte wird häufig PHP oder Perl eingesetzt, sie lassen sich aber auch als normale Shellskripte erstellen.

Abb. 3-7 Dynamische Inhalte werden per Skript generiert.

<html>

<h1>Hi, I am your embedded system!</h1>

</html>

Die Webseiten des Servers (HTML-Seiten und Skripte) befinden sich ty-pischerweise unterhalb des Verzeichnisses /var/www/. Der Webserver selbst benötigt meist noch eine Konfiguration, die im Verzeichnis /etc/

abgelegt wird.

Um den Webserver in dem eingebetteten System zu installieren, sind damit die folgenden Aufgaben zu bewerkstelligen (siehe Beispiel 3-7):

❑ In der Busybox-Konfiguration muss unter dem Auswahlpunkt [Net-working Utilities] der Webserver httpd ausgewählt werden. Danach wird Busybox neu generiert und installiert.

❑ Sie müssen dafür sorgen, dass der HTTP-Server httpd auf Ihrem ein-gebetteten System automatisch gestartet wird. Das können Sie bei-spielsweise über eine Modifikation des Skripts rcS auf dem Entwick-lungsrechner im Verzeichnis userland/target/ bewerkstelligen. Hier fügen Sie die Zeile »httpd -c /etc/httpd.conf« am Ende der Datei ein.

❑ Auf dem Target, dem eingebetteten Linux-System, werden drei Da-teien benötigt, die Sie auf dem Entwicklungsrechner per Editor un-terhalb des Verzeichnisses userland/target/ erstellen:

❑ Der Webserver benötigt eine Konfiguration, die in Beispiel 3-6 zu sehen ist. Insbesondere benötigt der Webserver für die Aus-führung von Skripten die Angabe des zugehörigen Interpreters.

Beispiel 3-4

Die Konfigurationsdatei httpd.conf, die diese Information ent-hält, muss auf dem eingebetteten System in /etc/ abgelegt sein, was von mkrootfs.sh durchgeführt wird.

❑ Die statische Webseite muss mit beispielsweise dem Inhalt aus Beispiel 3-4 als Datei mit dem Namen index.html erstellt werden.

❑ Das Skript zur Generierung der dynamischen Webseite soll mit dem Inhalt aus Beispiel 3-5 als normales Shellskript unter dem Namen ps.cgi erstellt werden.

❑ Das Generierungsskript mkrootfs.sh muss angepasst werden. Dabei müssen im Rootfilesystem des eingebetteten Systems die Verzeich-nisse für die Webserverinhalte angelegt werden (/var/www/

und /var/www/cgi-bin/). Außerdem müssen die drei Dateien in das Rootfilesystem an die richtige Stelle kopiert werden. Im Skript

mkrootfs.sh ist dafür zwischen den Markierungen B und C der nach-folgende Code einzufügen:

# MARK B

sudo mkdir -p loop/var/www/cgi-bin/

sudo install -m 644 target/index.html loop/var/www/

sudo install -m 755 target/ps.cgi loop/var/www/cgi-bin/

sudo install -m 644 target/httpd.conf loop/etc

# MARK C

❑ Das System wird schließlich durch Aufruf von ./mkrootfs.sh gene-riert.

quade@felicia:~/embedded/qemu>cd userland/target/

quade@felicia:~/embedded/qemu/userland/target> gedit rcS &

quade@felicia:~/embedded/qemu/userland/target> gedit index.html &

quade@felicia:~/embedded/qemu/userland/target> gedit ps.cgi &

quade@felicia:~/embedded/qemu/userland/target> gedit httpd.conf &

quade@felicia:~/embedded/qemu/userland/target> cd ../busybox-1.21.1/

quade@felicia:~/embedded/qemu/userland/busybox-1.21.1> make menuconfig ...

# [Networking Utilities][httpd] Webserver zur Auswahl hinzufügen ...

quade@felicia:~/embedded/qemu/userland/busybox-1.21.1> make

quade@felicia:~/embedded/qemu/userland/busybox-1.21.1> make install quade@felicia:~/embedded/qemu/userland/busybox-1.21.1> cd ../..

quade@felicia:~/embedded/qemu> gedit mkrootfs.sh &

quade@felicia:~/embedded/qemu> ./mkrootfs.sh # System generieren quade@felicia:~/embedded/qemu> ./start_el.sh # System testen Beispiel 3-7

Kommandos, um dem Embedded Linux eine Aufgabe zu geben

Wenn Sie nach diesen Vorbereitungen das Userland neu generiert ha-ben, können Sie mit Qemu durch Aufruf von start_el.sh testen. Rufen Sie dazu von Ihrem Entwicklungsrechner (nur von diesem aus gibt es über Qemu die Verbindung zum emulierten System) einen Browser auf und geben Sie die URL http://10.69.0.99/index.html ein. Nun muss eine HTML-Seite mit dem Text »Hi, I am your embedded system!« erschei-nen (Abb. 3-8). Rufen Sie danach die URL 10.69.0.99/cgi-bin/ps.cgi auf.

Jetzt müssten Sie eine Liste der aktiven Rechenprozesse in Ihrem Web-browser sehen (Abb. 3-7). Ist das der Fall — herzlichen Glückwunsch

— haben wir unser Ettapenziel erreicht.

Wenn's schiefgeht ...

Sollten Sie Schwierigkeiten haben, können Sie die Ursache wieder mithilfe der auf den Webseiten zum Buch abgelegten Dateien eingrenzen. Die Datei rootfs.img.x86_64_2 ist ein funktionierendes Systemimage, das auf die IP-Adresse 10.69.0.99 konfiguriert ist. Funktioniert das Qemu-Netzwerk, müss-ten Sie mit diesem auf die Webseimüss-ten zugreifen können.

Die zugehörige Busybox-Konfiguration finden Sie in der Datei config.busy-box-1.21.1.qemu_2. Sie können diese wieder auf die Datei busy-box-1.21.1/.config kopieren. Die neue Version des Skripts zur Generierung des Rootfilesystems ist unter dem Namen mkrootfs.sh_B auf den Webseiten zu finden, das Skript zur Systeminitialisierung unter rcS_B.

Abb. 3-8 Der Webserver auf dem Embedded System

3.2 Das Userland 63