Computer
Das Betriebssystem Linux ist aus meiner
täglichen Arbeit mit dem PC nicht mehr
wegzudenken. Dabei haben mich sowohl die
Möglichkeiten als auch die Philosophie von
Linux immer fasziniert und in ihren Bann
gezogen, auch wenn ich oftmals auf "leichtes"
Unverständnis stieß.
"Software is like sex: it's better when
it's free."
(Linus Torvalds)

Was ist Linux?
Linux ist ein scheinbar junges Betriebssystem
für Computer, das 1991 von Linus Torvalds auf
einem i386 entwickelt wurde. Da er mit seinem
Betriebssystem das alte Unix nachprogrammierte,
reichen die Wurzel bis zum Anfang der siebziger
Jahre zurück. Das aus verschiedenen Teilen
bestehende Betriebssystem wird von
Softwareentwicklern auf der ganzen Welt
weiterentwickelt. Es befindet sich schon seit
Jahren auf der Überholspur und stellt heute
eine echte und vor allem kostengünstige
Alternative zu Windows dar. Linux ist für viele
ein Betriebssystem, an das sie sich nicht recht
heranwagen, da es Gerüchten zufolge, der Umgang
mit komplizierten Befehlen notwendig ist.
Längst vorbei sind die Zeiten, in denen Linux
nur von Informatikern installiert und über
komplizierte Kommandos bedient werden konnte.
Der Umgang mit Befehlen kann in der Regel durch
die Verwendung von verschiedenen
Administrationstools umgangen werden. Trotzdem
haben erfahrende Nutzer auch weiterhin die
Möglichkeit, die von den grafischen Tools
verwendeten Befehle direkt und damit schneller
einzusetzen. Die Einsatzbereiche von Linux sind
vielfältig, so läuft es z.B auf
Desktop-Rechnern, Servern, Mobiltelefonen,
Routern, Multimedia-Endgeräten und auf
Supercomputern. Wobei bei Supercomputern Linux
mit 75% die Top-500 der Supercomputer weltweit
anführt. Linux verlangt von seinem Benutzer das
er bereit ist ständig dazuzulernen, dafür
bekommt er die volle Kontrolle über sein
System. Was die Applikationen unter Linux
betrifft, so reicht die Auswahl frei
verfügbarer Programme vom Office-Paket über
Datenbanken.
Mehr Infos zu Linux und der Entwicklung findest
du hier
Wiki Linux.
Mein neues Spielzeug: Der Raspberry Pi
Der Raspberry Pi ist ein kleiner Einplatinencomputer mit ARM11-Prozessor. In Linux Kreisen sorgt die scheckkartengroße Platine schon seit einiger Zeit für Aufsehen und ist mit knapp 40 Euro recht erschwinglich. Eigentlich wurde er entwickelt und hergestellt, um bei Kindern die Freude am Programmieren zu wecken. Zur besseren Einschätzung der Leistung des Raspberry Pi, erst mal ein paar Technische Eigenschaften der Version B:
- Broadcom BCM2835 700 MHz ARM1176JZFS-Prozessor
- 512 MB RAM
- SD-/SDHC-Kartenslot (dienst als Laufwerk für das System)
- 10/100 BaseT-Ethernet-Buchse (Modell B)
- HDMI-Videobuchse
- RCA Composite Video-Buchse
- 2x USB 2.0-Buchse (Modell B), 1x USB 2.0-Buchse (Modell A)
- Stromversorgung über microUSB-Buchse
- 3,5-mm-Jack für Audioausgang
- Stiftleiste für GPIO
- Platz für Stiftleiste zum Anschluss einer Kamera
- Größe: 85,6 x 53,98 x 17 mm
Als Betriebssystem, für den Raspberry Pi, habe ich eine ARM Version vom Debian-Derivat Raspbian “wheezy” installiert. Wie ich das Linux-System installiert habe, wird weiter unten beschrieben. Die Verwendungszwecke für den Winzling sind natürlich vielfältig, ich denke darüber nach, ob ich mein Zuhause damit etwas mehr automatisieren kann oder den “kleinen Linux Zwerg” als eine Art Datenserver einzusetzen und alle meine mobilen und stationären Geräte damit zu verbinden. Darüber könnte ich dann auch meinen Drucker als Netzwerkdrucker betreiben. Natürlich habe ich noch viele andere Ideen in meinem Kopf, man könnte z.B. die Gartenbewässerung automatisch steuern oder das Garagentor mit Siri öffnen. Anfangen werde ich mit einem kleinen Projekt um ein paar Hardwarenahe Programme zu schreiben. Interessant ist hier natürlich die Hardwareschnittstelle über die GPIO-Ports.
Anleitungen
Projekte
Die Linux Installation
Raspbian-Image auf SD-Karte installieren
Hier beschreibe ich die Linux Installation, sowie die notwendige Konfiguration, nach dem ersten Bootvorgang des Raspberry PI. Ich habe mich für die Raspbian Distribution von Debian entschieden. Raspbian basiert auf Debian "wheezy" und wurde speziell für die Raspberry Pi Hardware optimiert. Das Raspbian Image wird auf eine SD-Karte mit mindestens 2GB Speicherkapazität installiert.
Raspbian herunterladen.
Das Raspbian Image kann über den folgenden Link geladen werden:
Nach erfolgreichem Download des ZIP-Archives sollte überprüft werden, ob es fehlerfrei und vollständig übertragen wurde.
Das Image auf die SD-Karte schreiben.
Die Installation von Raspbian unter Windows ist sehr einfach: Man benötigt dazu das Programm: Win32DiskImager.
- Image entpacken
- Win32DiskImager starten
- Mit einem Klick auf das Ordnersymbol öffnen wir den Explorer und suchen unser Image
- Zielquelle wählen (Laufwerksbuchstabe von dem SD Card-Reader/Writer)
- Mit "Write" Schreibvorgang starten
- Den Win32DiskImager beenden und die Speicherkarte aus dem Card Reader entnehmen.
Unter Linux ist es auch sehr einfach:
- Image entpacken
- Mit dem Kommando df -h nachsehen welche Discs gemountet sind
- SD Karte in Ihren SD Card-Reader/Writer einstecken
- erneut mit df -h nachsehen welche Discs
gemountet sind
Die neu hinzu gekommene Disc ist ihre SD Karte. - Kommando als root user eingeben: unmount /dev/sdd1 /* Kann auch anders heißen Das unmounten ist notwendig damit Daten mit nachfolgendem Kommando auf die Disc geschrieben werden können.
- Kommando als root user eingeben:
dd bs=1M if=~/<ordner>/*.img of=/dev/sdd Das dd Kommando hat keine Fortschrittsanzeige und es kann ein wenig dauern. - Kommando eingeben: sync Damit alle Daten sicher auf die SD Karte geschrieben wurden und die SD Karte entnommen werden kann.
Das Schreiben des Images für MAC-User geht am besten so:
- Image entpacken
- Starten sie df -h vom Terminal
- SD Karte in Ihren SD Card-Reader/Writer einstecken
- erneut mit df -h nachsehen welche Discs
gemountet sind
Die neu hinzu gekommene Disc z.B. /dev/disk1s1 ist ihre SD Karte. - Unmounten dieser Disc damit ein überschreiben möglich ist. Kommando: diskutil unmount /dev/disk1s1
- Den Disk Namen für das raw device ermitteln: /dev/disk1s1 --> /dev/rdisk1 (aus disk wird rdisk, s1 wird weggelassen)
- Kommando: sudo dd bs=1m if=~/Downloads//*.img of=/dev/rdisk1
- Kommando eingeben:
diskutil eject /dev/rdisk1
Der erste Start.
Nun die vorbereitete SD Karte in den Raspberry Pi stecken. Hiernach die Tastatur und Maus mit den USB-Anschlüssen des Raspberry Pi verbinden. Jetzt fehlt noch der Monitor. Entweder schließen wir ihn über den HDMI-Anschluss an ein HDMI-fähiges Wiedergabegerät oder wir benutzen den Composite Videoausgang. Wenn Sie den Raspberry Pi mit einem LAN Kabel an ihr Netzwerk angeschlossen haben, dann wird er versuchen über DHCP eine IP Adresse zu bekommen. Hat der Raspberry Pi Verbindung mit dem Internet, besteht schon beim ersten Start die Möglichkeit das Betriebssystem zu aktualisieren. Als letztes verbinden wir das Netzteil mit der micro-USB_Buchse. Wenn alles funktioniert blinken die LEDs auf der Leiterplatte und der Bildschirm füllt sich mit Meldungen. Nach einer Weile erscheint dann das Konfigurationsmenü "Raspi-config" für die Ersteinrichtung. Es hilft dabei, die wichtigsten Einstellungen des Systems vorzunehmen. Das Menü wird mit der Tastatur bedient. Mit der Pfeil-unten-Taste erreicht man den nächsten Menüpunkt und mit der Pfeil-oben-Taste gelangt zum vorhergehenden Punkt zurück. Die Select-Schaltfläche selektiert man durch Drücken der Tabulator- oder Pfeil-rechts-Taste. Mit der Leer- oder Returntaste wird der Menüpunkt zu aktiviert.
Wir fangen mit dem Punkt "expand_rootfs" an. Das Image des Betriebssystems ist es für eine SD-Karte mit 2 GB Speicher ausgelegt. Benutzt man eine größere Speicherkarte, kann der restliche verfügbare Speicherplatz der Systempartition hinzugefügt werden. Der eigentliche Prozess dieser Anpassung läuft beim nächsten Hochfahren ab.
Über den Menüpunkt "configure_keyboard" kann man die Tastaturbelegung auswählen. In den meisten Fällen reicht es aus, als Tastatur German und dann Generic 105-key (Intl) PC zu wählen.
Über den Punkt "change_locale" bestimmen wir Zeichensatz und Sprache des Systems. Wir setzen die Locale auf "de_DE.UTF-8 UTF-8" indem wir den Punkt mit der Leertaste markieren. Durch einem Druck auf die TAB-Taste gelangen wir auf die Schaltfläche "Ok" und wählen nun nochmal "de_DE.UTF-8" aus. Es dauert ein wenig, bis die Einstellungen gändert sind.
Mit "change_timezone" wählen wir die richtige Zeitzone. Wir nehmen Europa (Europe) Und in Europa natürlich Berlin.
"ssh" bietet die Möglichkeit den Raspberry Pi von einem anderen Rechner aus zu bedienen. Wir sollten diese Möglichkeit einschalten.
Mit der Schaltfläche "finish" verlassen wir das Hauptmenü. Beim erneuten Start des Raspberry Pi wird "Raspi-config" nicht automatisch mehr ausgeführt. Es kann aber im Terminal immer wie folgt aufrufen werden:
pi@raspberry:~$ sudo raspi-config
Nun sollte erst einmal das System auf den neusten Stand gebracht werden. Durch die Eingabe von:
pi@raspberry:~$ sudo apt-get update && sudo apt-get upgrade
wird die Datenbank des Paketmanagers auf den neuesten Stand gebracht und veraltete Pakete werden durch neue ersetzt. Es empfiehlt sich diesen Schritt, in regelmäßigen Abständen, durchzuführen.
Wlan konfigurieren
Nun möchte ich den Raspberry PI über Wlan in das Netzwerk einbinden. Hierfür verwende ich einen EDIMAX EW-7811UN USB-Wlan Adapter. Hierfür lasse ich die kabelgebundene Netzwerkverbindung bestehen, um mich per SSH mit dem Raspberry Pi zu verbinden.
Die Installation
- Zuerst wird der USB-Adapter an die USB-Buchse des Raspberry Pis angesteckt und danach wir fahren den Pi hoch.
- Nach dem Einloggen geben wir den Befehl
pi@raspberry:~$ sudo lsusb
ein, welcher alle am USB angeschlossenen Geräte auflistet. Der letzte Eintrag ist der Wlan USB-Stick. Er zeigt, dass hier der Edimax EW-7811UN-Adapter mit einem RTL8188CUS-Chipsatz von Realtek angeschlossen ist. - Der Edimax EW-7811UN-Adapter sollte vom
Kernel automatisch erkannt und das
entsprechende Treibermodul geladen werden. Die
Präsenz des passenden Gerätetreibers wird durch
Eingabe von lsmod festgestellt. Das
Kernel-Modul heißt 8192cu und nach diesem wird
mit folgendem Kommando gesucht.
pi@raspberry:~$ sudo lsmod | grep -i 8192cu
- Bei geladenem Modul sollte der USB-Adapter beim Aufruf von iwconfig als WLAN-Schnittstelle aufgeführt werden.
- Um nun eine Verbindung mit unserem WLAN
herzustellen, müssen wir die Datei
/etc/network/interfaces editieren mit:
pi@raspberry:~$ sudo nano /etc/network/interfaces
Hier suchen wir etwaige Einträge die mit der Bezeichnung "wlan0" bezeichnet sind und passen den Inhalt an.auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ap-scan 1
wpa-scan-ssid 1
wpa-ssid "WLAN-NAME"
wpa-psk "WLAN-SCHLÜSSEL" - Die IP-Nummer wird durch diese
Einstellungen automatisch zugewiesen. Den
Raspberry PI mit
pi@raspberry:~$ sudo poweroff
ausschalten und die kabelgebundene Netzwerkverbindung trennen. Beim Neu-Start wird automatisch die Wlan Verbindung hergestellt.
Installieren der WiringPi Bibliothek
Für die Ansteuerung der GPIOs, wird die Bibliothek WiringPi gebraucht, sie kann in C, C++, Python, Java und PHP eingebunden werden. Voraussetzung für eine Installation der WiringPi Bibliothek ist das Paket git-core. Git ist ein dezentrales Versionsverwaltungssystem, es unterscheidet sich als dezentrales System von den traditionellen Programmen wie CVS und Subversion. Wir testen das Vorhandensein von git-core durch die Eingabe von:
pi@raspberry:~$ sudo git -version
Erhalten wir eine Meldung dass das Paket nicht vorhanden ist, installieren wir es durch:
pi@raspberry:~$ sudo apt-get install git-core
Jetzt sind die Voraussetzungen für eine Installation der WiringPi Bibliothek erfüllt. Wir laden den Quellcode von GitHub herunter und kompilieren ihn anschließend. Dies erledigen wir durch die folgenden drei Punkte:
- Wir clonen den Quellcode auf den Raspberry
Pi.
pi@raspberry:~$ sudo git clone git://git.drogon.net/wiringPi
- Und wechseln in das neu erstellte
Verzeichnis wiringPi.
pi@raspberry:~$ cd wiringPi
- Abschließend kompilieren und installieren
wir wiringPi.
pi@raspberry:~$ sudo ./build
WiringPi ist nun erfolgreich installiert, falls alle Schritte ohne Fehler durchgeführt werden.
Eine LED mittels GPIO-Pin ansteuernDer Raspberry Pi bietet einige GPIO's (General Purpose Input/Output), die über die Steckerleiste 'P1' nach außen geführt sind. Die GPIO Pins sind als 3,3V Signale ausgeführt und nicht TTL kompatibel. Dabei übernehmen bestimmte Pins neben der einfachen Ansteuerung auch bestimmte Funktionen wie die Kommunikation per I2C, UART oder SPI.
P1: GPIO-Belegung:
wiringPi Pin |
BCM GPIO |
Name | Pinleiste | Name |
BCM GPIO |
wiringPi Pin |
---|---|---|---|---|---|---|
– | – | 3.3v | 1 | 2 | 5v | – | – |
8 | R1:0/R2:2 | SDA0 | 3 | 4 | 5v | – | – |
9 | R1:1/R2:3 | SCL0 | 5 | 6 | 0v | – | – |
7 | 4 | GPIO7 | 7 | 8 | TxD | 14 | 15 |
– | – | 0v | 9 | 10 | RxD | 15 | 16 |
0 | 17 | GPIO0 | 11 | 12 | GPIO1 | 18 | 1 |
2 | R1:21/R2:27 | GPIO2 | 13 | 14 | 0v | – | – |
3 | 22 | GPIO3 | 15 | 16 | GPIO4 | 23 | 4 |
– | – | 3.3v | 17 | 18 | GPIO5 | 24 | 5 |
12 | 10 | MOSI | 19 | 20 | 0v | – | – |
13 | 9 | MISO | 21 | 22 | GPIO6 | 25 | 6 |
14 | 11 | SCLK | 23 | 24 | CE0 | 8 | 10 |
– | – | 0v | 25 | 26 | CE1 | 7 | 11 |
wiringPi Pin |
BCM GPIO |
Name | Pinleiste | Name |
BCM GPIO |
wiringPi Pin |
P5: Erweiterungsanschluss nur auf Revision 2 Leiterplatten:
wiringPi Pin | BCM GPIO | Name | Pinleiste | Name | BCM GPIO | wiringPi Pin |
---|---|---|---|---|---|---|
– | – | 5v | 1 | 2 | 3.3v | – | – |
17 | 28 | GPIO8 | 3 | 4 | GPIO9 | 29 | 18 |
19 | 30 | GPIO10 | 5 | 6 | GPIO11 | 31 | 20 |
– | – | 0v | 7 | 8 | 0v | – | – |
wiringPi Pin |
BCM GPIO |
Name | Pinleiste | Name |
BCM GPIO |
wiringPi Pin |
Der Raspberry Pi dient als Basis für einen minimalen Versuchsaufbau, der zum Ziel hat eine LED blinken zu lassen, sozusagen ein blinkendes "Hello World". Der ganze Versuchsaufbau eignet sich gut als Einstiegsprojekt, da es die Grundlagen der Hard- und Software behandelt. Ich habe eine LED und einen 330 Ohm Widerstand mit den Pin 11 (= GPIO 17 = WiringPi Pin 0) und den Pin 14 (Masse) verbunden.

Das erste Programm
Es wird ein möglichst einfaches aber garantiert funktionierendes Programm benötigt, welches in den Editor Nano eingegeben oder hinein kopiert wird.
pi@raspberry:~$ sudo nano blink.c
Der Quellcode:
#include <wiringP.h>
int main () {
// WiringPi-Api
wiringPiSetup () ;
// Schalte GPIO 17 (=WiringPi Pin 0) auf Ausgang
// Achtung: WiringPi Layout anwenden (siehe Tabelle oben)
pinMode (0, OUTPUT) ;
// Dauerschleife
for (;;)
{
// LED an
digitalWrite (0, HIGH) ;
// Warte 500 ms
delay (500) ;
// LED aus
digitalWrite (0, LOW) ;
// Warte 500 ms
delay (500) ;
}
}
Das kleine C-Programm lässt eine LED an einem Raspberry Pi blinken. Die LED wird alle 500 ms an bzw. ausgeschaltet. Die Bibliothek wiringPi.h muss installiert sein.
Nun wird das Skript kompiliert:
pi@raspberry:~$ gcc -Wall -o blink blink.c -lwiringPi
und mit Root-Rechten gestartet:
pi@raspberry:~$ sudo ./blink