54
V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

Embed Size (px)

Citation preview

Page 1: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 1

Embedded SystemsHardware unter Linux mit dem FoxboardG20steuern

- Digitale Signale- Analoge Signale

Autor: StD Michael Kaufmann

Page 2: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 2

Foxboard G20 im Internet

• Wichtige Web-Seiten:foxg20.acmesystems.iteshop.acmesystems.it/?id=FOXG20elmicro.com/de/foxboard.html (Zur Zeit nicht)

• Zugriff auf das Foxboard zum Üben cbs.selfhost.me im Raum R411 (CBS)k49.selfhost.me nur nach Absprache

Herrn Jan Arnold hat mich bei der Erstellung des Scripts enorm unterstützt. Dafür möchte ich

mich sehr herzlich bedanken.

Page 3: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 3

Erste Techniker Arbeit (2006): WBOT mit dem FoxboardLX16

• Kettenfahrzeugmit Schrittmotoren

• Router mit 4 Ports und WLAN

• Foxboard LX16

• IP-WebCAM

• 12 Volt Akku

• 2 LED-Leuchten

Page 4: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 4

Zweite Techniker-Arbeit: EIB-Haus

Client-Rechnermit Browser

Internet

oder

LAN Router mit Switch

http://miniweb.cbs-heidelberg.de

Page 5: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 5

Software-Feature des Foxboard G20

• Einfache Installation von Applikationen durch die Verwendung des Atmel-Controllers aus der ARM9-Serie und einem frei wählbaren Linux-Betriebssystem Linux Distributionen: Debian, Gentoo, OpenWRT, OpenEmbedded

• Internetdienste: Web-Server, FTP-Server, Gateways, etc.

• Volle Unterstützung von vielen Programmiersprachen: C, C++, Python, Perl, Java, PHP, Basic, Fortran, etc

Page 6: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 6

Hardware-Features FoxboardG20• Netus G20 mit 400MHz Atmel Mikrocontroller AT91SAM9G20• 2 USB 2.0 host ports (12 MBits per second)• One Ethernet 10/100 MBit/s port • One USB device port (12 MBits per second)• One debug serial port (3.3V); (RS232, V24, COM1, S0)• 2 serial ports (3.3V); (RS232, V24, COM1, S0)• On-board microSD socket (up to 16GB)• Real Time Clock (RTC) with on-board lithium backup battery• GPIO lines (3.3V oder 1.8V)• 4 A/D converter lines (10-Bit Auflösung)• I2C-Bus und SPI-Bus• 5V DC power supply; stabilisiert ist wichtig• durchschnittliche Leistungsaufnahme: 0,4 Watt (80 mA bei 5V) ohne microSD, ethernet link, USB devices oder andere Peripherie. • Temperatur-Bereich: von -15°C bis +70°C

Page 7: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 7

Die Platine

Page 8: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 8

RS232-Adapter für den S0-Debug-Port

Über die serielle Schnittstelledes Foxboard (Debug-Port)und des PC (COMx) und einem Terminalprogramm (Hyperterminal oder Putty) wird der PC zum Terminal

für das Foxboard. Der gesamte Bootvorgang kann verfolgt werden.

Page 9: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 9

Vorbereitungen am PC• Das Programm Putty ist notwendig, um auf das Linux-

Betriebssystem des Foxboard zuzugreifen.– Download : http://www.putty.nl/download.html– Putty ist im NAL unter Betriebssysteme vorhanden.

• Putty starten und konfigurieren (siehe nächste Folie).• An den RS232-Adapter des Foxboards ein 9 poligen 1:1

Sub-D-Kabel sehr vorsichtig anschließen und mit der COM-Schnittstelle des PCs oder einem RS232-USB-Adapter verbinden.

• Foxboard an eine stabilisierte 5V-Spannungsversorgung anschließen. – Wenn an den USB-Schnittstellen des Foxboards keine zusätzlichen USB-

Geräte angeschlossen sind, kann das Foxboard auch über die 5V einer USB-Schnittstelle des PCs versorgt werden.

Page 10: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 10

RS232-Einstellungen bei PuttyPutty für serielle COM-Schnittstelle konfigurieren:• COMx-Schnittstelle im Gerätemanager feststellen, wichtig bei USB-RS232-Adapter

• Einstellungen vornehmen:Serial line: COMxSpeed: 115200

• Bei Category - Serial kontrollieren:

Page 11: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 11

Foxboard starten und beenden

• Warten bis login: erscheint.• Eingabe bei login: root • Eingabe bei Password: cbsg20• reboot fährt das Linuxbetriebssystem herunter

und startet es neu.• init 0 oder halt fährt das Linuxsystem herunter.

Kann nur durch Trennung der Spannung neu gestartet werden.

Sobald das Foxboard mit 5V versorgt wird, startet Linux.

Bevor das Foxboard G20 von der Spannungsversorgung getrennt wird, muss das Linuxbetriebssystem unbedingt

heruntergefahren werden bis zur Meldung: Power down

Page 12: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 12

Übung 1• Foxboard über RS232-Schnittstelle mit einem 9 poligen 1:1 Sub-

D Kabel vorsichtig mit der COMx-PC-Schnittstelle verbinden.• Wenn ein USB-RS232-Adapter notwendig ist, im Gerätemanager

die COMx-Nummer nachschauen. • Putty konfigurieren.• Foxboard an 5V anschließen und Startvorgang beobachten.• In das Linux-Betriebssystem einloggen.

