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)

Linux

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

  1. Die Linux Installation
  2. Wlan konfigurieren
  3. Installieren der WiringPi Bibliothek

Projekte

  1. Eine LED mittels GPIO-Pin ansteuern

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.

  1. Image entpacken
  2. Win32DiskImager starten
  3. Mit einem Klick auf das Ordnersymbol öffnen wir den Explorer und suchen unser Image
  4. Zielquelle wählen (Laufwerksbuchstabe von dem SD Card-Reader/Writer)
  5. Mit "Write" Schreibvorgang starten
  6. Den Win32DiskImager beenden und die Speicherkarte aus dem Card Reader entnehmen.

Unter Linux ist es auch sehr einfach:

  1. Image entpacken
  2. Mit dem Kommando df -h nachsehen welche Discs gemountet sind
  3. SD Karte in Ihren SD Card-Reader/Writer einstecken
  4. erneut mit df -h nachsehen welche Discs gemountet sind
    Die neu hinzu gekommene Disc ist ihre SD Karte.
  5. 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.
  6. 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.
  7. 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:

  1. Image entpacken
  2. Starten sie df -h vom Terminal
  3. SD Karte in Ihren SD Card-Reader/Writer einstecken
  4. erneut mit df -h nachsehen welche Discs gemountet sind
    Die neu hinzu gekommene Disc z.B. /dev/disk1s1 ist ihre SD Karte.
  5. Unmounten dieser Disc damit ein überschreiben möglich ist. Kommando: diskutil unmount /dev/disk1s1
  6. Den Disk Namen für das raw device ermitteln: /dev/disk1s1 --> /dev/rdisk1 (aus disk wird rdisk, s1 wird weggelassen)
  7. Kommando: sudo dd bs=1m if=~/Downloads//*.img of=/dev/rdisk1
  8. 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.

raspi-confi-menü

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:

  1. Wir clonen den Quellcode auf den Raspberry Pi.
    pi@raspberry:~$ sudo git clone git://git.drogon.net/wiringPi
    
  2. Und wechseln in das neu erstellte Verzeichnis wiringPi.
    pi@raspberry:~$ cd wiringPi
    
  3. 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 ansteuern

Der 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.

LED

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