Dass Embedded Linux kein Hexenwerk sein muss, zeigt das Gnublin-Board der Hochschule Augsburg. Wer lernen will, wie er auf einem ARM-Linux Sensoren ausliest, Schalter benutzt und LEDs schaltet, ist bei dem kleinen Rechner richtig. Gegen Aufpreis gibt es eine stattliche Liste an Zubehör.
Als Lern- und Ausbildungsplattform der Hochschule Augsburg präsentiert sich das Gnublin-Board [1]. Mit Goblins, den Kobolden aus Tolkiens Welt, hat das Mini-Gerät außer der Namensähnlichkeit wenig zu tun. Gnublin steht eher für die Kombination aus GNU, Board und Linux und verbindet einen Kernel 2.6.33 mit einer ARM9-CPU, zahlreichen Schnittstellen und Beispielprogrammen.
Hochschule Augsburg
Die Hardware produziert der ARM-Spezialist Embedded Projects [2] in Zusammenarbeit mit dem Augsburger Lehrstuhl für Technische Informatik [3]. Alle Daten, Pläne, Programme und Specs gibt es als Open Source im Internet. Das Board kostet rund 50 Euro und ist für diesen Preis gut ausgestattet (Tabelle 1). Die Dokumentation lädt zum spielerischen Lernen typischer Embedded-Anwendungen ein. Erfahrenen Anwendern helfen zahlreiche Erweiterungen (Abbildung 1).

Abbildung 1: Im Lauf der Zeit sammelt der Gnublin-Entwickler jede Menge zusätzliche Hardware und Bastler-Werkzeuge: 1 Gnublin-LPC3131-Board, (2) Micro-SD-Karte (1 bis 4 GByte), (3) Adapter von Mini-USB auf USB-A-Buchse zum Anschließen von USB-Geräten an den USB-OTG-Host, (4) USB-zu-Ethernet-Adapter mit Pegasus-Chip, 5 Batterie/Akku (Vorsicht: Die extern eingespeiste Spannung darf nicht höher als 6 Volt sein!), 6 USB-Bluetooth-Adapter D-Link DBT-120, 7 USB-zu-seriell-Adapter mit Ftdichip FT2232, 8 USB-zu-seriell-Adapter mit Silabs CP2102, 9 USB-Flash-Dongle, (10) USB-Audio-Adapter Speedlink VIGO (Alsa und Ogg-Vorbis), (11) und (12) USB-Hubs, (13) DOG-Display mit SPI-Anschluss, (14) USB-Kartenleser für Micro-SD-Speicherkarten, (15) Adapter USB-A zu USB-B – und nicht zu vergessen der (16) Schraubenzieher. Dazu kommen je nach Interessengebiet integrierte Schaltungen, LEDs oder Sensoren.
Mit dem knapp 7 mal 7 Zentimeter kleinen Board (Abbildung 2, Tabelle 1) lässt sich auch schnell loslegen. Im Lieferumfang enthalten sind ein passendes USB-Kabel und eine Speicherkarte mit vorinstalliertem Linux. Der linke der beiden Mini-USB-Anschlüsse versorgt den Kleincomputer mit Strom und stellt die Verbindung zum PC her. Dort installiert der Anwender ein Konsolenprogramm, zum Beispiel Picocom, und startet:
sudo picocom -b 115200 /dev/ttyUSB0
Weil aber erst beim Einstecken des USB-Kabels das Betriebssystem auf dem Gnublin-Board bootet und die virtuelle serielle Schnittstelle »/dev/ttyUSB0« anlegt, sollte sich der Benutzer nach dem Einschalten ein oder zwei Sekunden gedulden, bevor er Picocom aufruft.
Bootvorgang
Im Erfolgsfall macht das den PC zur Konsole des Gnublin-Boards. Der Anwender sieht vielleicht– wenn er schnell genug ist – sogar noch die letzten Meldungen des Systemstarts. Ein APEX-Bootloader [4] auf der SD-Karte lädt den Linux-Kernel, der mountet das Rootsystem und wartet danach mit einem Login-Prompt auf Eingaben (linkes Terminal in Abbildung 3):