– User: root / Passwort: cbsg20

• Mit dem Linuxbefehl reboot das Betriebssystem neu starten. Startvorgang beobachten.

• Wieder einloggen und die Zeit zwischen Befehl halt und der Meldung Power down stoppen und aufschreiben.– Mit init 0 oder halt das Betriebssystem herunterfahren.– Warten bis die Meldung Power down erscheint.– Jetzt erst die Stromversorgung trennen.

Page 13: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 13

Netzwerkzugriff auf das Foxboard mit TCP/IP• Beim TCP/IP-Protokoll kann eine IP-Adresse fest

vorgegeben oder durch einen DHCP-Dienst dynamisch zugewiesen werden.

• Fragen bei der Vergabe der IP-Adresse:– Dynamische IP

• Ist ein DHCP-Server aktiv.• Welche IP-Adresse ist vergeben worden.

– Feste (statische) IP• Ist die fest vergebene IP im bestehenden Netzwerk ansprechbar.• Wie kann man die feste IP herausfinden, ändern.

• IP-Begriffe: Netzwerk-Adresse, Subnetmask, Gateway• Für das R411-Intranet gilt für die IP-Vergabe :

Netzwerk-Adresse (IP): 10.1.0.0 Subnetmask: 255.255.0.0Gateway-IP: 10.1.1.32 (Server mit Routerfunktion)

Page 14: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 14

IP-Konfiguration bei eth0 (Patchkabel)• eth0 steht für den Ethernet-Netzwerkadapter mit der

Rj45-Buchse und dem Patchkabel.• Im Verzeichnis /etc/network ist die Datei interfaces.

In dieser Datei wird die IP-Konfiguration festgelegt.• Eintrag für statische Zuweisung der IP-Adresse für das

Foxboard x (x steht für 1 bis 9): auto eth0# dynamic IP#iface eth0 inet dhcp

# static IPiface eth0 inet staticaddress 10.1.9.xnetmask 255.255.0.0gateway 10.1.1.32

# (Rauten) sind Kommentare.

Wichtig: Auf die Rauten unter der Zeile dynamic IP achten.

Die Rauten unter der Zeile static IP müssen entfernt werden.

Page 15: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 15

IP-Konfiguration bei WLAN-Dongel• Wegen der WLAN-Verschlüsselung müssen noch die Accesspoint-

Daten angegeben werden.

Inhalt von wpa_supplicant:ctrl_interface=/var/run/wpa_supplicantnetwork={ ssid=”meine SSID“ psk=”mein Schluessel“}

Inhalt von /etc/network/interfaces: auto wlan0# dynamic IP#iface wlan0 inet dhcp# static IPiface wlan0 inet static address 10.1.9.x netmask 255.255.0.0 gateway 10.1.1.32

wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Page 16: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 16

Übung 2a• In das Linuxsystem über die serielle Schnittstelle einloggen.

• IP-Adresse mit dem Linuxbefehl ifconfig feststellen.

• Mit dem Befehl cat /etc/network/interfaces die IP-Konfiguration anschauen.– cat der cat-Aufruf ist für die Ausgabe einer Textdatei

(mit Strg C kann cat bei Fehleingabe abgebrochen werden)

– /etc/network/ Pfad (Ordner), in der sich die Datei interfaces befindet

• Wie ist die IP-Konfiguration eingestellt?

– dynamisch

– statisch

• Was müssten Sie tun, um auf die andere IP-Vergabe umzustellen:________________________________________________________________________________________

Page 17: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 17

Übung 2b: Foxboard mit dem Netzwerk verbinden

• Gesamte IP-Konfiguration unter Linux anschauen:– ifconfig eingeben, um aktuelle IP-Konfiguration zu erfahren. – Browsertest: Im Browser 10.1.9.x eingeben.

• IP-Adresse für die Sitzung ändern, zum Beispiel:ifconfig wlan0 10.1.9.1x (x ist Nummer des Foxboards)– Die Änderung wird nicht gespeichert.– Die Änderung ist nur während der Sitzung aktiv. – Browsertest: Im Browser 10.1.9.1x eingeben.– Kontrollieren Sie dies durch Eingabe reboot.

• In einem Netzwerk darf eine IP-Adresse nie doppelt vergeben werden.

Page 18: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 18

SSH-Verbindung mit Putty einrichten• Zugriff auf das Foxboard:

– Putty mit SSH starten.SSH: Secure Shell (verschlüsselte Verbindung).

– IP eingeben und mitReturn bestätigen.

– Login-Name: root– Password: cbsg20– Linux beenden: halt– Nur Putty beenden: exit

• Alle Linux-Zugriffe werden unter Putty_SSH durchgeführt. Der Zugriff über die COM-Schnittstelle wird nur noch bei Fehlern während des Bootens benötigt.

• Das Standard-Programm Telnet ist unverschlüsselt.

Page 19: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 19

Übung 3• Serielles Kabel und Patchkabel anschließen. • Mit Putty_Serial in das Linux-Betriebssystem einloggen. • IP-Adresse mit dem Linuxbefehl ifconfig feststellen.• Putty für SSH starten, IP eingeben und ins Foxboard einloggen.• IP-Adresse für die Sitzung mit Putty ändern, zum Beispiel:

ifconfig wlan0 10.1.9.1x (x ist Nummer des Foxboards)– Bei Putty_SSH den Befehl ifconfig eingeben. Was passiert?– Mit Putty_SSH mit der neuen IP einloggen.– ifconfig eingeben und IP merken, danach reboot eingeben und

nach dem Neustart IP-Adresse kontrollieren. Welche IP ist aktiv: _______________________

• Putty_SSH starten, IP eingeben und ins Foxboard einloggen.• Linux mit reboot neu booten und Ausgabe bei Putty_Serial und

Putty_SSH beobachten. • Danach den Ablauf mit dem Befehl halt beobachten.

Page 20: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 20

Übung 4• Loggen Sie sich mit Putty in andere Foxboards im Intranet des

R411 ein. Öffnen sie gleichzeitig mehrere Sitzungen.

• Mit Putty über das Internet einloggen:

– Pinguin-Foxboard mit cbs.selfhost.me – Siedelsbrunn-Foxboard mit k49.selfhost.me

• Mit ifconfig die IP-Adressen der Foxboards im Internet bestimmen:cbs.selfhost.me ________________k49.selfhost.me _________________

• Können das die Internet-IP-Adressen sein?

• Wie können Sie die Internet-IP-Adresse von k49 bestimmen?____________________________________________________

• Schauen Sie sich auch die Webseiten der Foxboards im Intranet mit der IP-Adresse, im Internet mit dem Domainnamen und danach mit der IP-Adresse an.

Page 21: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 21

Einige Linux-BefehleNavigation im Dateisystem

pwdgibt das aktuelle Verzeichnis aus(print working directory)

cd /wechselt ins Hauptverzeichnis (Root)(change directory)

cd .. wechselt in das übergeordnete Verzeichnis

cd <name>wechselt ins Verzeichnis <name> Beispiel: relativ zum Verzeichnis home: cd kf oder absolut von jedem beliebigen Verzeichnis: cd /home/kf

cd - wechselt in das vorherige Verzeichnis

cd wechselt ins Home-Verzeichnis des Benutzers

Page 22: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 22

Verzeichnisse und Benutzer

ls kurze Liste des Verzeichnisinhaltes (list)

ls -l ausführliche Liste des Verzeichnisinhaltes mit Dateirechten

rm <name> Löscht die Datei <name> im Verzeichnis (remake)

mkdir <name> neues Verzeichnis erstellen ( z. B. mkdir test )

rmdir <name> leeres Verzeichnis löschen ( z. B. rmdir test )

cat gibt den Inhalt einer Datei aus, z. B. cat /etc/network/interfacesDer Inhalt der Datei interfaces im Ordner /etc/network wird angezeigt.

passwdPasswort für Benutzer root ändern: passwd root !!!!Bitte kein Passwort ändern!!!!!!

whoWer ist alles eingeloggt? Ausgabe der Benutzernamen, des Terminals und der Login-Zeit.

Page 23: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 23

Systeminformationen

mount Ausgabe aller gemounteter Partitionen/Geräte

dfdf -h

Ausgabe der Speicherkapazität der gemounteten Geräte

datedate MMTThhmmYYYY

Anzeigen und Setzen von Datum und Uhrzeit

free gibt die Nutzung des Arbeitsspeichers aus

uptime zeigt die Prozessorauslastung und -laufzeit an

top zeigt die höchsten Ressourcenverbraucher an (mit q beenden)

ps zeigt Informationen über laufende Prozesse an

uname -a gibt Kernel-Informationen und die Kernel-Version aus

Page 24: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 24

Übung 5: Home-Ordner (mit Putty)• Mit cd / in das Hauptverzeichnis (Wurzel, root) wechseln.• Mit ls die Dateien und Ordner im Hauptordner (Wurzel) anschauen.• Mit cd /home in den Ordner /home wechseln.• Mit mkdir xx Ordner xx (xx: Kürzel des Nachnamen: z. B. kf) in

/home erstellen. Dieser neue Ordner ist Ihr Ordner für Ihre Dateien.• Wie groß ist die Speicherkapazität der Partitionen.• Stimmt das Datum und Uhrzeit?• Das Foxboard mit reboot neu starten und in den Ordner xx

wechseln ( cd /home/xx).• Geben Sie cd, danach pwd ein. In welchem Ordner sind Sie?• Erläutern Sie den Unterschied der Befehle: cd / und nur cd • Erläutern Sie die unterschiedlichen Bedeutungen für root.• Erläutern Sie die Ausgabe auf dem Bildschirm nach einem Return.• Mit den Pfeiltasten hoch / runter können Sie die letzten Befehle

aufrufen, mit links / rechts editieren.

Page 25: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 25

GPI/O-Ports vom Foxboard direktunter Linux ansprechen

• Die drei 32 Bit-I/O-Port-Register– Port A hat die Adresse 32

– Port B hat die Adresse 64

– Port C hat die Adresse 96

• Einige Pins der I/O-Ports können über den Port und die Pinnummer angesprochen werden.PAx bedeutet: Port A Pin x (x steht für 0 bis 31)

• Linux benötigt die KernelID: die Adresse des Ports + die PinnummerPB12 KernelID: 64 + 12 = 76

Page 26: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 26

Beschaltung von SW1 und LD2

U bei „1“ am PC7 (LD2) = 1,8V

Spannung an PC4 durch Taster SW1 berechnen:

Bei offenen Taster U = _____V

Bei gedrückten Taster U = _____V

IF bei leuchtender LD2 berechnen (UF = 1,7V):

IF = _______mA

Berechnung der KernelID:

KernelID = Port-Adresse + Pin-Nummer