Abbildung 3: Links die Picocom-Konsole auf dem Gnublin-Board mit den letzen Bootmeldungen des ELDK-Linux, rechts die Netzwerkkonfiguration auf dem Steuer-PC. Oben rechts zeigt ein Browserfenster den erfolgreichen Zugriff auf den Lighttpd-Webserver, der auf dem Gnublin-Board läuft.
EDLK (Built by Poky 5.0) 5.0 armv5te ttyS0 armv5te login:
Wie an einer Remote-Shell kann sich jetzt der Anwender als Root (ohne Passwort) anmelden und die Arbeit am System aufnehmen. Hat er genug, beendet die Tastenkombination [Strg]+[A],[Strg]+[X] die Verbindung. Damit das auch unter Windows klappt, bedarf es vor dem Anstecken des Board noch der USB-RS-232-Treiber [5] und einer geeigneten Terminalanwendung.
ELDK, Yocto, Poky und Open Embedded Linux
Nach erfolgreichem Login landet der Benutzer in einem gut 600 MByte umfassenden Linux-System mit vielen Tools. Darunter sind auch Programme, die auf dieser Hardware nicht ohne Weiteres funktionieren, zum Beispiel X-Window oder Werkzeuge, deren Einsatz auf der schmalbrüstigen CPU wenig Sinn ergibt, zum Beispiel der C-Compiler. Die verwendete Distribution Embedded Linux Development Kit (ELDK) in Version 5.0 [6] basiert auf dem umfangreichen Embedded-Baukasten Yocto [7], der wiederum Poky [8] und als Kern Open Embedded Linux [9] verwendet.
Wer Python mag, fühlt sich darin schnell heimisch, die Skriptsprache steuert dort mit Tools wie Bitbake [10] auch den Bauprozess der Pakete. Debian-ARM-Pakete, überträgt »alien -t« in ein »tar.gz« -Skript, das der Admin anschließend einfach im Root-Dateisystem entpackt.
Professor Dr. Hubert Högl von der HS Augsburg hat auf diese Weise “ohne Probleme schon RRDtool, Gnuplot, Alsa, Ogg-Vorbis und anderes zum Laufen gebracht”. Anstelle von ELDK ließe sich auch gleich Debian als Basis nehmen, fehlende Pakete installiert dann Apt-get. “Es gibt ja mittlerweile von fast jeder Distribution eine ARM-Variante”, so Högl zum Linux-Magazin.
Ein Vorteil des Gnublin-Boards gegenüber anderen Plattformen ist die Auswahl von gut dokumentierten Schnittstellen, die sich unter Linux einfach übers Dateisystem ansteuern lassen. Mehrere GPIO-Pins (General Purpose Input/Output, [11]) sind vorhanden und gut dokumentiert. Die rote LED auf dem Board beispielsweise ist über GPIO3 erreichbar, einfach via Sys-Filesystem.
Das Arbeiten mit Sensoren und Eingängen lernen
Unter »/sys/class/gpio« aktiviert ein »echo 3 > export« das Unterverzeichnis »gpio3« . Der Anwender wechselt hinein und findet dort zwei Dateien namens »direction« und »value« . Ein »cat out > direction« legt GPIO3 als Ausgang fest, »echo 1 > value« schaltet die LED ein, mit »echo 0« geht sie wieder aus.
Einfache Skripte, mit denen die LED zum Beispiel das Blinken lernt, liegen als Beispiele in verschiedenen Sprachen bereits im Homeverzeichnis von Root. Listing 1 zeigt ein Bash-Programm, Listing 2 sein Lua-Pendant. Weitere Programme und Beispiele finden sich auf der Gnublin-Webseite [12].
Listing 1
blink.sh
01 #!/bin/sh
02
03 # Blink the onboard LED
04 # http://blog.makezine.com/archive/2009/02/blinking-leds-with-the-beagle-board.html
05
06 GPIO=3
07
08 cleanup() { # Release the GPIO port
09 echo $GPIO > /sys/class/gpio/unexport
10 exit
11 }
12
13 # Open the GPIO port
14 #
15 echo $GPIO > /sys/class/gpio/export
16 echo "high" > /sys/class/gpio/gpio$GPIO/direction
17
18 trap cleanup SIGINT # call cleanup on Ctrl-C
19 # Blink forever
20 while [ "1" = "1" ]; do
21 echo 1 > /sys/class/gpio/gpio$GPIO/value
22 sleep 1
23 echo 0 > /sys/class/gpio/gpio$GPIO/value
24 sleep 1
25 done
26
27 cleanup # call the cleanup routine
Listing 2
blink.lua
01 -- blink.lua
02 GPIO = 3
03
04 function wait(n)
05 os.execute("sleep " .. tonumber(n))
06 end
07
08 function cmd(c)
09 print(c)
10 os.execute(c)
11 end
12
13 cmd("echo " .. GPIO .. " > /sys/class/gpio/export")
14 cmd("echo out > /sys/class/gpio/gpio" .. GPIO .. "/direction")
15 n = 0
16 while n < 2 do
17 cmd("echo 1 > /sys/class/gpio/gpio" .. GPIO .. "/value")
18 wait(1)
19 cmd("echo 0 > /sys/class/gpio/gpio" .. GPIO .. "/value")
20 wait(1)
21 n = n + 1
22 end
23 cmd("echo ".. GPIO .." > /sys/class/gpio/unexport")
GPIO11 als geschalteter Eingang
GPIO11 bietet sich für einen ähnlichen Test als Eingang an:
echo 11 > export cd gpio11 echo in > direction cat value
In der Datei »value« findet sich anschließend entweder eine »1« oder eine »« , wobei die 1 einer Spannung von 3,3 Volt am angeschlossenen Schalter entspricht. Mehr Infos zu den Eingängen bietet [13]. Mit der eingebauten Hardware sind auch komplexere Tricks möglich, zum Beispiel Pulsweiten-Modulation (PWM, [14]), die dabei hilft, analoge Spannungen zu erzeugen oder Servomotoren anzusteuern. Ein Artikel dazu findet sich auf Linux-Magazin Online Plus.
Pseudo-Netzwerk über die USB-Schnittstelle
Wer will, kann auch ohne USB-Ethernetkabel dem Gnublin-Board ein Pseudo-Netzwerk über USB spendieren. Dazu sollte er zunächst das Board von der Versorgungsspannung trennen und die Jumper »USB OTG PWR« und »USB OTG ID« auf »Device« setzen (Abbildung 4). Die älteren Boards der Generation 1.2 besitzen keinen Jumper »USB OTG ID« , der den USB-Port beim Booten dazu zwingt, die Host-Rolle anzunehmen (ID »« ). Ab Version 1.3 lassen sich dank diesem Jumper auch USB-Adapterkabel verwenden, die den ID-Pin nicht beschalten. Die meisten Kabel verfügen jedoch über diese Funktion, erkennbar am weißen Inneren des Steckers.
DELUG-DVD
Auf der DELUG-DVD liegen die Beispielskripte aus dem Artikel, der Schaltplan des Gnublin-Boards und einige weitere hilfreiche Demoprogramme.
Nach dem Einschalten der Stromversorgung verbindet der Anwender beide USB-Anschlüsse des Boards mit dem PC und verbindet sich kurz darauf mit der Konsole. Dort lädt er mit »modprobe g_ether« das notwendige Ethernetmodul und verpasst der neuen Schnittstelle »usb0« mit Ifconfig eine IP (Listing 3).
Listing 3
modprobe g_ether
01 root@desktop-pc:~# picocom -b 115200 /dev/ttyUSB0 02 root@armv5te:~# modprobe g_ether 03 g_ether gadget: using random self ethernet address 04 g_ether gadget: using random host ethernet address 05 usb0: MAC 2e:dd:9a:ed:d2:48 06 usb0: HOST MAC 56:e5:4d:4b:18:84 07 g_ether gadget: Ethernet Gadget, version: Memorial Day 2008 08 g_ether gadget: g_ether ready 09 fsl-usb2-udc: bind to driver g_ether 10 g_ether gadget: high speed config #1: CDC Ethernet (ECM)
Jetzt kann er am Desktoprechner prüfen, ob der das neue Netzwerkgerät (auf dem zweiten USB-Kabel) gefunden hat, und es mit Kommandos wie »ifconfig usb0 Lokale_IP up« und »ping Adresse_des_Gnublin-Boards« konfigurieren.
Lighttpd
Der kleine ARM-Rechner ist zwar kein Leistungswunder, kann aber mit Dropbear oder Lighttpd auch als SSH- oder Webserver dienen. Letzteres gelingt mit dem Beispielskript »lighttpd-init.sh« aus Listing 4, Abbildung 3 zeigt den Erfolg im Browser. Ins LAN gelangt das Board aber erst mit USB-Netzwerk-Hardware.
Listing 4
lighttpd-init.sh
01 #!/bin/sh 02 if [ ! -d /var/log/lighttpd ] ; then 03 mkdir /var/log/lighttpd 04 chmod 777 /var/log/lighttpd/ 05 touch /var/log/lighttpd/error.log 06 fi 07 chmod 666 /var/log/lighttpd/error.log 08 /etc/init.d/lighttpd start
Infos
- Gnublin-Projekt: http://www.gnublin.org
- Embedded Projects GmbH:http://www.embedded-projects.net
- Hochschule Augsburg, Lehrstuhl für Technische Informatik, Prof. Högl: http://www.hs-augsburg.de/~hhoegl
- APEX-Bootloader: http://elinux.org/APEX_Bootloader
- Windows-Treiber: http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
- ELDK Linux: http://www.denx.de/wiki/DULG/ELDK
- Yocto-Projekt: http://www.yoctoproject.org
- Poky: http://www.pokylinux.org
- Open Embedded: http://www.openembedded.org
- Bitbake: http://bitbake.berlios.de
- GPIO: http://en.wikipedia.org/wiki/General_Purpose_Input/Output
- Programme und Skripte: http://www.gnublin.org/index.php?title=ApplicationNotes
- Die ADC-Eingänge des Gnublin: http://www.gnublin.org/index.php?title=AppNote-AP0018
- Pulsweitenmodulation mit Gnublin: http://www.gnublin.org/index.php?title=AppNote-AP0019