KernelID SW1: ____________________

KernelID LD2: ____________________

Page 27: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 27

Fest vereinbarte GPIO-Pins unter Linux Die rote LED LD2 ist am Pin 7 des Ports C (PC7, KernelID = 103) angeschlossen und unter Linux fest vereinbart. Nach dem Linuxstart blinkt die LD2. Um das Blinken zu beenden, muss in die Datei brightness der Wert 0 eingetragen werden. Dadurch wird der Pin, an dem die LD2 angeschlossen ist, auf 0V (auf logisch 0) gesetzt. Linux überträgt stetig den Wert in der Datei brightness an den Pin PC7. Der Linux-Befehl echo x > Pfad/Datei überträgt den Wert x in die angegebene Datei. Ist der Ordner, in der die Datei liegt, der aktive Ordner, muss der Pfad nicht angegeben werden.

Das Blinken beenden: echo 0 > /sys/class/leds/user_led/brightness

LD2 mit Linux-Befehl ein- und ausschalten:ein: echo 1 > /sys/class/leds/user_led/brightness aus: echo 0 > /sys/class/leds/user_led/brightness

Aufgabe: Geben Sie in Putty die Anweisungen nach einander ein. Schalten Sie öfters die LED ein und aus. Schauen Sie sich nach jedem Befehl den Inhalt der Datei brightness mit dem cat-Befehl an.

Page 28: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 28

GPIO-Pin unter Linux ansprechen Mit dem Programm export kann ein GPIO-Pin unter Linux vereinbart werden, um auf diesen Pin zugreifen zu können. Beispiel des Pins mit der KernelID 58 : echo 58 > /sys/class/gpio/export

Richtung (Ein- oder Ausgabe) des Pins festlegen als:Ausgang: echo out > /sys/class/gpio/gpio58/direction

Eingang: echo in > /sys/class/gpio/gpio58/direction

Einen vereinbarten Ausgang auf logisch 1: echo 1 > /sys/class/gpio/gpio58/value

0: echo 0 > /sys/class/gpio/gpio58/value

setzen. Diese Vereinbarung ist nur temporär, das heißt: Die Vereinbarungen ist nur während einer Linux-Sitzung gültig.

Page 29: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 29

Übung 6: Pin mit ID 58 (59) vereinbaren

• Putty: Versuchen Sie den Pin mit der KernelID 103 (LD2) zu vereinbaren.

• ls: Inhalt con Ordner /sys/class/gpio anschauen. Merken Sie sich die Unterordner.

• Putty: Vereinbaren Sie den Pin mit der KernelID 58 als I/O-Pin:

echo 58 > /sys/class/gpio/export.• cd, ls: Inhalte von Ordner /sys/class/gpio und Unterordner anschauen.

• cat: Was steht in der Datei direction im Ordner /sys/class/gpio/gpio58 ?

• Putty: Vereinbaren Sie die Richtung als Ausgang:

echo out > /sys/class/gpio/gpio58/direction • Schalten Sie die KernelID 58 auf logisch „1“, dann auf logisch „0“ .

Schauen Sie sich den Inhalt der Datei value im Ordner /sys/class/gpio/gpio58 an.

• Warum verändert sich die LED LD2 nicht.

• Zu welchen Port und zu welchen Pin gehört die KernelID 58.

• An welchen Pin vom Foxboard müssten Sie eine LED anschließen, damit diese von der KernelID 58 gesteuert wird.

Page 30: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 30

Infos für die C-Programmierung• C-Einsteigerkurse

de.wikibooks.org/wiki/C-Programmierungwww2.hs-fulda.de/~klingebiel/c-vorlesungwww.imb-jena.de/~gmueller/kurse/c_c++www.galileocomputing.de/openbook/c_von_a_bis_z/Im public-html-Ordner von Kaufmann ist das C-Script Ansi-C_ES.doc

Kapitel-Angaben ( z.B. K5.3) beziehen sich auf Ansi-C_ES.doc

• Einfach zu bedienende Windows-C-Kompilerwww.codeblocks.org oder dev-c.softonic.de/download

• Programme für die C-Entwicklungsumgebung (SDK)– Putty: www.putty.org (putty.exe herunterladen)

– Notepad++: notepad-plus-plus.org

– WinSCP: winscp.net/eng/download.php

Page 31: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 31

FTP-Client-Programm WinSCP• Für die Datenübertragung zwischen PC und Foxboard

wird das FTP-Client-Programm WinSCP benötigt. • Geben Sie die IP-Adresse und die Benutzerkennung an.

Page 32: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 32

Vorbereitungen für die C-Programmierung• Entwicklungsumgebung (SDK):

– Notepad++ ist ein Textverarbeitungsprogramm zum Erstellen des c-Programms

– WinSCP ist ein FTP-Client (File-Transfer-Protokoll)

– Putty ist ein textorientierte Oberfläche zum Ausführen von Betriebssystembefehle

• Installieren Sie Notepad++ für die Bearbeitung des C-Sourcecodes.

• Starten Sie WinSCP für die Datei-Übertragung zwischen PC und Foxboard.

• Kontrollieren Sie mit WinSCP unter /home, ob ein Ordner mit ihrem Kürzel (zum Beispiel: kf für Kaufmann) vorhanden ist.Wenn der Ordner fehlt, erstellen Sie den Ordner mit WinSCP.

• Erstellen Sie den gleichen Ordner auf ihrem PC in ihrem Homeverzeichnis H:.

• Sicherheitshinweis:Auf den Foxboard können nach dem Unterricht alle Daten gelöscht werden. Deswegen sichern Sie alle C-Dateien für das Foxboard in Ihrem Homeverzeichnis auf dem PC.

Page 33: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 33

Erstellen von C-Programme fürs Foxboard

Vorgehensweise:1. Mit notepad++ wird der C-Quellcode (Source-Code, für

den Menschen verständlicher Code) auf dem PC erstellt. Diese Datei hat die Dateierweiterung c (<Name>.c).

2. Mit WinSCP wird die C-Datei auf das FoxboardG20 ins /home/xx-Verzeichnis kopiert.

3. Mit Putty wird im Ordner /home/xx mit dem Aufruf: gcc <Name>.c –o <Name> die Datei <Name>.c kompiliert und die ausführbare Datei <Name> erstellt, wenn keine Fehler erkannt wurden.

4. Die ausführbare Datei <Name> starten: ./<Name>

Page 34: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 34

Das erste C-Programm: hw.c

• Um Ausgaben auf dem Bildschirm mit printf zu ermöglichen, muss die Standard-IO-Bibliothek stdio.h (Header-Datei) eingebunden werden: #include <stdio.h>

• Ein C-Programm benötigt immer ein Hauptprogramm int main(void).• Der Anweisungsblock {...} für das Hauptprogramm oder für andere

Programmteile wird immer in geschleiften Klammern eingebunden.• Der bei der Anweisung printf in Anführungszeichen eingebundene Text wird auf

den Bildschirm ausgegeben. \n ist ein Steuerzeichen (Befehl an Ausgabeeinheit) und wird nicht ausgegeben. Befehl für den Bildschirm: Ausgabe des Textes und in neue Zeile springen.

• Jede Anweisung wird mit einem Semikolon ; beendet.• Mit // beginnt der einzeilige Kommentar, keine Bedeutung für den Compiler.

#include <stdio.h> int main(void) { printf("Hallo Welt von XXXXX!\n"); return(0); // Rücksprung ins Betriebssystem}

Page 35: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 35

Verändern, Kompilieren, Ausführen von hw

• Schreiben Sie hw.c mit Notepad++ : Ausgabe auf dem Bildschirm: Hallo Welt von XXXXX! Schreiben Sie für xxxxx ihren Namen in die printf-Anweisung.

• Speichern Sie hw.c in ihrem PC-Ordner.• Übertragen Sie die Datei hw.c mit WinSCP in den

/home/xx-Ordner auf dem Foxboard.• Aktionen auf dem Foxboard mit dem Programm Putty:

– Compilieren Sie hw.c in /home/xx mit dem Befehl: gcc hw.c –o hw

– Starten Sie die ausführbare Datei hw mit ./hw

Page 36: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 36

Zugriff auf die Hardware unter C• Um auf die Ports des FoxG20 zugreifen zu können, muss die

Header-Datei cbsg20.h, die nicht zum Linux-Betriebssystem gehört, in den Ordner /usr/include kopiert werden.

• Im c-Programm muss die Anweisung #include <cbsg20.h> am Ende der include-Anweisungen hinzugefügt werden.

• In der Header-Datei werden die Zustände der einzelnen Pins in Dateien eingetragen, von Linux und dem c-Programm ausgewertet.

• Folgende Anweisungen sind in cbsg20.h vereinbart :

– Pin vereinbaren als Eingang: gpioinit (kernelid, “in“) Ausgang: gpioinit (kernelid, “out“)

– Setzt den Pin auf 0 : gpioset (kernelid, 0)

1 : gpioset (kernelid, 1)

– Liest den Zustand des Pins: gpioget (kernelid)

Page 37: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 37

LD2 blinkt: C-Programm ld2.c// ld2.c 26.01.2010 Kaufmann #include <stdio.h> // für printf#include <unistd.h> // für sleep#include <cbsg20.h> // für gpio

#define LD2 103 // kernelid 103 als Label LD2 definieren

int main(void){ gpioinit(LD2,"out"); // LD2 als Ausgang festlegen printf("LD2-Programm von xxxxxx V3.1\n"); while(1) { gpioset(LD2,0); printf("LD2 aus Abbruch <STRG>+<C>\n"); sleep(1); gpioset(LD2,1); printf("LD2 an Abbruch <STRG>+<C>\n"); sleep(1); } return(0);}

K4.2.1: printfK5.2: while

Page 38: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 38

Fragen zu ld2.c• Kompilieren und starten Sie das Programm ld2 .• Erläutern Sie die Anweisung: gpioinit(LD2,"out");• Erläutern Sie die Anweisung: gpioset(LD2,0); • Bei welcher C-Anweisung wird die Diode LD2 eingeschaltet?• Durch welche Zahl wird LD2 beim Kompilieren ersetzt?• Erläutern Sie die Funktionsweise der Schleife while (1) {...}.

– Was passiert, wenn Sie anstelle der 1 eine 2 , eine 0 , eine –1 einsetzen.Verändern Sie die Werte, kompilieren und starten Sie das Programm.

– Warum bezeichnet man while (1) {...} als Endlosschleife?

• Schauen Sie sich die printf-Anweisung an. Was bedeutet \n ?• Welche Aufgabe hat die Anweisung sleep(1).

Beachten: Bei sleep(zahl) ist zahl immer ganzzahlig.• Welche Aufgabe hat die Anweisung return(0);

Page 39: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 39

Aufgabe: ld2.c erweitern1. ld2_1.c: Programmänderung: Die Periodendauer des Blinkens

soll 0,5 Sekunden betragen (P = 0,5s oder f = 2Hz).Verwenden Sie die Anweisung: usleep(usekunden);Die Variable usekunden ist ganzzahlig (int) und bedeutet Mikrosekunden.

2. ld2_2.c: Programmieren Sie einen Zähler hinzu. Integer-Variable int zaehler = 0; und C-Anweisung zaehler ++; hinzufügen.Verändern Sie die Ausgabe so, dass folgendes Bild erscheint:Veränderte Print-Anweisung: printf("LD2 aus Anzahl Blinken: %d \n", zaehler);

3. ld2_3.c: Nach dem 10. mal Blinken soll das Programm mit der Ausgabe Ende des Blinkens beendet werden.Bedingung: while (zaehler < 10) { ... } K4.3: %d

Page 40: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 40

for-Schleife und scanf-Anweisunghttp://de.wikibooks.org/wiki/C-Programmierung:_Kontrollstrukturenhttp://de.wikibooks.org/wiki/C-Programmierung:_Einfache_Ein-_und_Ausgabe

• Compilieren Sie das Programm sf.c und starten Sie sf.

• Beachten Sie: Bei scanf muss bei der Variablen das &-Zeichen (Pointer) sein.

Speichern Sie die Source-Datei ld2_3.c unter sf.c ab.Ersetzen Sie while (zaehler < 10) durch den fett angegeben C-Code und entfernen Sie die Anweisung zaehler ++; im while-Anweisungsblock.Beachten Sie: blinkenmax muss noch als int-Variable vereinbart werden.

printf("Wie oft soll geblinkt werden: "); scanf("%i",&blinkenmax); for (blinken = 1; blinken <= blinkenmax; blinken++) { gpioset(LD2,0); printf("LD2 aus Anzahl Blinken = %d\n", blinken); usleep(250000); gpioset(LD2,1); printf("LD2 an \n\n"); usleep(250000); }

K2.2: VariablenK4.2.2: scanfK5.1: for

Page 41: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 41

Aufgabe: sf.c verändern Verändern Sie das Programm (sf_x.c):

1. Geben Sie blinkenmax in der for-Schleife aus. 2. Die Periodendauer des Blinkens soll 0,3 Sekunden betragen.

Vereinbaren Sie Taktdauer in einer define-Anweisung.3. Nach der For-Schleife soll wieder zur Eingabe

zurückgesprungen werden (zusätzliche while-Schleife).4. Wenn bei der Eingabe die Zahl für blinkenmax kleiner 1 ist, soll

das Programm beendet werden (printf-Anweisung anpassen). Durch den Aufruf return(0) wird eine Prozedur beendet.

Im main-Block wird das main-Programm beendet und somit ins Betriebssystem zurückgesprungen.Oder:Durch den Aufruf exit(0) wird das gesamte Programm sofort beendet und ins Betriebssystem zurückgesprungen (stdlib.h notwendig).

5. Geben Sie vor der Rückkehr ins Betriebssystem noch die Meldung aus: Ende durch Eingabe einer Zahl kleiner 1.

K5.3: if

Page 42: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 42

Aufgaben: Mathe-C-Programme (1) • Addition (add.c)

– Funktion: Die Summe von Zahl1 und Zahl2 soll berechnet werden. z. B: 3 + 7 = 10

– Eingabe: Zahl1 und Zahl2– Ende: Ausgabe: Ergebnis = 10

• Erweiterung Addition mit while Schleife: (add_2.c)– Wiederholung durch Rücksprung zur Eingabe Zahl1 (while-Schleife)– Ende des Programms: Eingabe 0 bei Zahl1– Ausgabe: die 2 eingegebenen Zahlen und das Ergebnis: 3 + 7 = 10

• Summe mit for-Schleife (sum.c)– Funktion: Die Summe von Zahl1 bis Zahl2 soll berechnet werden.

z. B: 3 + 4 + 5 + 6 + 7 = 25– Eingabe: erste und letzte Zahl– Ende: Ausgabe: Summe = 25

• Erweiterung Summe: (sum_2.c)– Ende des Programms: Eingabe 0 bei der ersten Zahl (while-Schleife)– Zusätzlich Ausgabe des Produkts zwischen den beiden Zahlen

z. B: 3 * 4 * 5 * 6 * 7 = 2520

Page 43: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 43

Aufgaben: Mathe-C-Programme (2) http://de.wikibooks.org/wiki/C-Programmierung:_math.h

• Potenz zur Basis 3 (p3.c)– Funktion: Die Potenz zur Basis 3 soll durch Eingabe des Exponenten berechnet

werden. z. B: Exponent = 4 3 * 3 * 3 * 3 = 81– Eingabe: Exponent (beachte: bei Eingabe 0 ist das Ergebnis 1)– Ende des Programms: Eingabe einer negativen Zahl.

• Potenz einer beliebigen Basis (p.c)– Eingabe: Basis, Exponent – Danach soll bis zur Eingabe eines negativen Exponenten die Potenz errechnet werden.– Wird bei der Basis der Wert 0 eingegeben, soll das Programm beendet werden.

• Potenzberechnung mit math.h (pow.c) (nur für Interessierte)– hinzufügen: #include <math.h>– Alle Variable als Datentyp: double (Dezimalzahlen, z. B. 3.5)– Formatierung bei scanf und printf: %lf– Anweisung zur Potenzberechnung (in math.h): pow(basis, exponent);– Ende: Basis = 0. Abbruch der while-Schleife: Exponent = 0– Für Basis und Exponent sind jetzt auch Dezimalzahlen möglich. – Kompilieren mit: gcc pow.c –lm –o pow (Reihenfolge der Parameter beachten)

Page 44: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 44

Aufgaben: Mathe-C-Programme (3) (nur für Interessierte, mit der math.h-Library)

• Satz des Pythagoras (py.c)– Eingabe: Die beiden Katheten.

– Verarbeitung: Die Hypotenuse berechnen.

– Ausgabe: Hypotenuse.

– Hinweise: • hinzufügen: #include <math.h>

• Datentyp: double , Formatierung bei scanf und printf: %lf

• Wurzel ziehen: sqrt(wert); oder pow(wert, 0.5);

• kompilieren mit: gcc py.c –lm –o py

• Erweiterung (py_2.c)– Auswahl durch Eingabe eines Buchstabens

E oder e => Ende des Programms H oder h => Hypotenuse berechnen K oder k => Kathete berechnen

Page 45: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 45

Datum und Uhrzeithttp://www.imb-jena.de/~gmueller/kurse/c_c++/c_time.html

• Unter Linux:– date gibt das aktuelle Datum aus– date MMTThhmmYYYY setzt das Datum für Linux (nur für die Session)

• RTC-IC für Hardware-Uhr (RealTimeClock, RTC)– hwclock –w Hardwareclock mit System-Datum (Linux) setzen– hwclock –r Hardwareclock auslesen

• Unter C– #include "time.h" fügt die Time-Funktionen hinzu.– time_t Sec1970; vereinbart einen Datentyp (z. B. Sec1970), der die Sekunden

seit 01.01.1970 enthält.– time(&Sec1970); oder Sec1970 = time(NULL); aktualisiert die Variable

Sec1970 mit der Sekundenanzahl.– ctime(&Sec1970) gibt ein vordefiniertes Datumsformat aus.– localtime(&Sec1970) berechnet Datum und Uhrzeit für eigene Datumsformate

aus dem Datentyp Sec1970 und erzeugt %-Formatierungen für das Datum.– strftime( ) kopiert in einen String die gewünschte Ausgabe eines Datumsformats

mit den festgelegten %-Datumsformatierungen.

• Analysieren Sie die Programme: datum.c, dauer.c

Page 46: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 46

Dateioperationenhttp://de.wikibooks.org/wiki/C-Programmierung:_Dateien#Streams

• Unter C können Dateien erstellt, beschrieben und ausgelesen werden. Dateien können in unterschiedlichen Moden geöffnet werden (Schreib-, Lese-Modus usw).– FILE vereinbart ein Name (als Pointer *) unter C.

– fopen( ) vereinbart den Pfad, den Dateinamen und den Modus.

– fprintf( ) schreibt Daten formatiert in eine Datei.

– fgets( ) liest Daten formatiert aus einer Datei ein.

– fclose( ) schließt eine Datei und gibt sie für andere Benutzer frei.

• Lesen Sie den Abschnitt Dateien und Streams im oben angegebenen Link durch und analysieren Sie die Programme: fw.c, fr.c, fr2.c, frt.c, frt2.c

Page 47: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 47

HTML-Programmierunghttp://de.selfhtml.org

• Das Foxboard G20 wird mit dem Webserver Lighttpd ausgeliefert. Der Standardwebserver in der Carl-Bosch-Schule ist der Apache2. Deswegen wurde auf dem Foxboard der Apache2 installiert und konfiguriert.

• Die Installation und Konfiguration ist in dem Dokument FoxG20Installation.doc beschrieben.

• Die im Ordner /var/www hinterlegten html-Dateien können im Webbrowser durch IP/<Dateiname> aufgerufen werden.

• Erstellen Sie die Datei hw.html im Ordner /var/www und rufen Sie die Datei im Browser mit 10.1.9.x/hw.html auf.– Inhalt der hw.html-Datei:

<meta Content-Type: text/html; charset=iso-8859-1><br><h2>Hallo Welt von xxxxx V3.1!</h2>

Page 48: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 48

CGI-Programmierung (Common Gateway Interface)

• Um den aktuellen Zustand der Hardware anzuzeigen, können mit CGI dynamische Webseiten in C erstellt werden.

• Die im Ordner cgi-bin in C-geschriebenen Programme verwenden als Standardausgabe den WEBServer.

• Deswegen steht der html-Code in printf-Anweisungen. • Da der html-Code oft Anführungszeichen " benötigt, müssen diese

in printf-Anweisungen durch ein Backslash \" gekennzeichnet werden, um der printf-Anweisung mitzuteilen, dass dieses Anführungszeichen nicht das Ende des printf-Strings bedeutet.

• Vereinbarungen in der Apache2-Konfigurationsdatei:– der /var/www-Ordner als DocumentRoot– cgi als Alias für den Ordner cgi-bin– die Endung .cgi als Kennzeichnung eines CGI-Programms

• Deswegen sollten die ausführbaren CGI-Dateien (kompilierten C-Dateien) mit .cgi enden und im /var/www/cgi-bin Ordner liegen.

Page 49: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 49

Hallo Welt als cgi-Programm

• Das CGI-Programm in Notepad++ schreiben und die hwcgi.c-Datei in den cgi-Ordner kopieren (/var/www/cgi-bin/).

• Die Datei hwcgi.c im cgi-bin Ordner mit gcc hwcgi.c –o hw.cgi kompilieren und die Rechte mit chmod 4755 hw.cgi setzen.

• Im Browser http://10.1.9.x/cgi/hw.cgi aufrufen.• Hinweis: Durch den Eintrag ScriptAlias /cgi/ /var/www/cgi-bin/

in der Apache2-Konfigurationsdatei wird der richtige Pfad für cgi ersetzt.

• Die grüne Anweisung ist für den Firefox wichtig!!!

//hwcgi.c#include <stdio.h>int main(void){ printf("Content-Type: text/html; charset=iso-8859-1\n\n"); printf("<br><h2>Hallo Welt von xxxxx V_CGI_3.1</h2>");}

Page 50: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 50

int main(void) { char *query_string = getenv("QUERY_STRING"); gpioint(DL2, "out"); if (query_string) // 0, keine Übergabe, wichtig beim ersten Aufruf { // LD2-LED setzen durch Browser-Eingabe if (strstr("LD2on",query_string)) gpioset(LD2,1); if (strstr(„LD2off",query_string)) gpioset(LD2,0); } printf("Content-Type: text/html; charset=iso-8859-1\n\n"); printf("<h2>Fernschalten der LD2 (KID:103,PC7)</h2>"); printf("<h3><a href=\"?LD2on\">LD2 an</a></h3>"); printf("<h3><a href=\"?LD2off\">LD2 aus</a></h3>"); printf("<h2>Version G20.3/kf (CBS-HD)</h2>"); }

LD2 übers Internet schalten (1)

?LD2off ist als Teilstring im query_string.

Putty: gcc ld2cgi.c –o ld2.cgiPutty: chmod 4755 ld2.cgi (Recht für ausführbar setzen)Browser: http://10.1.9.x/cgi/ld2.cgi

Page 51: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 51

LD2 übers Internet schalten (2)• Erstellen Sie auf den Foxboard im

Ordner /var/www den Ordner pics und speichern Sie die Bilder hell.jpg und dunkel.jpg im Ordner pics.– In der Apache2-Konfigurationdatei ist der

Pfad für den DocumentRoot auf /var/www/ gesetzt. Deswegen muss als Pfad beim html-Aufruf img src= für den Ort der Bilder /pics/ angegeben werden.

• Speichern Sie die Datei ld2cgi.c unter ld2imgcgi.c und ersetzen Sie die beiden Zeilen mit printf("<h3><a href= .......); durch die Zeilen:

if (gpioget(LD2)) printf("<a href=\"?LD2off\"><img src=\"/pics/hell.jpg\"></a>\n");else printf("<a href=\"?LD2on\"><img src=\"/pics/dunkel.jpg\"></a>\n");

Page 52: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 52

CGI-Programm als WEB-Startseite des FoxG20• Kopieren Sie die index.html-Datei mit dem Inhalt

<html><head> <meta http-equiv="refresh" content="0; URL=/cgi/index.cgi"></head></html>

in den /var/www-Ordner. • Die index.html-Datei startet beim Aufruf die Datei index,cgi,

die im /var/www/cgi-bin Ordner sein muss.• Nennen Sie deswegen die Datei im Ordner cgi-bin in index.cgi

um, die bei der Eintragung der IP-Adresse des FoxG20 im Browser sofort gestartet werden soll.

• Aufgabe: – Nennen Sie die Datei ld2img.cgi um in index.cgi.– Starten Sie den Browser und geben Sie nur die IP-Adresse

ihres FoxG20 ein.

• Warum ist eine dynamische DNS-Adresse sinnvoll.

Page 53: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 53

CGI auf html-Seite umleiten (1)

int main(void) {

char *query_string = getenv("QUERY_STRING");

gpioinit(LD2,"out");

if (query_string) {

if (strstr("LD2on", query_string)) gpioset(LD2,1);

if (strstr("LD2off",query_string)) gpioset(LD2,0);

}

printf("Content-Type: text/html; charset=iso-8859-1\n\n");

printf("<meta http-equiv=\"refresh\" content=\"0; URL=/ld2w.html\">");

}

Werden auf der Webseite keine aktuellen Einstellungen angezeigt (Webseite ist statisch, nicht dynamisch), kann nach der Hardwareauswertung und -Einstellung im CGI-Teil auf eine html-Webseite verzweigt werden. Die html-Datei sollte dann im Dokumentenroot vom Apache2-Server liegen, auf keinen Fall im cgi-bin_Ordner.

Inhalt der ld2w.cgi-Datei:

Page 54: V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

V11.07.12_cbs/kf / Folie 54

CGI auf html-Seite umleiten (2)

Ich hoffe, es hat Ihnen Spaß bereitet, sich mit dem Foxboard, mit Linux und der Sprache C

zu beschäftigen.

Der Autor: Michael Kaufmann

<html><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<h2>Fernschalten der LD2 (KID:103,PC7)</h2>

<h3><a href="/cgi/ld2w.cgi?LD2on">LD2 an</a></h3>

<h3><a href="/cgi/ld2w.cgi?LD2off">LD2 aus</a></h3>

<h2>Version G20.3/kf (cgi -> html) (CBS-HD)</h2></html>

Wichtig ist die Umleitung in der ld2w.html-Datei zurück auf die ld2w.cgi-Datei im Ordner /cgi/.

Der Inhalt der ld2w.html-Datei: