89
Diplomarbeit Michael Vogt Seite 1 von 89 Diplomarbeit „Embedded Linux“ Dokumentation Autor: Michael Vogt, HFT-SO Betreuer: R. Moor Version 1.12 Letzte Änderung: 5.Mai 2008

Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 1 von 89

Diplomarbeit „Embedded Linux“

Dokumentation

Autor: Michael Vogt, HFT-SO Betreuer: R. Moor Version 1.12 Letzte Änderung: 5.Mai 2008

Page 2: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 2 von 89

1. INHALTSVERZEICHNIS

1. Inhaltsverzeichnis .................................................................................................................................... 2 2. Diplominfromationen .............................................................................................................................. 4

Diplomand ................................................................................................................................................... 4 Experte......................................................................................................................................................... 4 Betreuer HFT-SO ........................................................................................................................................ 4 Termine ....................................................................................................................................................... 4

3. Aufgabenstellung..................................................................................................................................... 5 4. Evaluation und Analyse........................................................................................................................... 6

Evaluation MP3 Player................................................................................................................................ 6 Audioplayer Software.............................................................................................................................. 6 LCD Software.......................................................................................................................................... 7 Steuerung des Players .............................................................................................................................. 8 Last.FM Daemon ................................................................................................................................... 10 Verwendete Hardware ........................................................................................................................... 11

Evaluation SSH Gateway .......................................................................................................................... 12 SSH Software ........................................................................................................................................ 12 DynDNS Client...................................................................................................................................... 12 Tunnel Software .................................................................................................................................... 13

5. Technologie ........................................................................................................................................... 14 Was ist OpenWRT..................................................................................................................................... 15 Entwicklungsumgebung ............................................................................................................................ 17

Vorbedingungen .................................................................................................................................... 18 Auschecken der aktuellen SVN Version ................................................................................................... 19 Portierung .................................................................................................................................................. 20

Einfache Portierung ............................................................................................................................... 20 Komplexere Portierung.......................................................................................................................... 21 Patch erstellen........................................................................................................................................ 25

OpenWRT Disklayout / Bootvorgang ....................................................................................................... 26 Aus was besteht die Firmware............................................................................................................... 26

6. Detailkonzept / Design .......................................................................................................................... 28 Systemübersicht MP3 Player..................................................................................................................... 29 Applikationsübersicht MP3 Player ............................................................................................................ 30

MPD ...................................................................................................................................................... 31 MPC....................................................................................................................................................... 32 SCMPD.................................................................................................................................................. 33 CmdPad ................................................................................................................................................. 33 Bemused-MPD-hack.............................................................................................................................. 33 LCD4Linux............................................................................................................................................ 34

Systemübersicht SSH Gateway ................................................................................................................. 35 7. SW-Ergänzungen................................................................................................................................... 36

OpenWRT ................................................................................................................................................. 36 Übersicht................................................................................................................................................ 36 Argtable ................................................................................................................................................. 37 libdaemon .............................................................................................................................................. 37 confuse................................................................................................................................................... 37 scmpc ..................................................................................................................................................... 37 cmdpad................................................................................................................................................... 37 lcd4linux ................................................................................................................................................ 38 MPD ...................................................................................................................................................... 38 MPC....................................................................................................................................................... 38 bluez-libs ............................................................................................................................................... 38 bluez-utils .............................................................................................................................................. 38 bluez-hcidump ....................................................................................................................................... 38

Page 3: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 3 von 89

bemused ................................................................................................................................................. 39 OpenSSH ............................................................................................................................................... 39 PTunnel.................................................................................................................................................. 39 http Tunnel............................................................................................................................................. 39

LCD4Linux ............................................................................................................................................... 40 Übersicht................................................................................................................................................ 40 Plugin Entwicklung ............................................................................................................................... 41 Hinweis zu ID3 Tags ............................................................................................................................. 44

Bemused Linux Server .............................................................................................................................. 45 Code Änderungen .................................................................................................................................. 46 JamSE Client ......................................................................................................................................... 47

Cmdpad ..................................................................................................................................................... 47 MPD .......................................................................................................................................................... 48 MPC........................................................................................................................................................... 49

8. Installation ............................................................................................................................................. 50 MP3 Player ................................................................................................................................................ 50

Konfiguration Firmware ........................................................................................................................ 50 Firmware Update ................................................................................................................................... 52 Basis Konfiguration ............................................................................................................................... 54 Konfiguration Netzwerk ........................................................................................................................ 56 Konfiguration MPD............................................................................................................................... 57 Konfiguration LCD4Linux .................................................................................................................... 58 Konfiguration CmdPad.......................................................................................................................... 61 Konfiguration Bluetooth........................................................................................................................ 62 Konfiguration Bemusedserver ............................................................................................................... 63 Konfiguration OpenNTP ....................................................................................................................... 64 Konfiguration SCMPC .......................................................................................................................... 64

SSH Gateway............................................................................................................................................. 65 Konfiguration Firmware ........................................................................................................................ 65 Update Firmware ................................................................................................................................... 67 Konfiguration......................................................................................................................................... 70 Konfiguration Netzwerk ........................................................................................................................ 72 Konfiguration Wireless.......................................................................................................................... 72 Konfiguration Dynamic DNS ................................................................................................................ 73 Konfiguration Tunneling Clients ........................................................................................................... 73 Konfiguration Wifi-Toggler .................................................................................................................. 74 Status ..................................................................................................................................................... 75

9. Test ........................................................................................................................................................ 76 MP3 Players .............................................................................................................................................. 76

Test Audioqualität ................................................................................................................................. 77 Bilder der MP3 Jukebox ........................................................................................................................ 79 Wireless Treiber .................................................................................................................................... 80

Test SSH Gateway..................................................................................................................................... 81 Test Datendurchsatz............................................................................................................................... 82

10. Zusammenfassung ........................................................................................................................... 84 Rückblick................................................................................................................................................... 84 Ausblick..................................................................................................................................................... 84

11. Glossar............................................................................................................................................. 85 12. Anhang ............................................................................................................................................ 88

Buildumgebung ......................................................................................................................................... 88 Bildverzeichnis .......................................................................................................................................... 89

Page 4: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 4 von 89

2. DIPLOMINFROMATIONEN

DIPLOMAND

Michael Vogt Bierhübeliweg 31 3012 Bern Mail: [email protected] Klasse: TIS6

EXPERTE

Stefan Huggenberger Mail: [email protected]

BETREUER HFT-SO

Richard Moor Mail: [email protected]

TERMINE

Ausgabe der Arbeit: 21. April 2008 Abgabe der Arbeit: 6. Mai 2008

Page 5: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 5 von 89

3. AUFGABENSTELLUNG

Die Aufgabenstellung ist detailliert im Dokument „Pflichtenheft Embedded Linux“ und „Aufgabenstellung Diplomarbeit 2008“ definiert und wird an dieser Stelle nicht erneut wiederholt.

Page 6: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 6 von 89

4. EVALUATION UND ANALYSE

EVALUATION MP3 PLAYER

Audioplayer Software

Zentrales Element des MP3 Players ist der Audioplayer. Dieser sollte folgende Eigenschaften besitzen: „Muss“ Kriterien:

� Geringer Ressourcenbedarf (CPU und RAM) � Portabel � Kein GUI Player, d.h. Command Line Player � Open Source

Wichtige Kriterien:

� Unterstützt verschiedene Formate (MP3, Ogg Vorbis, FLAC…) � API vorhanden � Pulseaudio1 unterstützt � Aktives Projekt (Bugfixing, Verbesserungen, Unterstützung weiterer Formate…) � Netzwerkfähig (Client / Server Architektur) � Wird schon für Embedded Systeme eingesetzt

Folgende Player erfüllen die „Muss“ Kriterien:

� MOC – Music On Console2 � MPD – Music Player Daemon3 � XMMS2 – X-platform Music Multiplexing System 24 � Mserv5 � Lamip6

MOC MPD XMMS2 Mserv Lamip

Formatvielfalt 16 Formate 12 Formate 10 Formate 12 Formate 16 Formate API vorhanden Nein Ja Ja Nein Nein Pulseaudio unterstützung

Nein Ja Ja Nein Nein

Aktives Projekt / Letztes Release

Ja / 25.02.08 Ja / 28.01.08 Ja / 15.11.07 Nein / 23.02.2004

Ja / 09.08.07

Netzwerk fähig Nein Ja Ja Ja Ja Embedded Linux Erfahrungsbericht

Keiner gefunden

Ja7, zusätzlich als OpenWrt Paket vorhanden

Nicht speziell dafür entwickelt

Keiner gefunden

Keiner gefunden

Hauptsächlich aufgrund geringer CPU Anforderungen und Erfahrungsberichten betreffend MPD und Embedded Devices habe ich mich für den „Music Player Daemon“ entschieden.

1 http://pulseaudio.org/ 2 http://moc.daper.net/ 3 http://www.musicpd.org/ 4 http://wiki.xmms2.xmms.se/ 5 http://www.mserv.org/ 6 http://fondriest.frederic.free.fr/realisations/lamip/index.html 7 http://mpd.wikia.com/wiki/Embedded

Page 7: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 7 von 89

LCD Software

Um über den aktuellen Status des MP3 Players informiert zu sein, muss ein LCD Display angesteuert werden. Diese Software sollte folgende Kriterien erfüllen: „Muss“ Kriterien:

� Unterstützt grafische und textbasierende Displays � Unterstützt mehrere Display Typen � Open Source

Wichtige Kriterien:

� Plugin Architektur (Input – was für Daten sollten gelesen werden, Darstellung – z.B. Ausgabe als Text oder Balkenanzeige, Output – wo werden die Daten dargestellt)

� Display ist frei konfigurierbar, d.h. Elemente können frei definiert werden � Wird schon für Embedded Systeme eingesetzt � Aktives Projekt (Unterstützung weiterer Display’s, neuere Plugin’s…)

Folgende Applikationen erfüllen die „Muss“ Kriterien:

� LCD4Linux8 � LCDproc9

Der Hauptunterschied zwischen LCD4Linux und LCDproc ist, dass LCD4Linux auf einem Programm besteht, während LCDproc als Client / Server Applikation funktioniert. Der Sourcecode von LCDproc ist mehr als doppelt so gross, wie der Sourcecode von LCD4Linux.

LCD4Linux

LCDproc

Plugin Architektur Ja Ja Display ist frei konfigurierbar Ja Ja Wird schon für Embedded Systeme eingesetzt

Ja10, zusätzlich als OpenWrt Paket verfügbar

Nein

Aktives Projekt / Letztes Release Ja / 30.4.07 (jedoch viele SVN Änderungen)

Ja / 27.4.07

Auch hier habe ich mich hauptsächlich aufgrund Erfahrungsberichten zufolge für die Software LCD4Linux entschieden.

8 http://ssl.bulix.org/projects/lcd4linux/ 9 http://lcdproc.omnipotent.net/ 10 https://ssl.bulix.org/projects/lcd4linux/wiki/CoolStuff

Page 8: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 8 von 89

Steuerung des Players

Der Musikplayer muss gesteuert werden. Ich habe mir dazu folgende Überlegungen gemacht:

� USB-Keypad Steuerung: Steuerung mit einem USB Keypad. Diese Art der Steuerung ist sehr einfach zu realisieren, bietet jedoch nur begrenzte Funktionsvielfalt und Ergonomie.

� Mobiltelefon Steuerung: Steuerung mit einem Bluetooth Mobiltelefon. Die meisten Personen in meinem Umkreis verwenden ein Mobiltelefon, die meisten der Mobiltelefone besitzen eine Bluetooth-Schnittstelle. Ein USB-Bluetooth Dongle kostet ca. 20 SFr. Die Steuerung via Mobiltelefon ist sicher aufwendiger zu realisieren als mit einem USB Keypad, jedoch bietet diese Steuerungsart mehr Komfort.

Evaluation USB-Keypad Steuerung: Diese Applikation ist sehr trivial – Jede gedrückte Taste auf dem Keypad sendet einen Keycode an die Applikation. Für den Keycode X soll nun Applikation Y gestartet werden. „Muss“ Kriterien:

� Unterstützt USB Keypad’s � Open Source

Wichtige Kriterien:

� Berücksichtigung der Tastenaktion (Press, Release, Repeat) � Tasten frei belegbar (beliebiges Programm kann ausgeführt werden)

Folgende Applikationen erfüllen die „Muss“ Kriterien:

� cmdpad11 � EMPCd12

cmdpad

EMPCd

Berücksichtigung der Tastenaktion

Ja Ja

Tasten frei belegbar Ja Nein Obwohl cmdpad nicht mehr aktiv entwickelt wird, habe ich mich für diese Applikation entschieden. Cmdpad erlaubt es, beliebige Programme auszuführen während EMPCd nur Befehle für den MPD absetzten kann. Da ich ein Embedded Device verwende, ohne zusätzliche I/O Möglichkeiten, muss ich z.B. einen Daemon neu starten können.

11 http://cmdpad.sourceforge.net/ 12 http://unfix.org/projects/empcd/

Page 9: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 9 von 89

Evaluation Mobiltelefon Steuerung: Die Mobiltelefon Steuerung besteht aus zwei Teilen, dem Serverteil (Interaktion mit dem Musikplayer) und dem Clientteil (Interaktion mit dem User auf dem Mobiltelefon):

Abbildung 1: Übersicht Mobiltelefon Steuerung

„Muss“ Kriterien:

� Client unterstützt mein Mobiltelefon � „Komfortable“ Bedienung � Attraktives und funktionelles GUI für das

Mobiltelefon � Open Source

Wichtige Kriterien: � Client unterstützt verschiedene

Mobiltelefone � Server arbeitet Ressourcen-schonend � Wird schon für Embedded Systeme

eingesetzt � Aktives Projekt � MPD als Musikplayer unterstützt

Folgende Applikationen erfüllen die „Muss“ Kriterien:

� Bemused Linux Server13 / JamSE Client14 � Remuco15

Hinweis: Bemused Linux Server wird nicht mehr weiterentwickelt, ist jedoch ein etabliertes Produkt. Als Client kann JamSE benutzt werden, welcher das Bemused-Protokoll für die Kommunikation zwischen Server und Client verwendet. Remuco hingegen bietet Server und Client aus einer Hand.

Bemused Linux Server / JamSE

Remuco

Client unterstützt verschiedene Mobiltelefone

Ja Ja

Server arbeitet Ressourcen-schonend

Unbekannt Unbekannt

Wird schon für Embedded Systeme eingesetzt

Ja, Palm Version verfügbar Nein

Aktives Projekt Nein / Ja Ja MPD unterstützt Nein Nein Da Remuco hauptsächlich auf schwergewichtigere Audioplayer zugeschnitten ist (z.B. Amorak16 oder Rhythmbox17), habe ich mich für den Bemused Linux Server und JamSE als Client entschieden. Keine der Applikationen unterstützt den MPD Player „von Haus aus“, daher muss bei beiden Servervarianten Code-Änderung vorgenommen werden.

13 http://bemused.sourceforge.net 14 http://jamse.sourceforge.net/ 15 http://remuco.sourceforge.net/ 16 http://amarok.kde.org/de 17 http://www.gnome.org/projects/rhythmbox/

Page 10: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 10 von 89

Last.FM Daemon

Eine Beschreibung von Last.fm18 (von Wikipedia19):

Last.fm ist ein Internetradio auf Basis von sozialer Software („personalised online radio station“), das entwickelt wurde, um Nutzern auf Basis ihrer Hörgewohnheiten neue Musik, Menschen mit ähnlichem Musikgeschmack und Konzerte in ihrer Umgebung empfehlen zu können. Es ist eine ehemalige Schwesterseite von Audioscrobbler, mit dem es sich früher eine Musikdatenbank teilte. Plattenlabel und Musiker werden ermuntert, Last.fm Lizenzen zum Abspielen ihrer Musik zu erteilen, da dies, zumindest in der Theorie, ihre CD-Verkäufe erhöhen würde. Last.fm hat derzeit ein Verzeichnis von über 80 Millionen einzelnen Songs und davon über eine Million für sein Internetradio zum Streaming vorrätig, sowie 150.000 kostenlose MP3-Downloads.

Last.fm fusionierte am 9. August 2005 mit Audioscrobbler und übernahm somit auch dessen Funktionen. Diese speichern alle auf dem PC abgespielten Musikstücke in einer Datenbank, erzeugen individuelle oder globale Charts und verbinden Benutzer mit musikalischen Nachbarn. Bei musikalischen Nachbarn handelt es sich um Personen, welche einen ähnlichen Musikgeschmack haben. Aus der Datenbank werden Schnittmengen aus den Interpreten der Lieder innerhalb des angemeldeten Personenkreises errechnet. Stimmen viele Interpreten mit einer anderen Person überein, wird diese als musikalischer Nachbar bezeichnet.

„Muss“ Kriterien:

� Unterstützt MPD � Keine Skriptsprache (z.B. Perl oder Python, aus Performance-Gründen) � Open Source

Wichtige Kriterien:

� Crossfading unterstützt � Läuft als Daemon � Nicht übermittelte Lieder werden zwischengespeichert

Folgende Applikationen erfüllen die „Muss“ Kriterien:

� scmpc20 � mpdscribble21

scmpc

mpdscribble

Crossfading unterstützt Ja Durch einen Hack (nicht sauber implementiert)

Läuft als Daemon Ja Nein Nicht übermittelte Lieder werden zwischengespeichert

Ja Ja

Scmpc entstand eigentlich hauptsächlich, weil mpdscribble crossfading nicht richtig implementiert. Da ich crossfading verwende, habe ich mich für scmpc entschieden.

18 http://www.last.fm/ 19 http://de.wikipedia.org/wiki/Last.fm 20 http://scmpc.berlios.de/ 21 http://www.frob.nl/scribble.html

Page 11: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 11 von 89

Verwendete Hardware

Aufgrund der evaluierten Software ergeben sich folgende Hardware Komponenten:

� Basis - Asus Wrt 500GP AP (Version 1) � USB 2.0 Hub (aktive Stromversorgung) � USB Creative Sound Blaster Connect Soundkarte � USB Keypad � USB Memorystick � USB Bluetooth Adapter � USB Display Crystalfontz 634 USB LCD (20x4 Character Display)

Mittlerweile gibt es 2 Versionen des ASUS Wrt 500GP AP, wobei die zweite Version noch nicht vollständig von OpenWRT unterstützt ist.

Page 12: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 12 von 89

EVALUATION SSH GATEWAY

Neben der Funktionalität als Access Point mit WPA2 Verschlüsselung, soll der Router als SSH Server verwendet werden. Die Software für die Wireless Funktionen sind Bestandteile der OpenWRT Distribution – eine Evaluation dieser Komponente ist daher nicht nötig.

SSH Software

Eine Evaluation erachte ich auch in diesem Punkt als überflüssig, da eigentlich alle bekannten Distributionen auf OpenSSH22 als SSH Server setzten. OpenSSH gilt als sichere und stabile SSH Implementation.

DynDNS Client

Da der Router auch vom Internet aus erreichbar sein muss, verwende ich einen Dynamischen DNS Dienst. Um den DNS Record zu aktualisieren, reicht eine Web Anfrage mit einem Username und Passwort aus. Ein „richtiger Client“ ist also nicht nötig. Ich verwende daher das „ddns-scripts“ Package, welches per Default bei OpenWRT dabei ist.

22 http://www.openssh.org/

Page 13: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 13 von 89

Tunnel Software

Ich habe das Bedürfnis, folgende Tunneling Applikationen zu verwenden

� HTTPTunnel – viele Firmen verwenden eine Firewall und erlauben nur spezifische Verbindungen ins Internet, HTTP und HTTPS ist in den meisten Fällen erlaubt. Daher möchte ich einen SSH-over-HTTP Tunnel verwenden.

� Ping Tunnel – kommerzielle Wireless LAN Anbieter (z.B. Swisscom) erlauben den Zugriff ins Internet erst, wenn bezahlt wurde. Jedoch sind diverse Dienste wie z.B. Ping/ICMP, DNS Abfragen (meistens) für jedermann offen. Hier bietet sich ein SSH-over-ICMP Tunnel an.

HTTP Tunnel: Ich habe bereits im Fach Netzwerk eine SSH Arbeit geschrieben und einen HTTP Tunnel verwendet. Mit der Software „GNU-httptunnel“23 habe ich Erfahrung und es existiert auch ein Windows Client. Die Funktionsweise sieht folgendermassen aus:

Abbildung 2: Verbindungsaufbau via HTTPTunnel

Ping Tunnel: Ich habe bereits im Fach Netzwerk eine SSH Arbeit geschrieben und einen Ping/ICMP Tunnel verwendet. Mit der Software „Ping Tunnel“24 habe ich Erfahrung und es existiert auch ein Windows Client. Die Funktionsweise sieht folgendermassen aus:

Abbildung 3: Verbindungsaufbau via PTunnel

Beide Applikationen wurden bereits auf OpenWRT portiert.

23 http://www.nocrew.org/software/httptunnel.html 24 http://www.cs.uit.no/~daniels/PingTunnel/

Page 14: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 14 von 89

5. TECHNOLOGIE

Als Distribution wird OpenWRT25 verwendet. Diese Distribution stellt ebenfalls eine (Linux-basierende) Entwicklungsumgebung zur Verfügung. OpenWRT verwendet SVN als Versionsmanagement. SVN26 bietet darüber hinaus weitere Vorteile wie z.B. der Vergleich des lokalen Repositorys mit dem offiziellen Repository (um Patches zu erstellen). SVN wird in dieser Arbeit nicht beschrieben, da dies den Zeitrahmen dieser Arbeit sprengen würde. Ich habe bewusst keine OpenWRT-Konfiguration dieser Arbeit beigelegt, da diese innert kürzester Zeit nicht mehr gültig wäre, da die Konfiguration beinahe täglich ändert.

Wichtiger Hinweis: Ich verwende in dieser Dokumentation die neuste SVN Version (Bleeding edge27) von OpenWRT. Das bedeutet, dass einzelne Teile umgestellt werden können und daher die Dokumentation nicht mehr stimmt, resp. nicht mehr auf dem aktuellsten Stand ist. Hinweise sind auf der OpenWRT Webseite zu finden!

25 http://openwrt.org/ 26 http://subversion.tigris.org/ 27 http://en.wikipedia.org/wiki/Bleeding_edge

Page 15: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 15 von 89

WAS IST OPENWRT

Auf der Webseite von OpenWRT wird kurz und klar definiert, was OpenWRT ist:

� Minimalistic Busybox/Linux distribution GPL licensed � Set of Makefiles and tools building an embedded rootfs � Packages and repositories � Hardware donators, package maintainers and kernel hackers community

Abbildung 4: OpenWRT Software Architektur

uClibs:

Im PC-Bereich bezeichnet uClibc eine für Linux-Embedded-Systeme konzipierte, kleine C-Bibliothek. Es ist freie Software, lizenziert unter der LGPL.

uClibc wurde erstellt, um µClinux, eine Version des Linux-Kernels ohne Speicherverwaltungseinheit (MMU), zu unterstützen und deshalb eignet es sich für Mikrocontroller (deshalb das "uC" im Namen).

uClibc ist viel kleiner als glibc, der Standard C Library der meisten Linux-Distributionen. Während glibc entwickelt wurde, um alle relevanten C-Standards auf einer Vielzahl von Plattformen voll zu unterstützen, ist uClibc nur auf Linux-Embedded-Systeme fixiert. Funktionen können aktiviert oder deaktiviert werden, je nachdem wieviel Speicherplatz zur Verfügung steht.

uClibc läuft auf Standard- und MMU-losen Linux-Systemen. Es unterstützt i386, ARM (Big/Little Endian), AVR32, Blackfin, h8300, m68k, MIPS (Big/Little Endian), PowerPC, SuperH (Big/Little Endian), Sun SPARC, Nios und v850 Prozessoren.28

28 Quelle: http://de.wikipedia.org/wiki/UClibc

Page 16: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 16 von 89

Busybox:

BusyBox ist ein Computerprogramm, das viele Standard-Unix-Dienstprogramme in einer einzelnen, kleinen ausführbaren Datei vereint. Es stellt die meisten Dienstprogramme bereit, die in der Single Unix Specification (SUS) gefordert werden; dazu viele weitere, die ein Benutzer eines Linux-Systems erwarten würde. BusyBox wird wegen seiner geringen Größe gewöhnlich in Disketten- und Embedded-Linux-Systemen genutzt. Dank seiner Vorteile für diese Systeme wird es zum Beispiel in Linux-Systemen auf dem Sharp Zaurus, dem Nokia 770, dem Motorola ROKR Z6, auf dem Fon-Router "LaFonera", auf AVM-FRITZ!Boxen, dem Acme Systems Foxboard, der Debian Linux 4.0 Installations CD oder dem GP2X verwendet. Es ist freie Software und unterliegt der GNU General Public License (GPL).29

Busybox fasst Tools wie tar, gzip, grep, cat, ls, head, vi, dd, mount, ash, kill, touch, netstat… in einem einzigen binären File zusammen. UCI: Universal Configuration Interface, zentrale Konfiguration des Routers, Filebasierend (/etc/config/*). IPKG:

iPKG ist ein Akronym für „Itsy Package Management System“ (engl., „Klitzekleines Paket Verwaltungs System“). Das Format wurde als Paketmanager für Computer mit wenigen Ressourcen entworfen und wird u.a. von Openmoko, Zaurus und OpenWrt verwendet. Auf folgende Punkte wurde bei der Entwicklung besonderer Wert gelegt:

� Die Kontrollprogramme selbst sind sehr klein.

� Die installierten Metadaten beschränken sich auf das Wichtigste.

� Die verfügbaren Pakete sind möglichst klein. Der Paketbaum soll sehr fein granuliert sein.30

29 Quelle: http://de.wikipedia.org/wiki/Busybox 30 Quelle: http://de.wikipedia.org/wiki/IPKG

Page 17: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 17 von 89

ENTWICKLUNGSUMGEBUNG

Als Entwicklungsumgebung wird das vom OpenWRT Team erstellte „Buildroot-ng“ verwendet. Das Hauptproblem einer Entwicklungsumgebung für Embedded Device’s ist, dass Embedded Device’s auf einer anderen Hardware Architektur laufen als die Entwicklungsumgebung. Klassisch wird auf einer X86 oder 64x Machine gearbeitet, während die Embedded Devices auf einer anderen Hardware Plattform laufen, wie z.B. ARM oder BCM47xx. Um nun Software für ein Embedded Device zu erstellen ist ein Cross Compiler notwendig, welcher den Code in das entsprechende Embedded Format kompiliert. Ein schematischer Überblick, wie Buildroot-ng funktioniert:

Compile

Cross Compile

Create

Abbildung 5: Entwicklungsumgebung

Als erstes muss der Embedded Toolchain erstellt werden. Ein Toolchain dient zur Kompilierung von Code und besteht aus folgenden Komponenten: Compiler, Linker, Assembler, Debugger, Make Tools. Ist der Toolchain erstellt worden, können nun Programme für die Embedded Architektur erstellt werden. Das Erstellen einer Cross Compiler Umgebung ist eine komplexe und schwierige Aufgabe, die mit dem Buildroot-ng System gemeistert wird. Für den Anwender von OpenWRT ist der Cross-Compile Vorgang transparent. Die OpenWRT Entwicklungsumgebung besteht aus keinem einzigen binären File, sondern aus Skripts und Metadaten. Will man eine neue Firmware erstellen, werden die benötigten Source-Files via Internet heruntergeladen, bei Bedarf gepatched und kompiliert.

Page 18: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 18 von 89

Vorbedingungen

Damit eine funktionierende Firmware erstellt werden kann, müssen folgende Applikationen auf der Build Machine installiert sein:

� Autoconf � Autotools � Automake � gcc � g++ � zlib � gawk � bison � ncurses � perl � python � wget � svn � bison � flex � unzip � bzip2 � tar

Ausserdem darf der ausführende User keine Root-Rechte verwenden. Das dient zur eigenen Sicherheit, dass keine Daten lokal überschrieben werden. Um zu überprüfen, ob alle Abhängigkeiten erfüllt sind, kann der Befehl „make prereq“ verwendet werden (nachdem die SVN Version aus dem Trunk ausgecheckt wurde, siehe nächstes Kapitel).

Page 19: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 19 von 89

AUSCHECKEN DER AKTUELLEN SVN VERSION

Um einen aktuellen Build von OpenWRT zu erstellen, kann man die aktuelle Version aus dem SVN Repository auschecken. Im folgenden Beispiel wird im home Verzeichnis des Users ein „trunk“ Unterverzeichnis erstellt: svn checkout https://svn.openwrt.org/openwrt/trunk/ ~/trunk/ cd ~/trunk/

Jetzt müssen noch die Software Packages installiert werden: ./scripts/feeds update ./scripts/feeds install -a

Jetzt ist das gesamte Buildsystem von OpenWRT heruntergeladen und die Firmware kann konfiguriert und erstellt werden. Die Konfiguration wird mit dem Befehl „make menuconfig“ erstellt. Bevor ein Dialog erscheint, werden noch diverse Vorbedingungen überprüft. Im folgenden Menu kann die ganze Firmware konfiguriert werden, vom Hardware Typ, über Kernel Module bis zu den Applikationen kann alles ausgewählt werden.

Abbildung 6: OpenWRT Firmware Konfiguration

Hier weitere Beispiele:

� Erstellen eines einzelnen Packages make package/<package-name>-compile

� Erstellen eines einzelnen Packages im Verbose Modus make package/<package-name>-compile V=99

� Löschen eines einzelnen Packages make package/<package-name>-clean V=99

� Schlägt das Kompilieren nach diversen Änderungen fehl, empfiehlt es sich, den Kernel neu zu erstellen. Die erfolgt mit folgendem Befehl: make target/linux/clean

� Konfiguration des Kernels make kernel_menuconfig V=99

Page 20: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 20 von 89

PORTIERUNG

Das Hauptproblem bei der Portierung von Applikationen für OpenWRT (oder generell Embedded Systeme) ist, dass Embedded Devices meistens einen Bruchteil der Rechenkraft eines „normalen“ Desktop Systems haben. Um eine Applikation für OpenWRT zu portieren, sind folgende Schritte notwendig:

� Erstellen eines Makefile. Hier werden Metadaten über die Applikation gesammelt, d.h. Angaben wie Name, Version, URL, Checksumme, Konfigurationsoptionen und Installationsoptionen

� Evtl. wird für die Applikation eine Code-Änderung benötigt, z.B. muss das (Original) Makefile angepasst werden. In der Praxis zeigt sich, dass relativ viele Applikationen einen Patch benötigen.

Einfache Portierung

Ein einfaches Beispiel einer portierten Applikation: # # Copyright (C) 2008 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # include $(TOPDIR)/rules.mk PKG_NAME:=bluez-hcidump PKG_VERSION:=1.40 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://bluez.sourceforge.net/download PKG_MD5SUM:=c5793b79c3e7fea3a367c08c26c8e23c PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install include $(INCLUDE_DIR)/package.mk define Package/bluez-hcidump SECTION:=utils CATEGORY:=Utilities DEPENDS:=+bluez-libs TITLE:=Bluetooth packet analyzer URL:=http://www.bluez.org/ endef define Build/Configure $(call Build/Configure/Default, \ --with-bluez="$(STAGING_DIR)/usr/include" \ ) endef define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) \ DESTDIR="$(PKG_INSTALL_DIR)" \ all install endef define Package/bluez-hcidump/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/hcidump $(1)/usr/sbin/ endef $(eval $(call BuildPackage,bluez-hcidump))

Zuerst werden Name, Version und URL der Applikation festgelegt. Anschliessend wird der Menueintrag definiert inklusive Abhängigkeiten von anderen Applikationen. Zum Schluss werden noch die Konfigurations und Compiler Optionen angegeben. Für jede Applikation wird im Package Verzeichnis ein Unterverzeichnis erstellt. In diesem Package Unterverzeichnis ist das Makefile vorhanden. Es gibt zusätzlich ein spezielles Unterverzeichnis namens „patch“.

Page 21: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 21 von 89

Komplexere Portierung

Als komplexere Applikation dient die Applikation LCD4Linux, hier der Aufbau des Verzeichnisses: michux@fwpiercer:~/trunk/package/utils/lcd4linux$ ls -al drwxr-xr-x 3 michux michux 4096 2008-04-10 11:04 files <dir> drwxr-xr-x 3 michux michux 4096 2008-04-28 13:23 patches <dir> -rw-r--r-- 1 michux michux 3960 2008-04-28 14:29 Config.in -rw-r--r-- 1 michux michux 3025 2008-04-28 14:15 Makefile michux@fwpiercer:~/trunk/package/utils/lcd4linux$ ls files/ -al -rw-r--r-- 1 michux michux 22673 2008-04-10 11:04 lcd4linux.conf -rw-r--r-- 1 michux michux 296 2008-04-10 11:04 lcd4linux.init michux@fwpiercer:~/trunk/package/utils/lcd4linux$ ls patches/ -al -rw-r--r-- 1 michux michux 420 2008-04-10 11:04 100-drv_RouterBoard.patch -rw-r--r-- 1 michux michux 881 2008-04-10 11:04 120-remove_parport_outb.patch -rw-r--r-- 1 michux michux 587 2008-04-10 11:04 140-no_repnop_T6963.patch -rw-r--r-- 1 michux michux 78429 2008-04-12 03:52 150-addlibmpdclient.patch

Hier die Beschreibung der einzelnen Files:

� lcd4linux / Makefile – das generelle Makefile für diese Applikation � lcd4linux / Config.in – ein Konfigurations-File um einzelne Applikationen auszuwählen � lcd4linux / files / lcd4linux.conf – die Applikationskonfiguration � lcd4linux / files / lcd4linux.init – init File um die Applikation als Daemon automatisch zu starten � lcd4linux / patches / * – Applikationsspezifische Codeänderungen

Das Makefile im Detail: include $(TOPDIR)/rules.mk PKG_NAME:=lcd4linux PKG_REV:=877 PKG_VERSION:=r$(PKG_REV) PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=https://ssl.bulix.org/svn/lcd4linux/trunk/ PKG_SOURCE_SUBDIR:=lcd4linux-$(PKG_VERSION) PKG_SOURCE_VERSION:=$(PKG_REV) PKG_SOURCE_PROTO:=svn PKG_FIXUP = libtool include $(INCLUDE_DIR)/package.mk define Package/lcd4linux SECTION:=utils CATEGORY:=Utilities DEPENDS:= +libusb TITLE:=LCD display utility URL:=http://lcd4linux.bulix.org/ MENU:=1 endef define Package/lcd4linux/config menu "Configuration" depends on PACKAGE_lcd4linux source "$(SOURCE)/Config.in" endmenu endef define Package/lcd4linux/description LCD4Linux is a small program that grabs information from the kernel and some subsystems and displays it on an external liquid crystal display. endef define Package/lcd4linux/conffiles

/etc/lcd4linux.conf endef LCD4LINUX_DRIVERS:= \ BeckmannEgle \ BWCT \ CrystalFontz \

Page 22: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 22 von 89

<...> USBLCD \ USBHUB \ WincorNixdorf \ X11 \ LCD4LINUX_PLUGINS:= \ apm \ asterisk \ button_exec \ <...> uname \ uptime \ wireless \ xmms \ LCD4LINUX_CONFIGURE_DRIVERS:= \ $(foreach c, $(LCD4LINUX_DRIVERS), \ $(if $(CONFIG_LCD4LINUX_DRV_$(c)),$(c),) \ ) LCD4LINUX_CONFIGURE_PLUGINS:= \ $(foreach c, $(LCD4LINUX_PLUGINS), \ $(if $(CONFIG_LCD4LINUX_PLUGIN_$(c)),$(c),) \ ) EXTRA_CFLAGS+=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/l ib/libiconv/include EXTRA_LDFLAGS+=-L$(STAGING_DIR)/usr/lib -Wl,-rpath-link,$(STAGING_DIR)/usr/lib -L$(STAGING _DIR)/usr/lib/libiconv/lib TARGET_CONFIGURE_OPTS+=\ CC="$(TARGET_CC) $(EXTRA_CFLAGS) $(EXTRA_LDFLAGS)" CONFIGURE_ARGS += \ --without-x \ --without-python \ --with-drivers="$(LCD4LINUX_CONFIGURE_DRIVERS)" \ --with-plugins="$(LCD4LINUX_CONFIGURE_PLUGINS)" \ --disable-rpath \ define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) DESTDIR="$(PKG_INSTALL_DIR)" all install endef define Package/lcd4linux/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/usr/bin/ $(INSTALL_DIR) $(1)/etc $(INSTALL_CONF) ./files/$(PKG_NAME).conf $(1)/etc/$(PKG_NAME).conf $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/$(PKG_NAME).init $(1)/etc/init.d/$(PKG_NAME) endef $(eval $(call BuildPackage,lcd4linux))

Im ersten Teil wird definiert, dass die Source direkt aus dem SVN Repository extrahiert werden soll (PKG_SOURCE_PROTO:=svn). Im Menu-Konfigurations Abschnitt wird definiert, dass ein externes File namens „Config.in“ verwendet werden soll. Dieses „Config.in“ File ist folgendermassen aufgebaut: comment "LCD4Linux Drivers ---" config LCD4LINUX_DRV_BeckmannEgle bool prompt "BeckmannEgle" config LCD4LINUX_DRV_Curses bool default y select PACKAGE_libncurses prompt "Curses (depends on libncurses, you need to install it manually!)" <...> comment "LCD4Linux Plugins ---" config LCD4LINUX_PLUGIN_apm bool prompt "apm"

Page 23: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 23 von 89

config LCD4LINUX_PLUGIN_gps bool select PACKAGE_libnmeap prompt "gps (depends on libnmeap, you need to install it manually!)" <...>

Für jeden möglichen Treiber und jedes mögliche Plugin wird ein Menueintrag erstellt. Hier können zusätzliche Abhängigkeiten direkt erfasst werden (select PACKAGE_name). Folgender Ausschnitt aus dem Makefile: LCD4LINUX_CONFIGURE_DRIVERS:= \ $(foreach c, $(LCD4LINUX_DRIVERS), \ $(if $(CONFIG_LCD4LINUX_DRV_$(c)),$(c),) \ )

Überprüft nun, welcher Eintrag ausgewählt wurde, und übergibt diesen String anschliessend dem Konfigurations Skript. Bei der Installation der Applikation (define Package/lcd4linux/install) wird das Init-File und das Konfigurationsfile mitkopiert. Für den Endanwender ist das sehr praktisch, da a) das Default Konfigurationsfile abgeändert werden kann und b) der Befehl „/etc/init.d/lcd4linux enable“ die Applikation nach jedem Reboot automatisch startet.

Abbildung 7: Auswahl der Applikation

Abbildung 8: Auswahl der Konfigurationsoptionen

Abbildung 9: Konfiguration der Applikation

Page 24: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 24 von 89

Wie oben bereits erwähnt, benötigt LCD4Linux diverse Patch-Files, damit die Applikation kompiliert werden kann. Hier ein Beispiel eines einfachen Patches namens 100-drv_RouterBoard.patch: Index: lcd4linux-847/drv_RouterBoard.c =================================================================== --- lcd4linux-847.orig/drv_RouterBoard.c 2007-12-01 17:15:10.000000000 +0100 +++ lcd4linux-847/drv_RouterBoard.c 2007-12-01 17:15:10.000000000 +0100 @@ -106,7 +106,7 @@ #include <string.h> #include <errno.h> #include <unistd.h> -#include <sys/io.h> +#include <asm/io.h> #include "debug.h" #include "cfg.h"

Dieser Patch korrigiert ein Include-Verzeichnis, welche Kernel-Version abhängig ist. Ein Patch kann jedoch auch funktionaler Natur sein, der Patch 120-remove_parport_outb.patch entfernt die Funktion, auf den Parallel Port zugreifen zu können, da kein Router einen Parallel-Port haben wird: Index: lcd4linux-847/drv_generic_parport.c =================================================================== --- lcd4linux-847.orig/drv_generic_parport.c 2007-12-01 17:15:10.000000000 +0100 +++ lcd4linux-847/drv_generic_parport.c 2007-12-01 17:15:11.000000000 +0100 @@ -39,16 +39,6 @@ #include <sys/stat.h> #include <sys/ioctl.h> -#ifdef HAVE_SYS_IO_H -#include <sys/io.h> -#define WITH_OUTB -#else -#ifdef HAVE_ASM_IO_H -#include <asm/io.h> -#define WITH_OUTB -#endif -#endif - #if defined (HAVE_LINUX_PARPORT_H) && defined (HAVE_LINUX_PPDEV_H) #define WITH_PPDEV #include <linux/parport.h> @@ -65,6 +55,11 @@ #define PARPORT_STATUS_BUSY 0x80 #endif +#ifndef WITH_OUTB +#define inb(foo) 0 +#define outb(foo,bar) 0 +#endif + #if !defined(WITH_OUTB) && !defined(WITH_PPDEV) #error neither outb() nor ppdev() possible #error cannot compile parallel port driver

Page 25: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 25 von 89

Patch erstellen

Ein Patch wird mit dem Command Line Tool „diff“ erstellt. Ein einfaches Beispiel, es sollen zwei Files verglichen werden: File test_a: ich bin ein file ich bestehe nur aus text und solXXXXl die funktion der applikation diff aufzeigen

File test_b: ich bin ein file ich bestehe nur aus text und soll die funktion der applikation diff aufzeigen

Patch erzeugen: michux@fwpiercer:/tmp$ diff -urN test_a test_b --- test_a 2008-04-28 15:48:44.000000000 +0200 +++ test_b 2008-04-28 15:49:16.000000000 +0200 @@ -1,5 +1,5 @@ ich bin ein file ich bestehe nur aus -text und solXXXXl die +text und soll die funktion der applikation diff aufzeigen

Um einen Patch zu erstellen, wird das trunk/build_dir/<ARCH>/<PACKAGE> Verzeichnis verwendet. Das Originalfile wird kopiert und umbenannt (z.B. in myfile.orig), danach werden die Änderungen erledigt. Nun kann mit dem „diff“ Tool der Patch erstellt werden („diff –urN <PACKAGE>/myfile.orig <PACKAGE>/myfile.c > mein.patch). Ein Beispiel, um die Applikation bemused-mpd-hack zu patchen: ~/trunk/build_dir/mipsel$ cp bemused-mpd-r060/main.cpp bemused-mpd-r060/main.orig [edit bemused-mpd-r060/main.cpp] ~/trunk/build_dir/mipsel$ diff -urN bemused-mpd-r060/main.orig bemused-mpd-r060/main.cpp --- bemused-mpd-r060/main.orig 2008-04-29 08:24:22.000000000 +0200 +++ bemused-mpd-r060/main.cpp 2008-04-29 08:25:47.000000000 +0200 @@ -27,6 +27,7 @@ void show_usage(void) { cout << "Bemused Linux Server v" << VERSION_STRING << endl; + cout << "Test Patch" << endl; cout << "usage: bemusedlinuxserver [-d]" << endl; cout << " -d daemonize" << endl; }

Dieses File kann nun dem Package Patch Verzeichnis hinzugefügt werden, danach kann die Applikation neu erstellt werden.

Page 26: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 26 von 89

OPENWRT DISKLAYOUT / BOOTVORGANG

Quellennachweis: http://forum.openwrt.org/viewtopic.php?id=11304 In den meisten SOHO-Routern sind folgende Komponenten zu finden:

� Flash Chip (2MB, 4MB, 8MB) � RAM, meistens 4x Flash Memory grösse

Beim Aufstarten des Routers wird kein ROM benötigt, die CPU führt den Code am Flashbeginn direkt aus. Dieser Part wird als Bootloader bezeichnet und kann mit dem BIOS eines Computers verglichen werden. Die Hauptaufgabe des Bootloaders besteht aus der Initialisierung der Hardware und des RAM's, danach wird die Firmware gebootet. Meistens hat der Bootloader noch einen Recovery-Mechanismus eingebaut, um die Firmware neu zu flashen. Eine beschädigte oder fehlerhafte Firmware kann also relativ einfach "repariert" werden und verhindert, dass der Router als teurer Briefbeschwerer endet. Das ergibt folgendes Bild des Flash Layouts:

Abbildung 10: Flashlayout I

Der Flash Chip besteht aus einem durchgängigen Speicherbereich, es gibt keine Partitionen, sondern nur "hard coded locations".

Aus was besteht die Firmware

Wie oben bereits bemerkt wurde, führt der Bootloader den Beginn der Firmware-Location aus - es wird also lediglich ein ausführbarer Code benötigt. Im Normalfall würde hier der Kernel liegen. Da jedoch nur begrenzt Flash-Speicher zur Verfügung steht und der Kernel relativ gross ist, bietet es sich an, den Kernel zu komprimieren. OpenWRT komprimiert den Kernel mit dem effizienten LZMA31 Verfahren, somit ändert sich das Flash Layout:

Abbildung 11: Flashlayout II

Bis jetzt sind noch keine User oder Systemdaten vorhanden. Diese müssen natürlich auf einem Filesystem abgespeichert werden. OpenWRT verwendet folgende Filesysteme:

� SquashFS32: ein komprimiertes READ ONLY Filesystem. � JFFS233: bedeutet "Journaling Flash File System Version 2". Dieses Filesystem ist beschreibbar

und unterstützt "Wear Leveling"34. Wear Leveling versucht, die Lebenszeit der Flash Medien zu verlängern. Ein Flash Medium besteht aus mehreren Segmenten, jedes Segment kann zwischen 10'000 und 1'000'000 mal überschrieben werden. Wear Leveling versucht nun, Schreibzugriffe gleichmässig auf alle Segmente zu verteilen und erreicht somit eine höhere Lebensdauer des Flash Mediums.

31 http://de.wikipedia.org/wiki/Lempel-Ziv-Markow-Algorithmus 32 http://squashfs.sourceforge.net/ 33 http://sources.redhat.com/jffs2/ 34 http://en.wikipedia.org/wiki/Wear_levelling

Page 27: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 27 von 89

Warum 2 Filesysteme? Die beiden Filesysteme SquashFS und JFFS2 verwenden LZMA um die Daten zu komprimieren. SquashFS komprimiert jedoch 20-30% besser als das R/W JFFS Filesystem. Die Vorteile jedes File-Systems:

� Pro SquashFS: Effizienteste Speichernutzung � Pro JFFS: Beschreibbar, Journaling, Wear Leveling

Diese Vorteile werden nun folgendermassen in OpenWRT genutzt:

� Installation des Basis OS Image erfolgt im SquashFS � Installation von weiteren Applikationen (=Packages) und User-Änderungen erfolgen im JFFS2

Filesystem � OpenWRT verwendet das virtuelle Filesystem mini_fo35, welches die SquashFS und JFFS2

Filesysteme zusammenfasst und als ein ganzes Filesystem Linux präsentiert. Wird ein File, welches in SquashFS enthalten ist, geändert und abgespeichert, redirected mini_fo das File und speichert dies in der JFFS2 Partition ab. Der Link zum originalen SquashFS wird dann gelöscht, das File selber bleibt dann als "Leiche" zurück (da SquashFS Read Only ist). Das ist der Grund, warum möglichst wenige Applikationen im OS Image sein sollten.

Das Ganze hat einen interessanten Nebeneffekt: Es ermöglicht das Booten des Routers im Fail-Safe Mode. Hat man, warum auch immer, sein JFFS2 Filesystem zerstört oder kann nicht mehr "normal" Booten, kann man durch Drücken einer Taste am Router während des Bootens in den Fail-Safe Mode schalten. In diesem Modus verhält er sich wie nach einem reflash - es werden nur Daten auf dem SquashFS berücksichtigt. So hat er per Default die IP Adresse 192.168.1.1. Das Flash Layout kann nun wieder erweitert werden:

Abbildung 12: Flashlayout III

Der Bootvorgang im Detail:

� kernel boots from squashfs and runs /etc/preinit � /etc/preinit runs /sbin/mount_root � mount_root mounts the jffs2 partition (/jffs) and combines it with the squashfs partition (/rom) to

create a new virtual root filesystem (/) � bootup continues with /sbin/init

35 http://www.denx.de/wiki/Know/MiniFOHome

Page 28: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 28 von 89

6. DETAILKONZEPT / DESIGN

Page 29: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 29 von 89

SYSTEMÜBERSICHT MP3 PLAYER

Abbildung 13: Übersicht MP3 Player

Page 30: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 30 von 89

APPLIKATIONSÜBERSICHT MP3 PLAYER

Einzelne Applikationen haben zur Laufzeit und/oder Kompilierungszeit Abhängigkeiten auf andere Applikationen. Folgende Abbildung zeigt alle Applikations-Abhängigkeiten des MP3 Players:

Abbildung 14: Detailierte Applikations-Abhängikeiten

Page 31: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 31 von 89

MPD

Kurzübersicht: Zweck: Netzwerkfähiger Musikserver Benötigt: Soundkarte Musikfiles (lokal oder remote) Korrekte Systemzeit (ansonsten wird die Uptime falsch angezeigt) Interface: Netzwerkport (Port 6600) zur Steuerung des Players

Pulseaudio für abgesetzte Player (Remote Audioausgabe) Lokale Audioausgabe MPD (Music Player Daemon) ist, wie auf der Übersicht des MP3 Players (Abbildung 12) zu sehen ist, die Kernapplikation des MP3 Players. Eine Übersicht, wie der MPD funktioniert36:

Abbildung 15: Übersicht MPD

36 Bildquelle: http://mpd.wikia.com/wiki/What_MPD_Is_and_Is_Not

Page 32: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 32 von 89

Wie auf der Abbildung zu sehen ist, ist der MPD netzwerkfähig und kann daher von verschiedenen Clients verwendet werden. MPD orientiert sich vom Funktionsumfang her an klassischen *NIX Applikationen – es macht eine Sache und diese richtig. Es gibt viele verschiedene Clients, vom spartanischen Command Line Client MPC (der sich sehr gut zum Skripten eignet), über Web Clients bis zu ausgefeilten Desktop-Playern mit Visualisation und Cover Art Unterstützung ist alles vorhanden. Für Entwickler sind diverse Libraries vorhanden, die die Interaktion mit dem MPD vereinfachen. Security: Der (default) MPD Port 6600 ist nicht geschützt, d.h. Clients können ohne Authentifizierung den Player steuern. Es gibt die Möglichkeit, ein Passwort zu setzen, das ist jedoch auch nur begrenzt sicher (Plaintext über das LAN). Eine sichere Alternative wäre, SSH zu verwenden. Da das Device jedoch für den Heim-Gebrauch bestimmt ist und sich im LAN befindet, erachte ich eine solche Massnahme als überflüssig (siehe auch die MPD Wiki Seite37). Der MPD erstellt nach jedem Start eine lokale Datenbank (Flat-File). In dieser sind alle vorhanden Songs im angegebenen Musik-Verzeichnis vorhanden. Das dauert je nach Anzahl der Files eine gewisse Zeit, jedoch hat man die Gewissheit, dass der Datensatz konsistent ist.

MPC

Kurzübersicht: Zweck: Steuerung des Musikservers MPD Benötigt: via Netzwerk erreichbarer MPD-Server Interface: Skript-fähige, abgesetzte Steuerung des MPD MPC ist ein sehr vielfältiger und leistungsstarker Client, mit dem MPD gesteuert werden kann. Eine Übersicht über alle möglichen Befehle ist im MPD-Wiki38 (oder mit „mpc –help“) vorhanden. Hier ein paar Beispiele: Alle im Songverzeichnis vorhandenen Files in der Playlist aufnehmen: # mpc listall | mpc add –

Alle Songs der Band „Morcheeba“ in die Playlist aufnehmen: # mpc search artist morcheeba | mpc add –

Info: Nach folgenden Informationen kann gesucht werden: artist, album, title, track, name, genre, date, composer, performer, comment, disc, filename, any Es gibt einen Windows-Client von MPC39. Damit ist es möglich, den entfernten MPD Server des MP3 Players zu kontrollieren. Beispiel: C:\_hftso\diplomarbeit\mpc-win32-0.12.1>set MPD_HOST=10.105.66.20 C:\_hftso\diplomarbeit\mpc-win32-0.12.1>mpc UnitedBreaks.FM - Online Breakbeat Station - www.unitedbreaks.fm: [Johnny CaGe]-(10:08) [playing] #1/1 3:45/0:00 (100%) volume:100% repeat: on random: on

MPC verwendet die Umgebungsvariable MPD_HOST, um den MPD Server auszulesen. Hinweis: MPC dient nur zu steuern des MPD Players, eine Audioausgabe mit MPC ist nicht möglich!

37 http://mpd.wikia.com/wiki/Music_Player_Daemon_Security 38 http://mpd.wikia.com/wiki/MusicPlayerDaemonCommands#search 39 http://mpd.wikia.com/wiki/Client:Mpc-win32

Page 33: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 33 von 89

SCMPD

Kurzübersicht: Zweck: Übermittelt Meta-Daten der abgespielten Songs an Last.fm Benötigt: via Netzwerk erreichbarer MPD-Server aktuelle Systemzeit (via NTP) Interface: - Dieser MPD Client übermittelt die gespielten Songs auf die Web 2.0 Seite http://www.last.fm/. Wird ein Song nicht ganz gehört, d.h. vorgespult wird der Song nicht übertragen. Voraussetzung, dass die Übermittlung akzeptiert wird, ist eine korrekte Systemzeit. Der Router verfügt über keine „Real-Time-Clock“ – nach einem Reboot muss die Zeit also via NTP Protokoll aktualisiert werden.

CmdPad

Kurzübersicht: Zweck: Steuern des Routers, führt einen Befehl/Skript aufgrund einer gedrückten Taste aus Benötigt: HID-fähige Hardware wie z.B. USB Keypad Interface: - Jede gedrückte Taste auf einem HID fähigen Device erzeugt einen numerischen Keycode. Dieser wird durch CmdPad ausgewertet und ein entsprechendes Skript oder eine Applikation werden ausgeführt. Dabei kann CmdPad unterscheiden, ob eine Taste gedrückt wird, losgelassen oder gedrückt gehalten wird.

Bemused-MPD-hack

Kurzübersicht: Zweck: Steuern des MPD via Mobiltelefon Visualisierung von MPD Informationen auf dem Mobiltelefon Benötigt: via Netzwerk erreichbarer MPD-Server

Bluetooth Kernel-Modul und Userspace Tools Client auf dem Mobiltelefon

Bietet: Serverinterface für Mobiltelefon Client Der Bemusedserver benötigt einen funktionierenden Bluetooth Stack, welcher in aktuellen Linux Kernel bereits integriert ist. Ausserdem werden die blueZ-* Userspace Tools40 benötigt. Sind diese Voraussetzungen erfüllt, kann der Server via serieller-Bluetooth Schnittstelle mit dem Client (=Mobiltelefon) kommunizieren. Der Bemusedserver kommuniziert mit dem MPD Server um Informationen abzufragen oder Steuerbefehle abzusetzen. So ist es möglich, auf einem Mobiltelefon die aktuellen MPD Informationen abzurufen und den MPD aktiv zu steuern. Hier eine Auswahl an Möglichkeiten:

� Steuern des MPD (Play, Pause, Stop, Next Song, Prev Song, Toggle Random, Toggle Repeat…) � Direktauswahl eines Songs aus der Playlist � Playlist bearbeiten � Abspielen von vordefinierten Radio-Streams � Kopieren von Songs direkt auf das Mobiltelefon

40 http://www.bluez.org/

Page 34: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 34 von 89

LCD4Linux

Kurzübersicht: Zweck: Visualisierung von MPD Informationen Benötigt: via Netzwerk erreichbarer MPD-Server Interface: - Als Datenquelle dienen Plugins, welche entsprechende Informationen abrufen. Die Daten werden mittels Widgets dargestellt, z.B. mittels eines Text Widgets oder eines Bar Widgets, der Zusammenhang wird hier aufgezeigt:

DatenquelleBsp: MPD Player Stati,

Uptime...

Anzeige-ArtBsp: Balken, Text...

Steuert Display an

LCD Display

Abbildung 16: LCD4Linux Terminologie

LCD4Linux kann die Anzeige sehr flexibel konfigurieren. Jedes Widget kann frei platziert und ausgerichtet werden. Hier eine schematische Beispiel-Konfiguration:

Widget 8

Abbildung 17: LCD4Linux konfiguration

Jedes Text-Widget kann dabei einzeln konfiguriert werden, z.B. Textausrichtung, Scrollingart.

Page 35: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 35 von 89

SYSTEMÜBERSICHT SSH GATEWAY

Abbildung 18: Übersicht SSH Gateway

Page 36: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 36 von 89

7. SW-ERGÄNZUNGEN

OPENWRT

Übersicht

Folgende Changeset’s habe ich dem OpenWRT Projekt hinzugefügt: Changeset 6661 – add package HTTPTunnel Changeset 7573 – add package libmpd Changeset 8155 – add package libnmeap Changeset 8386 – update package mpd to v0.13.0 Changeset 8467 – update package mpc to v0.12.1 Changeset 9476 – minor update package icmptx, fix display issues Changeset 9537 – minor update package devio, fix display issues Changeset 9644 – report bug about hotplug errors Changeset 9646 – update lcd4linux package to trunk 847 version, add init files Changeset 9721 – update atheros platform, fix reset button Changeset 9816 – update package iodine to v0.4.1 Changeset 9818 – update package PTunnel, add iptables rule Changeset 9855 – report bug about libcurl, fix compile errors Changeset 9979 – add package scmpc Changeset 9980 – add package confuse Changeset 9981 – add package argtable Changeset 9983 – update mpd package, add init script Changeset 10023 – update scmpc package, correct depends Changeset 10035 – add package cmdpad, inkl. Linux 2.6 Patch Changeset 10064 – update darkstat package, fix init file Changeset 10085 – update HTTPTunnel package, use hci for config Changeset 10160 – update PTunnel package, use hci for config Changeset 10211 – update cmdpad package, no-zombie patch Changeset 10231 – update bluez package to v3.24 (bluetooth), 4 packages Changeset 10351 – update mpd package v0.13.1 Changeset 10352 – update mpc package, add pls handler Changeset 10445 – add package libs/libshout Changeset 10446 – update openssh package, add ssh-keysign, used for hostbased auth. Changeset 10561 – add package LIRC Die Changeset’s können unter https://dev.openwrt.org/ nachgesehen werden. Quellcode: Die relevanten OpenWRT Makefiles und Patches sind auf der CD unter \Software\OpenWRT\packages zu finden. Weiter befindet sich die kompilierte Firmware unter \Software\OpenWRT\Firmware.

Page 37: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 37 von 89

Argtable

Applikation: Library, Command Line Parser Grund: Die Applikation SCMPC benötigt diese Library Arbeit: Makefile selber erstellt Schwierigkeitsgrad: Einfach, kein Patch nötig, kein Init-File nötig. Library muss zusätzlich in die Entwicklungsumgebung kopiert werden (installdev)

libdaemon

Applikation: Library, ermöglicht das eine Applikation als Daemon laufen kann Grund: Die Applikation SCMPC benötigt diese Library Arbeit: Makefile selber erstellt Schwierigkeitsgrad: Einfach, kein Patch nötig, kein Init-File nötig. Library muss zusätzlich in die Entwicklungsumgebung kopiert werden (installdev)

confuse

Applikation: Library, File Parser. Wird z.B. verwendet um Konfigurationsfiles zu lesen Grund: Die Applikation SCMPC benötigt diese Library Arbeit: Makefile selber erstellt Schwierigkeitsgrad: Einfach, kein Patch nötig, kein Init-File nötig. Library muss zusätzlich in die Entwicklungsumgebung kopiert werden (installdev)

scmpc

Applikation: Last.fm Daemon, übermittelt die gehörten Songs an Last.fm Grund: Anforderung Pflichtenheft (MP3 Player) Arbeit: Makefile selber erstellt, Patch erstellt, Init-File erstellt Schwierigkeitsgrad: Mittel, Patch nötig damit die Applikation kompiliert werden kann, viele Abhängigkeiten. Zusätzliches Init-File benötigt.

cmdpad

Applikation: Liest Keycodes eines HID Devices und führt entsprechend eine Applikation aus. Grund: Anforderung Pflichtenheft (MP3 Player) Arbeit: Makefile selber erstellt, Patches erstellt, Init-File erstellt Schwierigkeitsgrad: Mittel, Init-File benötigt, Patches nötig weil:

� Korrektur Makefile � Unterstützung für 2.6.x Kernel � Ausgeführte Applikationen werden sauber beendet

Page 38: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 38 von 89

lcd4linux

Applikation: Visualisierung von Informationen Grund: Anforderung Pflichtenheft (MP3 Player) Arbeit: Makefile erweitert (Update der Applikation, Menueinträge), Patch erstellt (für libmpdclient), Init-File erstellt, Plugin erstellt Schwierigkeitsgrad: Schwierig, sehr komplexes OpenWRT Makefile um einzelne Komponenten auszuwählen (Treiber und Plugins). Patches nötig um die Applikation auf Embedded Devices auszuführen (nicht von mir erstellt). Zusätzlich ein Init-File und ein Konfigurations File nötig.

MPD

Applikation: Music Player Daemon, Soundserver Grund: Anforderung Pflichtenheft (MP3 Player), Elementare Applikation des MP3 Players Arbeit: Makefile erweitert, verwenden von Libiconv, Init-File hinzugefügt Applikation updaten Schwierigkeitsgrad: Mittel, relativ komplexes OpenWRT Makefile (Angabe aller benötigten Libs)

MPC

Applikation: Music Player Console, Steuert MPD Grund: Kernapplikation um MPD zu steuern Arbeit: Makefile erweitert, Skript hinzugefügt um Radio Streams abzuspielen, Applikation updaten Schwierigkeitsgrad: Einfach, Standart OpenWRT Makefile

bluez-libs

Applikation: Bluetooth Library Grund: Die Applikation Bemused benötigt diese Library Arbeit: Update des Makefiles (neue Version der Applikation) Schwierigkeitsgrad: Einfach, Standart OpenWRT Makefile

bluez-utils

Applikation: Bluetooth Tools Grund: Die Applikation Bemused benötigt diese Library Arbeit: Update des Makefiles (neue Version der Applikation) Schwierigkeitsgrad: Schwierig, diese neue Version verwendet neu dbus, diverse Konfigurationsänderungen waren nötig, installieren von Konfigurations-Files

bluez-hcidump

Applikation: Bluetooth Traffic Dumper (Debug Tool) Grund: Troubleshooting bei Bluetooth Problemen Arbeit: Update des Makefiles (neue Version der Applikation) Schwierigkeitsgrad: Einfach, Standart OpenWRT Makefile

Page 39: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 39 von 89

bemused

Applikation: Bluetooth Server um mit MPD zu kommunizieren Grund: Anforderung Pflichtenheft (MP3 Player) Arbeit: Applikation angepasst, OpenWRT Makefile erstellt, Init-File erstellt, Patch File erstellt (Libiconv spezifisch), Konfigurations File erstellt Schwierigkeitsgrad: Mittel, viele Abhängigkeiten, viele zusätzliche Files, Patch war nötig

OpenSSH

Applikation: OpenSSH Suite (Client und Server) Grund: Anforderung Pflichtenheft (SSH Gateway) Arbeit: Makefile erweitert, das Tool ssh-keysign war nicht im Packet, welches für die host-based authentication nötig ist Schwierigkeitsgrad: Einfach

PTunnel

Applikation: ICMP Tunnel Software Grund: Anforderung Pflichtenheft (SSH Gateway) Arbeit: Update des Makefiles, Hinzufügen default Konfigurationsfile, Init-File erstellt welches IPTables rules anpasst, verwenden von UCI (zentrales OpenWRT Konfigurations-Skript) Schwierigkeitsgrad: Mittel, Standart OpenWRT Makefile jedoch Konfiguration von IPTables, verwendet UCI

http Tunnel

Applikation: http Tunnel Software Grund: Anforderung Pflichtenheft (SSH Gateway) Arbeit: Makefile erstellt, Hinzufügen default Konfigurationsfile, Init-File erstellt, verwenden von UCI (zentrales OpenWRT Konfigurations-Skript) Schwierigkeitsgrad: Mittel, Standart OpenWRT Makefile, verwendet UCI

Page 40: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 40 von 89

LCD4LINUX

Übersicht

Diese Applikation dient zur Ansteuerung eines Displays. Plugin MPD, neu erstellt Changeset 786 – update mpd plugin, add more functions Changeset 832 – update mpd plugin, more config options Changeset 848 – update mpd plugin to v0.7, rewrote plugin Changeset 850 – update mpd plugin, minor updates (sanity checks) Changeset 852 – update mpd plugin,to v0.8, use libmpdclient library Changeset 853 – update mpd plugin,to v0.81, fix connection issues Changeset 854 – update mpd plugin, add signal handler (SIGPIPE) Plugin GPS, neu erstellt Changeset 801 – add gps plugin, first version Changeset 831 – update gps plugin, add more functions + emulator code Changeset 841 – update gps plugin to v0.2, major update Changeset 842 – update gps plugin to v0.3, improved parser + emulator Changeset 851 – update gps plugin to v0.3, disable default emulator Plugin FIFO, neu erstellt Changeset 869 – add FIFO plugin, first version Changeset 875 – minor update Changeset 875 – add signal handler (SIGPIPE) Widget Text (Textanzeige) Changeset 849 – neue scrolling Art, Ping Pong Driver Crystalfontz Changeset 864 – update charset for Crystalfontz Model 632 and 634 Die Changes können unter http://ssl.bulix.org/projects/lcd4linux/ nachgesehen werden. Quellcode: Die ganze Source von LCD4Linux ist auf der CD unter \Software\LCD4Linux zu finden.

Page 41: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 41 von 89

Plugin Entwicklung

LCD4Linux beschreibt auf der Wiki Seite41, wie man ein neues Plugin erstellt:

How to write new plugins

Writing a new plugin for lcd4linux is quite easy, if you follow these steps:

� Get the SVN (Subversion) version: This is very important, because it makes it much easier for us to commit your changes into the official code. If you need help with SVN, look at the SVN section at the Download page.

� There's no need to keep two seperate directories (one with the original, one with your modifications): Subversion does this job for you.

� Always do a svn up before editing, to ensure you're working on current code.

� use plugin_sample.c as a template, but do not simply copy it, but let subversion do the job: svn cp plugin_sample.c plugin_<yourname>.c

� edit plugin_<yourname>.c

� add a short description what this plugin is for

� add your copyright notice (important: your name and email)

� Please do not modify the GPL part! (Yes, you have to put your code under GPL, otherwise I'll refuse your patch)

� do some documentation (I know that real programmers write programs, not documentation, but...)

� use one or more of the example functions as templates for your own functions

� register your new functions in the init() function, delete the sample ones

� edit plugin.c, add prototypes and the call to your plugin_init_* and plugin_exit_* function (just search for sample, copy&paste the corresponding areas, but try to keep it in alphabetical order)

� edit Makefile.am and add your plugin_*.c to EXTRA_lcd4linux_SOURCES (again, copy&paste the sample areas, take care for alphabetical order)

� edit plugins.m4 and copy&paste all sample areas (alphabetical order, please)

� run ./bootstrap, ./configure and make

� test with interactive mode (lcd4linux -i)

� run ./indent.sh to apply coding style (this does source code formatting)

� send us a patch:

� run svn diff >your_patch.diff and send us the file

� run svn commit -m "<your log message>" if you have SVN developer access and you know what you're doing

� add documentation to the wiki!!

Neben der eigentlichen Programierarbeit muss also noch das Automake-System angepasst werden und die ganze Sache im Wiki dokumentiert werden.

41 http://ssl.bulix.org/projects/lcd4linux/wiki/plugin_howto

Page 42: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 42 von 89

Das plugin_sample.c (vereinfacht) sieht folgendermassen aus: /* define the include files you need */ #include "config.h" #include <stdlib.h> #include <string.h> #include <ctype.h> /* these should always be included */ #include "debug.h" #include "plugin.h" /* sample function 'mul3' takes one argument, a number */ /* multiplies the number by 3.0 */ static void my_mul3(RESULT * result, RESULT * arg1) { /* do it all in one line */ double value = R2N(arg1) * 3.0; /* store result */ SetResult(&result, R_NUMBER, &value); } /* sample function 'upcase' takes one argument, a string */ /* returns the string in upper case letters */ static void my_upcase(RESULT * result, RESULT * arg1) { char *value, *p; /* create a local copy of the argument */ /* Do *NOT* try to modify the original string! */ value = strdup(R2S(arg1)); /* process the string */ for (p = value; *p != '\0'; p++) *p = toupper(*p); /* store result */ /* when called with R_STRING, it assumes the */ /* next parameter to be a pointer to a string */ /* 'value' is already a char*, so use 'value', not '&value' */ SetResult(&result, R_STRING, value); /* free local copy again */ /* Note that SetResult() makes its own string copy */ free(value); } /* plugin initialization, MUST NOT be declared 'static'! */ int plugin_init_sample(void) { /* register all our cool functions */ /* the second parameter is the number of arguments */ /* -1 stands for variable argument list */ AddFunction("sample::mul3", 1, my_mul3); AddFunction("sample::upcase", 1, my_upcase); return 0; } void plugin_exit_sample(void) { /* free any allocated memory */ /* close filedescriptors */ }

Jedes Plugin muss eine Initialisierungs- und Cleanup-Funktion implementieren. Jede Plugin spezifische Funktion muss in der Initialisierungs-Funktion registriert werden (inkl. Anzahl der Argumente).

Page 43: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 43 von 89

Das MPD Plugin hat folgende Spezialitäten: � Konfiguration von MPD Server Adresse, Server Port und Update Time (siehe unten) im

LCD4Linux Konfigurations-File. � Verwendet libmpdclient um mit dem MPD Server zu kommunizieren � Jeder Wert, der aus MPD ausgelesen wird, ist im Plugin selber gecachet � Es werden stets alle Daten aktualisiert � Da dieses Plugin auf einem Embedded Device laufen soll, sind Ressourcen generell schonend zu

behandeln. Daher aktualisiert das Plugin die Daten nur alle „Update Time“ ms, per Default alle 500ms. Eine Anfrage wird von der LCD4Linux Konfiguration ausgeführt, wenn dort z.B. ein Widget definiert ist, dass alle 100ms den Songtitel anzeigen soll, wird alle 100ms die entsprechende Funktion im Plugin aufgerufen. Jetzt werden viermal die gecachten Daten angezeigt (4x100ms < 500ms), beim fünften mal aktualisiert das Plugin dann wieder alle Daten, da die Update Time abgelaufen ist.

� Wird die Verbindung zum MPD unterbrochen, muss diese neu aufgebaut werden (Ignorieren von SIGPIPE, Broken Pipe Fehler)

� Wenn im Betrieb der MPD Server gestoppt wird, zeigt das Plugin die Cache-Daten an. Zusätzlich wird eine entsprechende Meldung in Syslog gemacht.

� Folgende Funktionen sind implementiert:

Funktionsname, Anz. Parameter Beschreibung (Str=String, Int=Integer)

mpd::artist, 0 Str: Artistname (ID3 Tag) mpd::title, 0 Str: Song Titel (ID3 Tag) mpd::album, 0 Str: Album Titel (ID3 Tag) mpd::file, 0 Str: Filename mpd::totalTimeSec, 0 Int: Dauer des Songs in Sekunden mpd::elapsedTimeSec, 0 Int: Aktuelle Spielzeit des Songs in Sekunden mpd::bitRate, 0 Int: Bit-Rate in kHz mpd::getSamplerateHz, 0 Int: Samplerate in Hz mpd::getAudioChannels, 0 Int: Wieviele Audiochannels mpd::getRepeatInt, 0 Int: Repeat all aktiviert (1=ja, 0=nein) mpd::getRandomInt, 0 Int: Random Play aktiviert mpd::getStateInt, 0 Int: Playerstatus, 0=unknown, 1=play, 2=pause, 3=Stopp mpd::getVolume, 0 Int: Volume von 0..100 mpd::getSongsInDb, 0 Int: Alle Songs in der Datenbank mpd::getMpdUptime, 0 Int: Zeit in Sekunden seit MPD gestartet wurde mpd::getMpdPlayTime, 0 Int: Zeit in Sekunden wenn MPD im Status PLAY ist mpd::getMpdDbPlayTime, 0 Int: Gesammtspielzeit der aktuellen Playlist mpd::getMpdPlaylistLength, 0 Int: Wieviele Songs sind in der Playlist mpd::getMpdPlaylistGetCurrentId, 0 Int: Id des aktuellen Songs mpd::formatTimeMMSS, 1 Str: Formatiert einen Int Wert in eine HH:MM Anzeige mpd::formatTimeDDHHMM, 1 Str: Formatiert einen Int Wert in eine DD:HH:MM Anzeige Mithilfe der Uptime-Funktion und einfacher Arithmetik, ist es möglich eine wechselnde Anzeige darzustellen: Widget mpd-toggler { class 'Text' expression ( (mpd::getMpdUptime()%60)<30 ? ('UP:'.mpd::formatTimeDDHHMM( mpd::getMpdUptime() ) ) :

('TRACK:'.mpd::getMpdPlaylistGetCurrentId().'/'.mpd::getMpdPlaylistLength()) ) width 15 align 'P' update tack }

30 Sekunden wird die Uptime angezeigt, danach die aktuelle Song-Nummer.

Page 44: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 44 von 89

Hinweis zu ID3 Tags

Das Hauptproblem bei ID3 Tags ist die String Encodierung. Damit die Tags korrekt ausgegeben werden, muss der String entsprechend umgewandelt werden. Es gibt zwei Versionen von ID3 Tags, ID3v1 und ID3v2. ID3v1 Diese Version entstand aus einem Hack, eine „offizielle“ Version gab es nie. Dennoch etablierte sich diese Version. Alle Strings sollten ISO 8859-1 encodiert werden, in der Praxis sieht dies jedoch häufig anders aus. Daher ist Mojibake42 (falsche Darstellung von Zeichen) ein häufiges Problem von ID3v1 Tags. ID3v2 Die Version 2 hingegen ist ein offizieller Standart, Informationen werden unter http://www.id3.org/ veröffentlicht. ID3v2 ist eigentlich eine falsche Bezeichnung, da von dieser Version zwei verschiedene Varianten existieren. ID3v2.3, encodiert Strings in ISO 8859-1 und UTF16. Unicode Strings müssen mit dem Unicode BOM ($FF FE oder $FE FF) beginnen, um die Byte order zu definieren. Alle numerischen Strings und URL’s werden immer mit ISO-8859-1 encodiert. ID3v2.4, unterstützt zusätzlich UTF-8. Diese Version ist jedoch kaum verbreitet. Fazit: Es sollte immer das ID3v2.3 Tag Format benutzt werden, weil bei dieser Version die String Encodierung standardisiert ist.

42 http://en.wikipedia.org/wiki/Mojibake

Page 45: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 45 von 89

BEMUSED LINUX SERVER

Leitet Bluetooth Anfragen an den MPD Server weiter. Ursprünglich für Windows entwickelt, danach auf Linux für den XMMS Player portiert. Der original Source von Bemused ist unter http://bemused.sourceforge.net/ zu finden. Ich habe Bemused Linux Server für den MPD Musik Player umgeschrieben. Unter http://bemused-lnx-mpdhack.origo.ethz.ch/ habe ich eine Projektseite eingerichtet, dort ist auch die aktuelle Version zu finden. Mittels eines Java Clients auf einem Mobil Telefon (http://jamse.sourceforge.net/) kann schlussendlich der MPD gesteuert werden:

Abbildung 19: Bemusedserver in Action

So kann der Player bequem via Mobil Telefon gesteuert werden. Es ist auch möglich, Songs via Bluetooth direkt auf das Telefon herunterzuladen. Quellcode: Die ganze Source von „Bemused linux server“ ist auf der CD unter \Software\ Bemusedlinuxserver zu finden.

Page 46: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 46 von 89

Code Änderungen

Bemused Linux Server besteht aus folgenden Sourcefiles:

� BemusedServerDlg.cpp: Hauptapplikation � MpdCtrl.c: Steuerung des MPD Servers

Folgende Bugs wurden behoben:

� BemusedServerDlg.cpp: Backport CVS Code aus dem Bemused CVS Server, vor allem für das Bookmark handling

� BemusedServerDlg.cpp: Signalhandler für die Signale SIGHUP, SIGINT, SIGQUIT, SIGTERM hinzugefügt. Diese Signale werden gesendet wenn z.B. die Applikation mit CTRL+C beendet wird oder das System herunterfährt. Bevor sich die Applikation beendet, wird die Verbindung zum MPD Server beendet

� BemusedServerDlg.cpp: Verbose Log Mode, mehr Informationen für den User hinzugefügt � BemusedServerDlg.cpp: Das Bookmark-File wurde nach dem Lesen nicht geschlossen � BemusedServerDlg.cpp: Segfault wenn das Bookmark-File / Konfigurations-File fehlerhafte (oder

auch überlange) Einträge enthält. Beispiele fehlerhafter Einträge: = =value test=

� BemusedServerDlg.cpp: Remove dead code � BemusedServerDlg.cpp: Entfernen des alten Bluetooth Stack AFFIX (blueZ und AFFIX waren

unterstützt, AFFIX wird jedoch nicht mehr weiterentwickelt)

� MpdCtrl.c: Alle Funktionen für den MPD Player mithilfe der Library libmpdclient umgeschrieben, hier ein der Auszug auf dem MpdCtrl.h File: void mpd_remote_playlist_add(char *buffer, int isStream, char *basedir); void mpd_remote_play(); void mpd_remote_pause(); void mpd_remote_stop(); void mpd_remote_set_playlist_pos(gint pos); void mpd_remote_playlist_clear(); void mpd_remote_jump_to_time(gint pos); void mpd_remote_set_main_volume(gint v); void mpd_remote_get_info(gint * rate, gint * freq, gint * nch); void mpd_remote_playlist_prev(); void mpd_remote_playlist_next(); void mpd_remote_toggle_repeat(); void mpd_remote_toggle_shuffle(); gboolean mpd_remote_is_playing(); gboolean mpd_remote_is_paused(); gint mpd_remote_get_output_time(); gint mpd_remote_get_main_volume(); gint mpd_remote_get_playlist_time(gint pos); gint mpd_remote_get_playlist_length(); gint mpd_remote_get_playlist_pos(); gchar *mpd_remote_get_playlist_title(gint pos); gboolean mpd_remote_is_repeat(); gboolean mpd_remote_is_shuffle(); gboolean mpd_remote_is_running(); void close_mpd_connection();

� MpdCtrl.c: Anpassen diverser Formatunterschiede, z.B. verwendet XMMS Milisekunden als Format für Zeitangaben, während MPD Sekunden verwendet.

� MpdCtrl.c: Timeout-handling: Sollte der Client aufgrund zu langer IDLE Zeit die Verbindung zum MPD Server verlieren, muss die Verbindung erneut aufgebaut werden (Broken Pipe handling – wird dieses Signal nicht bearbeitet, beendet sich die Applikation bei einem Timeout)

� MpdCtrl.c: libiconv support hinzugefügt, MPD verwendet intern UTF8 für alle Strings � MpdCtrl.c: Remove dead code

� Diverses: LibMpdClient Library dem Projekt hinzugefügt � Diverses: Makefile erstellt und angepasst

Page 47: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 47 von 89

JamSE Client

Den JAVA Client habe ich ausführlich getestet und diverse Fehlermeldungen dem Author mitgeteilt:

� Backlight Probleme bei s40 3rd Gen Serie von Nokia (Nokia 6500 Slide) – Bug gefixt � Probleme bei grossen Playlists, Test mit 5000+ MP3’s hatte der Client kein Speicher mehr („Out

of Memory“ Exception) – Bug noch offen � Search Song funktioniert, gibt aber einen falschen Pfad zurück, d.h. Song kann nicht in die Playlist

aufgenommen werden – Bug noch offen � Seek auswählen, danach Menutaste drücken und Menu wieder verlassen – Screen wird nicht

refresht – Bug noch offen

CMDPAD

Diese Applikation liest von einem HID Device (wie z.B. USB Keypad) Tastencodes ein und führt anschliessend ein definiertes Programm aus. Da diese Applikation schon ein wenig älter ist, musste ich zwei Patches erstellen:

1.) Linux 2.6 support, der Kernel 2.6 spricht Devices anders an als der 2.4er Kernel: --- cmdpad-0.0.3/src/parse.orig 2008-01-05 23:55:32.000000000 +0100 +++ cmdpad-0.0.3/src/parse.c 2008-01-05 23:56:07.000000000 +0100 @@ -289,6 +289,12 @@ pchEventDevice = strdup( pchValue) ; return 1 ; } + if( (pchValue != NULL) && + (strncmp( pchValue, "/dev/event", 6) == 0) ) + { + pchEventDevice = strdup( pchValue) ; + return 1 ; + } printf( "Option 'device' expects a /dev/input/eventX argument\n"); return -1 ; }

2.) No Zombie Patch – wenn eine Applikation beendet wurde, wird dieser Prozess auch beendet und

bleibt nicht als „toter Prozess“ (=Zombie) zurück: --- cmdpad-0.0.3/src/command.c.orig 2003-03-29 17:54:12.000000000 +0100 +++ cmdpad-0.0.3/src/command.c 2008-01-12 05:41:22.000000000 +0100 @@ -68,6 +68,7 @@ void exec( char * command) { + int status; if( fork() == 0) { char ** tmp ; int i ; @@ -88,6 +89,7 @@ perror( "ERROR: execv") ; exit( 1) ; } // end if( fork()) + wait(&status); } int getNumberofEntry()

Quellcode: Die Patches sind Bestandteile des OpenWRT Packages und auf der CD unter \Software\OpenWRT\packages\cmdpad zu finden.

Page 48: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 48 von 89

MPD

Ein neues Startscript (Shellscript) wurde für MPD erstellt. Bevor der MPD gestartet wird, wird überprüft ob das Song-Verzeichnis vorhanden ist. Wird das nicht gemacht, besteht die Möglichkeit, dass MPD ohne Song in der Playlist gestartet wird. root@(none):/# cat /etc/init.d/mpd #!/bin/sh /etc/rc.common # Copyright (C) 2007 OpenWrt.org START=93 start() { # Check if Mountdirectory exist MP3PATH=/mnt/usbdrive/_mp3 COUNT=0 while [ 1 ]; do [ -d $MP3PATH ] && { break } if [ $COUNT -lt 3 ]; then /usr/bin/logger -s MPD.init: [WARNING] mount path not ready yet, sleep 1s let COUNT=COUNT+1 fi /bin/sleep 1 done #create mpd db /usr/bin/mpd --stdout --create-db #optional export for mpc export MPD_HOST=127.0.0.1 #start mpd /usr/bin/mpd #generate playlist and start to play /usr/bin/mpc listall | /usr/bin/mpc add - /usr/bin/mpc play /usr/bin/mpc repeat /usr/bin/mpc random /usr/bin/mpc crossfade 10

Das sieht dann folgendermassen im Logfile aus: Jan 1 02:00:23 OpenWrt daemon.info hcid[882]: Starting security manager 0 Jan 1 02:00:23 OpenWrt daemon.info hcid[882]: Device hci0 has been activated Jan 1 02:00:23 OpenWrt user.info : MPD.init: [WARNING] mount path not ready yet, sleep 1s Jan 1 02:00:25 OpenWrt user.notice MPD.init: [WARNING] mount path not ready yet, sleep 1s Jan 1 02:00:26 OpenWrt user.info : mounting /dev/sda1 on /mnt/usbdrive Jan 1 02:00:26 OpenWrt user.info : current locale is "C" Jan 1 02:00:26 OpenWrt user.info : setting filesystem charset to ISO-8859-1 Jan 1 02:00:26 OpenWrt user.info : added Sneaker Pimps - Bloodsport/01 sneaker pimps - kiro tv.mp3

Danach werden folgende Aktionen erledigt:

� MPD Datenbank wird erstellt � Die Umgebungsvariable MPD_HOST wird gesetzt. Das ist wichtig, wenn keine

Netzwerkverbindung vorhanden ist. � Starten von MPD � Default Playlist wird erstellt � MPD spielt Song ab � Repeat, Random und 10s Crossfading wird aktiviert

Quellcode: Das Skript ist Bestandteil des OpenWRT Packages und auf der CD unter \Software\OpenWRT\packages\mpd zu finden.

Page 49: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 49 von 89

MPC

Ein einfaches Shell-Skript wurde erstellt, um den nächsten Künstler der gegenwärtigen Playlist abzuspielen. Dieses Skript wird von CmdPad aufgerufen. #!/bin/sh #random mode is quite useless here! mpc random off OLDARTIST=`mpc | head -n 1 | awk '{print $1}'` while [ 1 ]; do mpc next ARTIST=`mpc | head -n 1 | awk '{print $1}'` echo OLDARTIST/NEWARTIST: $OLDARTIST/$ARTIST [ $OLDARTIST != $ARTIST ] && { break } done echo done

Quellcode: Das Skript ist auf der CD unter \Software\MPC zu finden.

Page 50: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 50 von 89

8. INSTALLATION

MP3 PLAYER

Konfiguration Firmware

Starten der OpenWrt Firmware-Konfiguration michux@fwpiercer:/home/michux/trunk$ make menuconfig

Als Basis dient die default Konfiguration („Reset to defaults“)

Abbildung 20: Konfiguration MP3 Firmware

Als „Target System“ muss das Model „Broadcom BCM947xx/953xx [2.6]“ ausgewählt werden. Wireless LAN wird für dieses Model noch nicht unterstützt, daher ist bei der Option „Target Profile“ „No WiFi“ auszuwählen.

Page 51: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 51 von 89

Folgende Zusatz Packages wurden ausgewählt (<M>): � Network / Time Synchronization / openntpd � Kernel modules / Filesystems / kmod-fs-vfat � Kernel modules / Filesystems / kmod-fs-ntfs � Kernel modules / Filesystems / kmod-nls-iso8859-1 � Kernel modules / Filesystems / kmod-nls-utf8 � Kernel modules / Network Support / kmod-ipv6 (Build-in <*>) � Kernel modules / Other modules / kmod-bluetooth � Kernel modules / Sound Support / kmod-sound-core � Kernel modules / USB Support / kmod-usb-core (Build-in <*>) � Kernel modules / USB Support / kmod-usb-audio � Kernel modules / USB Support / kmod-usb-hid � Kernel modules / USB Support / kmod-usb-serial � Kernel modules / USB Support / kmod-usb-serial-ftdi � Kernel modules / USB Support / kmod-usb-serial-pl2303 � Kernel modules / USB Support / kmod-usb-storage (Build-in <*>) � Kernel modules / USB Support / kmod-usb-uhci � Kernel modules / USB Support / kmod-usb2 � Utilities / alsa-utils � Utilities / bemusedlinuxserver � Utilities / bluez-utils � Utilities / cmdpad � Utilities / lcd4linux � Utilities / pciutils � Utilities / strace � Sound / mpc � Sound / mpd � Sound / scmpc

Info: Pakete können Abhängigkeiten auf andere Pakete haben. Ein abhängiges Paket wird automatisch ausgewählt und wird hier nicht aufgeführt. Erklärung der ausgewählten Packages: openntpd Zeitsynchronisierung, wird für den SCMPC Daemon benötigt. kmod-fs-vfat / ntfs Modul um das FAT / NTFS Dateisystem zu lesen kmod-nls-iso8859-1 Unterstützung für das iso8859-1 Charset (Latin 1) kmod-nls-utf8 Unterstützung für das UTF8 Charset kmod-bluetooth Bluetooth Modul kmod-ipv6 Zwingende Abhängikeit, evtl. OpenWRT Bug (Fehler gemeldet) kmod-sound-core Generelle Sound Unterstützung kmod-usb-core Generelle USB Unterstützung kmod-usb-audio USB Sound Unterstützung kmod-usb-hid USB Hid Unterstützung (z.B. USB Keypad) kmod-usb-serial Generelle USB-to-Serial Unterstützung kmod-usb-serial-ftdi Spezifische Unterstützung für den FTDI Chip kmod-usb-serial-pl2303 Spezifische Unterstützung für den PL2303 Chip kmod-usb-storage Generelle USB Storage Unterstützung (z.B. Memorystick) kmod-usb-uhci UHCI USB Modul kmod-usb2 Generelle USB 2 Unterstützung alsa-utils Alsa Mixer Applikation bemusedlinuxserver Serverteil der Bluetooth-Steuerung bluez-utils Bluetooth Tools cmdpad Führt Programme anhand gedrückten Tasten aus lcd4linux Ansteuerung eines LCD pciutils Statustool, um PCI-spezifische Informationen auszulesen strace Debug Tool mpc Music Player Daemon (MPD) Client mpd Music Player Daemon (MPD) scmpc Übermittelt die gehörten Songs an Last.fm (nur Metadaten)

Page 52: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 52 von 89

Nun die Konfiguration speichern und den Buildprozess starten. Die Option V=99 definiert, dass der Debugmode aktiviert wird. Das hat den Vorteil, dass man sieht, was gerade kompiliert wird. In Falle eines Fehlers sieht man, warum der Prozess beendet wurde und was die Fehlermeldung ist. michux@fwpiercer:/home/michux/trunk$ make V=99

Ist der Build Prozess erfolgreich beendet, liegen im „./bin/mipsel“ Verzeichnis die kompilierten Image Files und die ausgewählten Packages.

Firmware Update

Quelle: http://wiki.openwrt.org/OpenWrtDocs/Hardware/Asus/WL500GP Firmware-Update für ASUS WL-500g Premium Übersicht Um eine neue Firmware für diesen Router zu installieren, müssen folgende Schritte erledigt werden:

� Stromkabel des Routers entfernen � Gekreuztes RJ45 Kabel zwischen Workstation und Router Port LAN1 verbinden (nicht WAN!) � Auf dem Router den RESTORE Knopf gedrückt halten (schwarzer Schalter, nicht der rote

Schalter), danach das Stromkabel wieder mit dem Router verbinden � Wenn das POWER LED langsam blinkt, ist der Router im DIAG Modus - der RESTORE Knopf

muss nun nicht mehr gedrückt werden � Im DIAG Modus hat der Router (per Default) die IP Adresse 192.168.1.1 und akzeptiert neue

Firmware Images � Jetzt kann das "ASUS Firmware Restoration Tool" verwendet werden, um das Image via TFTP auf

den Router zu übertragen. Hinweis: Dieses Tool unterstützt nur eine NIC auf der Workstation - daher alle NIC's ausser der verwendeten RJ45 Verbindung deaktivieren (Virtuelle Adapter, Wireless...). Ist das "ASUS Firmware Restoration Tool" nicht vorhanden, kann auch ein anderer TFTP Client verwendet werden

� Ist die neue Firmware übertragen, darf der Router nicht direkt neu gestartet werden, da der interne Flash Speicher "partitioniert" wird. Am besten überwacht man den Fortschritt via serielle Schnittstelle.

Detail Serial-Output wenn der Router im Diag Modus ist und auf eine neue Firmware wartet: Reading :: TFTP Server. Failed.: Timeout occured Reading :: TFTP Server. Failed.: Timeout occured ...

Screenshot des Firmware Restoration Tools von ASUS:

Abbildung 21: ASUS Firmware Restoration Tool

Page 53: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 53 von 89

Serielle Ausgabe während des Flash-update Prozesses: Device eth0: hwaddr 00-18-F3-85-6A-9D, ipaddr 192.168.1.49, mask 255.255.255.0 gateway not set, nameserver not set Failed.: Timeout occured Reading :: TFTP Server. Failed.: Timeout occured Reading :: TFTP Server. TFTP_BLKLEN!! Done. 1839104 bytes read Download of 0x1c1000 bytes completed Write kernel and filesystem binary to FLASH (0xbfc40000) flash device 'flash1.trx' parseflag = 0, the copysize is 1839104 Programming...

Nachdem die Firmware in den Flash-Speicher geschrieben wurde, wird der Router neu gestartet. Nach dem Boot, wird das jffs2 Filesystem erstellt. Hier auf keinen Fall den Router abstellen oder Prozess abbrechen, sondern warten bis das Filesystem erstellt wurde: ... - init - Please press Enter to activate this console. b44: eth0: Link is up at 100 Mbps, full duplex. b44: eth0: Flow control is off for TX and off for RX. br-lan: Dropping NETIF_F_UFO since no NETIF_F_HW_CSUM feature. device eth0.0 entered promiscuous mode device eth0 entered promiscuous mode SCSI subsystem initialized br-lan: port 1(eth0.0) entering learning state br-lan: topology change detected, propagating br-lan: port 1(eth0.0) entering forwarding state BFL_ENETADM not set in boardflags. Use force=1 to ignore. usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb PPP generic driver version 2.4.2 Initializing USB Mass Storage driver... usbcore: registered new interface driver usb-storage USB Mass Storage support registered. jffs2_scan_eraseblock(): End of filesystem marker found at 0x0 jffs2_build_filesystem(): unlocking the mtd device... done. jffs2_build_filesystem(): erasing all blocks after the end marker...

Siehe auch Kapitel „OpenWRT Disklayout“

Page 54: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 54 von 89

Basis Konfiguration

Ist OpenWRT als Firmware installiert, muss zuerst die Grundkonfiguration erstellt werden. Dazu verbindet man sich via Telnet auf die IP 192.168.1.1 und setzt das Root Passwort: === IMPORTANT ============================ Use 'passwd' to set your login password this will disable telnet and enable SSH ------------------------------------------ BusyBox v1.8.2 (2008-04-10 12:28:10 CEST) built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M KAMIKAZE (bleeding edge, r10786) ------------------- * 10 oz Vodka Shake well with ice and strain * 10 oz Triple sec mixture into 10 shot glasses. * 10 oz lime juice Salute! --------------------------------------------------- root@OpenWrt:/# passwd Changing password for root New password: Retype password: Password for root changed by root

Diese Aktion hat zur Folge, dass der SSH Daemon aktiviert wird. Nun können die Packages via SCP auf den Router kopiert werden. Als Ziel sollte /tmp verwendet werden, da dort genügend freier Speicherplatz vorhanden ist (Ramdisk): root@OpenWrt:/# df /tmp -h Filesystem Size Used Available Use% Mounted on none 14.6M 36.0k 14.6M 0% /tmp

Abbildung 22: WinSCP Datentransfer zu OpenWRT

Hinweis: Als SSH Daemon wird eine „abgespeckte“ Variante verwendet, Dropbear. Dieser SSH Server unterstützt nur SCP (kein SFTP). Wird eine Verbindung mit WinSCP43 aufgebaut, werden diverse Fehlermeldungen über fehlende Files angezeigt. Diese Fehler können ignoriert werden und stören die Funktion nicht.

43 http://winscp.net/eng/index.php

Page 55: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 55 von 89

Nachdem die Packages auf den Router kopiert sind, können diese installiert werden. Eine Applikation wird mit dem Befehl „ipkg install /pfad/file.ipk“ installiert. Da Packages gegenseitige Abhängigkeiten haben, müssen diese in der richtigen Reihenfolge installiert werden, hier eine mögliche Reihenfolge:

1. kmod-usb-core* 2. kmod-usb-serial* 3. kmod-usb-serial-ftdi* 4. kmod-usb-serial-pl2303* 5. kmod-usb-uhci* 6. kmod-usb2* 7. kmod-sound-core* 8. kmod-usb-audio* 9. kmod-bluetooth* 10. kmod-nls-base_2.6.23.16-brcm47xx-1_mipsel.ipk 11. kmod-nls-iso8859-1* 12. kmod-nls-cp437* 13. kmod-nls-utf8* 14. kmod-usb-storage* 15. kmod-fs-vfat* 16. kmod-fs-ntfs* 17. kmod-input-core_2.6.23.16-brcm47xx-1_mipsel.ipk 18. kmod-input-evdev_2.6.23.16-brcm47xx-1_mipsel.ipk 19. kmod-hid_2.6.23.16-brcm47xx-1_mipsel.ipk 20. kmod-usb-hid* 21. pciutils* 22. strace* 23. openntpd_3.9p1-2_mipsel.ipk 24. bluez-libs_3.24-1_mipsel.ipk 25. libpthread_0.9.29-12_mipsel.ipk 26. libexpat_1.95.8-1_mipsel.ipk 27. dbus_1.0.2-2_mipsel.ipk 28. bluez-utils* 29. libncurses_5.6-1_mipsel.ipk 30. alsa-lib_1.0.13-1_mipsel.ipk 31. alsa-utils* 32. cmdpad * 33. libflac_1.1.2-1_mipsel.ipk 34. zlib_1.2.3-5_mipsel.ipk 35. libid3tag_0.15.1b-1_mipsel.ipk 36. libmad_0.15.1b-1_mipsel.ipk 37. libvorbisidec_1.0.2\+svn14261-1_mipsel.ipk 38. libiconv_1.9.1-1_mipsel.ipk 39. mpd* 40. mpc* 41. libusb_0.1.12-1_mipsel.ipk 42. lcd4linux* 43. libdaemon_0.12-1_mipsel.ipk 44. argtable_2.7-1_mipsel.ipk 45. confuse_2.5-1_mipsel.ipk 46. libopenssl_0.9.8e-3_mipsel.ipk 47. libcurl_7.17.1-1_mipsel.ipk 48. scmpc* 49. glib1_1.2.10-1_mipsel.ipk 50. libstdcpp_4.1.2-12_mipsel.ipk 51. bemusedlinuxserver*

Page 56: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 56 von 89

Konfiguration Netzwerk

Per Default ist das Netzwerk folgendermassen konfiguriert: root@OpenWrt:/# ifconfig br-lan Link encap:Ethernet HWaddr 00:18:F3:85:6A:9D inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::218:f3ff:fe85:6a9d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1290 (1.2 KiB) TX bytes:1340 (1.3 KiB)

Die Grundkonfiguration ist eine statische IP mit der Adresse 192.168.1.1. Umkonfigurieren auf DHCP: root@OpenWrt:/# vi /etc/config/network #### LAN configuration ALT config interface lan option type bridge option ifname "eth0.0" option proto static option ipaddr 192.168.1.1 option netmask 255.255.255.0 #### LAN configuration NEU config interface lan option type bridge option ifname "eth0.0" option proto dhcp

Nach einem Reboot sieht die Netzwerkkonfiguration folgendermassen aus: root@OpenWrt:/# ifconfig br-lan Link encap:Ethernet HWaddr 00:18:F3:85:6A:9D inet addr:192.168.111.15 Bcast:192.168.111.255 Mask:255.255.255.0 inet6 addr: fe80::218:f3ff:fe85:6a9d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5 errors:0 dropped:0 overruns:0 frame:0 TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1290 (1.2 KiB) TX bytes:3260 (3.1 KiB)

Hinweis: Alle Konfigurationsfiles welche im Verzeichnis /etc/config liegen, sind OpenWRT spezifisch. Diese Werte können entweder klassisch via Texteditor editiert werden oder mit dem Tool UCI (Unified Configuration Interface). Mit diesem Tool können die Konfigurations-Optionen direkt gesetzt werden.

Page 57: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 57 von 89

Konfiguration MPD

Da vom USB Stick nur die MP3 Songs gelesen werden, kann das Automount-Skript angepasst werden, so dass nur Read-Only gemountet wird. So kann beim Abschalten des Routers das Filesystem auf dem Memorystick nicht beschädigt oder gar zerstört werden. File: /sbin/usb-storage Die Zeile mount /dev/${node} /mnt/usbdrive

durch folgende ersetzten: mount /dev/${node} /mnt/usbdrive -o ro

Die Konfiguration des MPD Players erfolgt mit der Datei /etc/mpd.conf. Folgende Änderungen wurden gemacht: ######################## REQUIRED PATHS ######################## music_directory "/mnt/usbdrive/_mp3" playlist_directory "/tmp" db_file "/tmp/mpd.db" log_file "/tmp/mpd.log" error_file "/tmp/mpd.error" ################################################################ pid_file "/tmp/mpd.pid" audio_output { type "oss" name "My OSS Device" device "/dev/dsp" # optional format "44100:16:2" # optional } volume_normalization "yes" buffer_before_play "90%"

Alle Daten werden im RAM gehalten (/tmp Verzeichnis), nach jedem Reboot wird die dB neu erstellt. Damit der MPD Player nach einem Reboot automatisch startet, muss dieser Daemon aktiviert werden: root@OpenWrt:/tmp# /etc/init.d/mpd enable

Page 58: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 58 von 89

Konfiguration LCD4Linux

Die Konfiguration der LCD Anzeige erfolgt mit der Datei /etc/lcd4linux.conf und sieht folgendermassen aus: Plugin MPD { enabled 1 server 'localhost' port 6600 # password 'secret' minUpdateTime 500 } # # display artist and album, scrolling # Widget mpd-combo { class 'Text' expression iconv('UTF-8', 'ISO-8859-1', mpd::artist()) . '/' . iconv('UTF-8', 'ISO-8859-1', mpd::title()) width 20 align 'P' speed scroller update tack } # # display current song id and number of total song # Widget mpd-posid { class 'Text' expression mpd::getMpdPlaylistGetCurrentId().' of ' .mpd::getMpdPlaylistLength() width 11 align 'L' update tack } # # display 30s the mpd uptime (ex. UP:2d03h32m) then 30s the current song id and number of total songs # (ex. 267 of 734) # Widget mpd-toggler { class 'Text' expression ( (mpd::getMpdUptime()%60)<30 ? ('UP:'.mpd::formatTimeDDHHMM( mpd::getMpdUptime() ) ) : ('TRACK:'.mpd::getMpdPlaylistGetCurrentId().'/'.mpd::getMpdPlaylistLength()) ) width 15 align 'P' update tack } # # display playerstate (play, pause, stop, unknown) # Widget mpd-playerstatus { class 'Text' expression (mpd::getStateInt() == 1 ? 'PLAYING' : '').(mpd::getStateInt() == 2 ? 'PAUSED ' : '').(mpd::getStateInt() == 3 ? 'STOPPED' : '').(mpd::getStateInt() == 0 ? 'UNKNOWN' : '') width 7 align 'L' update tack } # # get repeat/random # example: REP/RND, REP/---, ---/RND, ---/--- # Widget mpd-reprnd { class 'Text' expression (mpd::getRepeatInt()>0 ? 'REP' : '---') . '/' . (mpd::getRandomInt()>0 ? 'RND' : '---') width 7 align 'L' update tack }

Page 59: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 59 von 89

# # display track position example: <00:48/04:33> # Widget mpd-tracktime { class 'Text' expression mpd::formatTimeMMSS( mpd::elapsedTimeSec() ).'/'.mpd::formatTimeMMSS( mpd::totalTimeSec() ) width 11 align 'L' update tack } # # small playbar and track time # Widget smallMP3Bar_part1 { class 'Bar' expression mpd::elapsedTimeSec() length 14 min 0 max mpd::totalTimeSec() direction 'E' style 'H' update tack } # # display volume # Widget mpd-vol { class 'Text' expression mpd::getVolume() width 3 align 'L' update tack } Widget smallMP3Bar_part2 { class 'Text' expression '/'.mpd::formatTimeMMSS( mpd::totalTimeSec() ) width 6 update tack align 'L' } Widget mpd-bitrate { class 'Text' expression mpd::bitRate().'k' width 6 update 250 align 'L' } Layout L20x4 { Row1 { Col1 'mpd-combo' } Row2 { Col1 'smallMP3Bar_part1' Col15 'smallMP3Bar_part2' } Row3 { Col1 'mpd-reprnd' Col9 'mpd-playerstatus' Col17 'mpd-bitrate' } Row4 { Col1 'mpd-toggler' Col16 'Speaker' Col17 'SpeakerAni' Col18 'mpd-vol' } } Widget Speaker { class 'Icon' speed 10000 Bitmap { Row1 '....*' Row2 '...**' Row3 '..***' Row4 '*****' Row5 '*****' Row6 '..***' Row7 '...**' Row8 '....*' } }

Page 60: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 60 von 89

Widget SpeakerAni { class 'Icon' speed 500 Bitmap { Row1 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....' Row2 '.....|.....|*....|.*...|..*..|*..*.|.*..*|..*..|...*.|....*' Row3 '.....|*....|.*...|..*..|*..*.|.*..*|..*..|...*.|....*|.....' Row4 '*....|.*...|..*..|*..*.|.*..*|..*..|...*.|....*|.....|.....' Row5 '*....|.*...|..*..|*..*.|.*..*|..*..|...*.|....*|.....|.....' Row6 '.....|*....|.*...|..*..|*..*.|.*..*|..*..|...*.|....*|.....' Row7 '.....|.....|*....|.*...|..*..|*..*.|.*..*|..*..|...*.|....*' Row8 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....' } } Variables { t_onesec 1000 t_500m 500 tack 500 tick 100 tacku 100 scroller 200 } Display CFA634 { Driver 'Crystalfontz' Model '634' Port '/dev/ttyUSB0' # Speed 38400 #70/30 Contrast 68 Backlight 30 Icons 3 } Display 'CFA634' Layout 'L20x4'

Damit die LCD Anzeige nach einem Reboot automatisch startet, muss dieser Daemon aktiviert werden: root@OpenWrt:/tmp# /etc/init.d/lcd4linux enable

Schematisch ist das Display folgendermassen eingeteilt:

Abbildung 23: LCD4Linux Konfiguration

Page 61: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 61 von 89

Konfiguration CmdPad

Bearbeiten des Konfigurations-Files: device=/dev/event0 #mpc basic command=077, R ,/usr/bin/mpc next command=072, R ,/usr/bin/mpc toggle command=076, R ,/usr/bin/mpc stop command=075, R ,/usr/bin/mpc prev command=071, R ,/usr/bin/mpc seek -00:00:20 command=073, R ,/usr/bin/mpc seek +00:00:20 command=069, R ,/usr/bin/mpc volume -5 command=098, R ,/usr/bin/mpc volume +5 command=055, R ,/usr/bin/mpc random command=074, R ,/usr/bin/mpc repeat command=078, R ,/usr/bin/mpc-nextartist.sh > /dev/null #restart mpd command=083, R ,/etc/init.d/mpd restart > /dev/null #restart bluetooth command=096, R ,/etc/init.d/bemused restart

Bedeutung von P, R und H � „P“ bedeutet Press, also dieses Event wird ausgeführt, wenn die Taste gedrückt wird � „R“ bedeutet Release � „H“ bedeutet Hold (Repeat)

Und der Service wird aktiviert: /etc/init.d/cmdpad enable

Page 62: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 62 von 89

Konfiguration Bluetooth

Servicekonfiguration mit dem File /etc/config/bluetooth: config hcid # option config /etc/bluetooth/hcid.conf option enabled 1 config sdpd option enabled 1 config rfcomm # option config /etc/bluetooth/rfcomm.conf option enabled 0

Hier müssend die zwei Services hcid und sdpd aktiviert werden. Informationen betreffend dieser Daemons: � hcid: Bluetooth Host Controller Interface Daemon � sdpd: Service Discovery Protocol Daemon – macht das OpenWRT Device auffindbar für

Bluetooth Geräte. Dieser Service veröffentlicht unsere Bluetooth Informationen. Die Konfiguration des hcid erfolgt im File /etc/bluetooth/hcid.conf: # # HCI daemon configuration file. # # HCId options options { # Automatically initialize new devices autoinit yes; # Security Manager mode # none - Security manager disabled # auto - Use local PIN for incoming connections # user - Always ask user for a PIN # security auto; # Pairing mode # none - Pairing disabled # multi - Allow pairing with already paired devices # once - Pair once and deny successive attempts pairing multi; # Default PIN code for incoming connections passkey "1234"; } # Default settings for HCI devices device { # Local device name # %d - device id # %h - host name name "%h/%d"; # Local device class class 0x000100; #class 0x3e0100; # Default packet type #pkt_type DH1,DM1,HV1; # Inquiry and Page scan iscan enable; pscan enable; # Default link mode # none - no specific policy # accept - always accept incoming connections # master - become master on incoming connections, # deny role switch on outgoing connections lm accept; # Default link policy # none - no specific policy # rswitch - allow role switch # hold - allow hold mode # sniff - allow sniff mode # park - allow park mode lp rswitch,hold,sniff,park; }

Einzig der Identifikationsstring (Gelb markiert) wurde geändert.

Page 63: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 63 von 89

Jetzt werden die benötigten Services aktiviert: /etc/init.d/dbus enable /etc/init.d/bluez-utils enable

Konfiguration Bemusedserver

Die Konfiguration des Bemusedserver wird durch das File /etc/bemused.conf gemacht: # bemused config file Version 1.73 (no changes since 1.71) # lines with a # at the beinning are for comments and not readen by the bemusedserver # You only need to set up options which have no default and which ware not optinal # this is a mpd-hack version by [email protected] # Path to mpd (if mpd is in path only mpd) (default is mpd) mpddir=/usr/bin/mpd # channel for what the serial port service is registered (with sdptool look in README) #(default 10) # example: # root@OpenWrt:~# sdptool browse # Inquiring ... # <...> # Service Name: COM 1 # Service RecHandle: 0x10005 # Service Class ID List: # "Serial Port" (0x1101) # Protocol Descriptor List: # "L2CAP" (0x0100) # "RFCOMM" (0x0003) # Channel: 3 <<< # Language Base Attr List: # code_ISO639: 0x656e # encoding: 0x6a # base_offset: 0x100 channel=3 # directorys where the mp3s are. If more than one seperate them by a m semicolon (must be set) mp3dir=/mnt/usbdrive/_mp3 # bookmarks file for URLs of net radio stations (optional) bookmarkfile=/etc/bemused-bookmarks # speed setting for fast forward and rewind. time for every jump in ms, 10000 is default #fastforbackspeed=10000 # set to 1 to use connection over TCP/IP (for bluetooth pan or maybe LAN oder internet) set to # 0 for normal rfcomm bluetooth (default) #tcp=1 # port to use if you set tcp to 1 for your incomming TCP/IP Connection. (default is 7654 and # at the moment the only one useable by the client on the phone) #tcpport=7654

Das File /etc/bemused-bookmarks ist optional und definiert Internet Radiostreams: # UnitedBreaks.mp3 = http://74.52.13.138:8000 nubreaks.mp3 = http://208.100.38.52:8419 RauteMusik.mp3 = http://91.121.107.97:10000 punkBeans.mp3 = http://74.208.71.53:8014 UkBassRadio.mp3 = http://87.117.228.59:8288 DigitallyImportetDB.mp3 = http://207.200.96.229:8030 GrooveSaladAmbient.mp3 = http://scfire-nyk-aa01.stream.aol.com:80/stream/1018 LoungeRadio.mp3 = http://195.141.102.212:8040 RadioRABE.mp3 = http://beemy.catatec.ch:8000/radio_rabe_95.6_fm RadioBE1.mp3 = http://www.radiobe1.ch:8080

Aktivieren des Bemused Daemons: /etc/init.d/bemused enable

Page 64: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 64 von 89

Konfiguration OpenNTP

Bevor mit der Konfiguration von OpenNTP begonnen werden kann, muss zuerst die Zeitzone festgelegt werden: root@OpenWrt:/# echo GMT-1 > /etc/TZ

Die Zeitserver werden in der Konfiguration /etc/ntpd.conf definiert. Nun kann der NTP Client aktiviert werden: root@OpenWrt:/# /etc/init.d/ntpd enable

Konfiguration SCMPC

SCMPC übermittelt die abgespielten Songs an Last.fm („scrobbeln“). Voraussetzung damit SCMPC richtig funktioniert ist ein gültiges Datum. Da der Router keine interne Uhr hat, muss die Zeit nach jedem start via NTP nachgestellt werden. Die Konfiguration von SCMPC wird in der Datei /etc/scmpc.conf erledigt: # log_level - Select the amount of logging you would like scmpc to do. Valid options are: # none, error, info, and debug #log_level = error # log_file - The file you would like scmpc to write the log to. log_file = "/tmp/scmpc.log" # pid_file - The file in which scmpc will store its process id, in order to check that it # is only run once. (This file is only used when scmpc is run in daemon mode.) pid_file = "/tmp/scmpc.pid" # cache_file - The file in which scmpc will store the unsubmitted songs cache. cache_file = "/tmp/scmpc.cache" # queue_length - The maximum number of unsubmitted songs to hold in memory at once. You may # need to lower this if you find scmpc using too much memory. queue_length = 20 # cache_interval - The interval _in minutes_ between saving the unsubmitted songs queue, in # case of a power failure, or any other reason for the program exiting abnormally. # Set to 0 to turn this off. #cache_interval = 10 # mpd section - host: The hostname of the mpd server. Can be an IP address as well. # port: The port that mpd is listening on. # timeout: The timeout in seconds for connecting to the server # password: Set this if you need a password to read information from the # mpd server. mpd { #host = "localhost" #port = 6600 #timeout = 5 #password = } # audioscrobbler section # username: Your audioscrobbler username # password: Your audioscrobbler password audioscrobbler { username = "username" password = "password" }

Aktivieren des SCMPC Daemons: /etc/init.d/scmpc enable

Page 65: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 65 von 89

SSH GATEWAY

Konfiguration Firmware

Starten der OpenWrt Firmware Konfiguration michux@fwpiercer:/home/michux/trunk$ make menuconfig

Als Basis dient die default Konfiguration („Reset to defaults“)

Abbildung 24: Target System ist Atheros 2.6

Als „Target System“ muss das Model „Atheros [2.6]“ ausgewählt werden. Das Wireless LAN Profile wird automatisch ausgewählt.

Page 66: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 66 von 89

Folgende Zusatz Packages wurden ausgewählt (<M>): � Network / Time Synchronization / openntpd � Network / HTTPTunnel � Network / PTunnel � Network / hostapd � Network / hostapd-utils � Network / updatedd � Network / updatedd / updatedd-mod-noip � Network / ssh / openssh-client (Build-in <*>) � Network / ssh / openssh-server (Build-in <*>) � Network / ssh / openssh-sftp-client (Build-in <*>) � Network / ssh / openssh-sftp-client-utils (Build-in <*>) � Network / ssh / openssh-sftp-server (Build-in <*>) � Kernel modules / Filesystems / kmod-nls-base � Kernel modules / Filesystems / kmod-nls-cp1250 � Kernel modules / Filesystems / kmod-nls-cp437 � Kernel modules / Filesystems / kmod-nls-cp850 � Kernel modules / Network Support / kmod-ipv6 (Build-in <*>) � Kernel modules / Other modules / kmod-proc-gpio (#) � Utilities / atheros-wifi-toggler (#)

Hinweis: Pakete, welche mit (#) markiert sind, sind nicht in der offiziellen OpenWRT Distribution dabei, können aber unter http://www.neophob.com/serendipity/index.php?/archives/140-Openwrt-Atheros-refused-Packages.html heruntergeladen werden. Folgende Packages werden dem Image entfernt (< >):

� Base system / dropbear

Erklärung der ausgewählten Packages: openntpd Zeitsynchronisierung, wird für den SCMPC Daemon benötigt. HTTPTunnel http Tunnel PTunnel Ping (ICMP) Tunnel hostapd IEEE 802.1x/WPA/EAP/RADIUS Authenticator hostapd-utils Support Tools für hostapd updatedd Basis Dienst für Dynamische DNS Dienste updatedd-mod-noip Plugin für DNS Dienst no-ip.org openssh-* SSH Suite, inkl. SFTP kmod-nls-base Unterstützung für das iso8859-1 Charset (Latin 1) kmod-nls-cp437 Unterstützung für das cp437 kmod-ipv6 Zwingende Abhängikeit, evtl. OpenWRT Bug (Fehler gemeldet) kmod-proc-gpio GPIO Kernelmodule, damit können die LED’s gesteuert werden atheros-wifi-toggler Skript, damit WLAN via Reset-Button ein und ausgeschaltet werden kann Nun die Konfiguration speichern und den Buildprozess starten. Die Option V=99 definiert, dass der Debugmode aktiviert wird. Das hat den Vorteil, dass man sieht, was gerade kompiliert wird. In Falle eines Fehlers sieht man, warum der Prozess beendet wurde und was die Fehlermeldung ist. michux@fwpiercer:/home/michux/trunk$ make V=99

Ist der Build Prozess erfolgreich beendet, liegen im „./bin/mips“ Verzeichnis die kompilierten Image Files und die ausgewählten Packages.

Page 67: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 67 von 89

Update Firmware

Nun muss die Firmware auf das Embedded Device kopiert werden. La Fonera verwendet Redboot44 als Bootloader. Auf dem Mainboard des La Fonera ist ein TTL Serial Port vorhanden. TTL bedeutet Transistor Transistor Logic und hat einen Spannungsbereich von 0..3.3V. Ein Standard Serial Port hingegen hat einen Spannungsbereich von -12..12V. Daher muss die Spannung gewandelt werden. Am einfachsten kann dies mit einem Mobiltelefon-Kabel gemacht werden, welches einen solchen Spannungswandler im Kabel eingebaut hat. Ich verwende ein Nokia Kabel CA-42 (aka DKU-5). Speziell bei La Fonera ist, dass das RX/TX Kabel erst eingesteckt werden darf, wenn der Router läuft. Verbindet man das RX/TX Signal und schaltet den Router ein, bootet dieser nicht. Ich nehme an, dass dieser Port noch als JTAG Port verwendet werden kann.

Abbildung 25: La Fonera TTL Serial Access

Ein Terminal Programm starten (ich verwende PuTTY), die Geschwindigkeit muss 9600bps sein. Die Erdungsverbindung kann bereits verbunden werden. Nun La Fonera einschalten und ca. 2 Sekunden später RX und TX verbinden. Der Redboot Boot Prozess kann mittels CTRL+C unterbrochen werden. Das sollte folgendermassen aussehen: +PHY ID is 0022:5521 Ethernet eth0: MAC address 00:18:84:18:13:c8 IP: 192.168.1.2/255.255.0.0, Gateway: 0.0.0.0 Default server: 192.168.1.10 RedBoot(tm) bootstrap and debug environment [ROMRAM] Non-certified release, version v1.3.0 - built 16:57:58, Aug 7 2006 Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc. Board: ap51 RAM: 0x80000000-0x81000000, [0x80040450-0x80fe1000] available FLASH: 0xa8000000 - 0xa87f0000, 128 blocks of 0x00010000 bytes each. == Executing boot script in 10.000 seconds - enter ^C to abort ^C

44 Redboot Dokumentation: http://ecos.sourceware.org/docs-latest/redboot/redboot-guide.html

Page 68: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 68 von 89

Jetzt sind wir im Redboot Boot Menu. Der nicht flüchtige Flashspeicher ist in Partitionen aufgeteilt, welche mit dem „fis“ Befehl modifiziert werden können. Wir wollen die Userdaten löschen (Kernel und Root Image): RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000 vmlinux.bin.l7 0xA8030000 0x80041000 0x000B0000 0x80041000 rootfs 0xA80E0000 0x80040800 0x00700000 0x80040800 FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000 RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000 RedBoot> fis init About to initialize [format] FLASH image system - continue (y/n)? y *** Initialize FLASH Image System ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000 FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000 RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000 RedBoot>

Die Daten werden via TFTP Protokoll auf La Fonera geladen, der Befehl „fconfig –l“ zeigt die aktuellen Einstellungen an: RedBoot> fconfig -l Run script at boot: true Boot script: .. fis load -l vmlinux.bin.l7 .. exec Boot script timeout (1000ms resolution): 10 Use BOOTP for network configuration: false Gateway IP address: 0.0.0.0 Local IP address: 192.168.1.2 Local IP address mask: 255.255.0.0 Default server IP address: 192.168.1.10 Console baud rate: 9600 GDB connection port: 9000 Force console for special debug messages: false Network debug at boot time: false

Wichtig ist die Server IP Adresse – an dieser Adresse muss der TFTP Server laufen. Ich verwende auf meinem Notebook diese IP Adresse und starte einen TFTP Server45. Der TFTP Server muss noch konfiguriert werden, damit die Files „openwrt-atheros-vmlinux.lzma“ und „openwrt-atheros-root.squashfs“ (OpenWRT Firmware) gesendet werden können. Um eine Partition zu speichern, muss diese zuerst in den Speicher geladen werden. Das geschieht mit dem „load“ Befehl. Anschliessend wird eine neue FID Partition mittels dem Befehl „fis create“ erstellt. Hier der Output, wenn wir den LZMA Komprimierten Kernel auf La Fonera kopieren: RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-vmlinux.lzma Using default protocol (TFTP) Raw file loaded 0x80040800-0x800f07ff, assumed entry at 0x80040800 RedBoot> fis create -e 0x80041000 -r 0x80041000 vmlinux.bin.l7 ... Erase from 0xa8030000-0xa80e0000: ........... ... Program from 0x80040800-0x800f0800 at 0xa8030000: ........... ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot>

Hinweis: Die Variable %{FREEMEMLO} wird von Redboot verwendet, Auszug aus der Redboot Dokumentation:

To simplify operations that temporarily need data in free memory, the limits of free RAM are also available as aliases (aligned to the nearest kilo-byte limit). These are named FREEMEMLO and FREEMEMHI, and can be used in commands like any user defined alias.

45 Ich verwende tftpd32, Webseite: http://tftpd32.jounin.net/

Page 69: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 69 von 89

Jetzt muss noch das Root Filesystem kopiert werden. Der einzige Unterschied zum Speichern des Kernels ist, dass die Länge des freien Speichers herausgefunden werden muss. Der Befehl „fis free“ gibt den freien Speicherbereich an. Subtrahiert man beide Werte, ergibt dies die Länge des freien Speicherbreichs. RedBoot> fis free 0xA80E0000 .. 0xA87E0000 RedBoot> RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-root.squashfs Using default protocol (TFTP) Raw file loaded 0x80040800-0x802407ff, assumed entry at 0x80040800 RedBoot> fis create -l 0x0700000 rootfs ... Erase from 0xa80e0000-0xa87e0000: ................................................................................................................ ... Program from 0x80040800-0x80240800 at 0xa80e0000: ................................ ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Nun läuft La Fonera mit OpenWrt und kann konfiguriert werden.

Page 70: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 70 von 89

Konfiguration

Per Default hat ein OpenWrt Device die Standart IP Adresse von 192.168.1.1. Der SSH-Dienst läuft noch nicht, nur ein Telnet Daemon. Zuerst muss via Telnet eine Verbindung zum OpenWrt Device aufgebaut werden und das root Passwort muss gesetzt werden. Danach wird der Telnet Daemon deaktiviert und SSH aktiviert: === IMPORTANT ============================ Use 'passwd' to set your login password this will disable telnet and enable SSH ------------------------------------------ BusyBox v1.8.2 (2008-02-20 04:36:45 CET) built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M KAMIKAZE (bleeding edge, r10496) ------------------- * 10 oz Vodka Shake well with ice and strain * 10 oz Triple sec mixture into 10 shot glasses. * 10 oz lime juice Salute! --------------------------------------------------- root@OpenWrt:/# passwd Changing password for root New password: Retype password: Password for root changed by root

Ein Reboot des Embedded Devices ist hier empfohlen. Jetzt können die Packages installiert werden. Ich verwende dazu WinSCP46 um die Packages ins /tmp Verzeichnis zu kopieren. root@OpenWrt:/tmp# ls *.ipk -al -rw-r--r-- 1 root root 29446 Feb 20 2008 httptunnel_3.3-1_mips.ipk -rw-r--r-- 1 root root 3762 Feb 20 2008 kmod-nls-base_2.6.23.16-atheros-1_mips.ipk -rw-r--r-- 1 root root 2895 Feb 20 2008 kmod-nls-cp1250_2.6.23.16-atheros-1_mips.ipk -rw-r--r-- 1 root root 2978 Feb 20 2008 kmod-nls-cp437_2.6.23.16-atheros-1_mips.ipk -rw-r--r-- 1 root root 2927 Feb 20 2008 kmod-nls-cp850_2.6.23.16-atheros-1_mips.ipk -rw-r--r-- 1 root root 2955 Feb 20 2008 kmod-proc-gpio_2.6.23.16-atheros-1_mips.ipk -rw-r--r-- 1 root root 67300 Feb 20 2008 libpcap_0.9.4-1_mips.ipk -rw-r--r-- 1 root root 19279 Feb 20 2008 libpthread_0.9.29-12_mips.ipk -rw-r--r-- 1 root root 8870 Feb 20 2008 hostapd-utils_20071107-1_mips.ipk -rw-r--r-- 1 root root 148000 Feb 20 2008 hostapd_20071107-1_mips.ipk -rw-r--r-- 1 root root 22865 Feb 20 2008 openntpd_3.9p1-2_mips.ipk -rw-r--r-- 1 root root 15283 Feb 20 2008 ptunnel_0.61-1_mips.ipk -rw-r--r-- 1 root root 5428 Feb 20 2008 updatedd-mod-noip_2.6-5_mips.ipk -rw-r--r-- 1 root root 5667 Feb 20 2008 updatedd_2.6-5_mips.ipk

46 WinSCP: TODO

Page 71: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 71 von 89

Diese Packages können mittels „ipkg install xxx.ipk“ installiert werden. root@OpenWrt:/tmp# ipkg install lib*.ipk Installing libpcap (0.9.4-1) to root... Installing libpthread (0.9.29-12) to root... Configuring libpcap Configuring libpthread Done. root@OpenWrt:/tmp# ipkg install kmod*.ipk Installing kmod-nls-base (2.6.23.16-atheros-1) to root... Installing kmod-nls-cp1250 (2.6.23.16-atheros-1) to root... Installing kmod-nls-cp437 (2.6.23.16-atheros-1) to root... Installing kmod-nls-cp850 (2.6.23.16-atheros-1) to root... Installing kmod-proc-gpio (2.6.23.16-atheros-1) to root... Configuring kmod-nls-base Configuring kmod-nls-cp1250 Configuring kmod-nls-cp437 Configuring kmod-nls-cp850 Configuring kmod-proc-gpio gpio_proc: module loaded and /proc/gpio/ created Done. root@OpenWrt:/tmp# ipkg install httptunnel_3.3-1_mips.ipk Installing httptunnel (3.3-1) to root... Configuring httptunnel ^[[A^[Done. root@OpenWrt:/tmp# ipkg install pt*.ipk Installing ptunnel (0.61-1) to root... Configuring ptunnel Done. root@OpenWrt:/tmp# ipkg install up*.ipk Installing updatedd-mod-noip (2.6-5) to root... Installing updatedd (2.6-5) to root... Package updatedd (2.6-5) installed in root is up to date. Configuring updatedd Configuring updatedd-mod-noip Done. root@OpenWrt:/tmp# ipkg install openntpd_3.9p1-2_mips.ipk Installing openntpd (3.9p1-2) to root... Configuring openntpd adding group ntp to /etc/group adding user ntp to /etc/passwd Done. root@OpenWrt:/tmp# ipkg install hos*.ipk Installing hostapd-utils (20071107-1) to root... Installing hostapd (20071107_-1) to root... Configuring hostapd Configuring hostapd-utils Done.

Page 72: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 72 von 89

Konfiguration Netzwerk

Die Konfiguration ist im File /etc/config/network gespeichert. Default Konfiguration: # Copyright (C) 2006 OpenWrt.org config interface loopback option ifname lo option proto static option ipaddr 127.0.0.1 option netmask 255.0.0.0 config interface lan option ifname eth0 option type bridge option proto static option ipaddr 192.168.1.1 option netmask 255.255.255.0

Konfiguration als DHCP Client: # Copyright (C) 2006 OpenWrt.org config interface loopback option ifname lo option proto static option ipaddr 127.0.0.1 option netmask 255.0.0.0 config interface lan option ifname eth0 option type bridge option proto dhcp

Wurde diese Anpassung gemacht, kann mit dem Befehl „/etc/init.d/network restart“ die Änderung übernommen werden.

Konfiguration Wireless

Die Konfiguration ist im File /etc/config/wireless gespeichert. Default Konfiguration: config wifi-device wifi0 option type atheros option channel auto option disabled 1 config wifi-iface option device wifi0 option network lan option mode ap option ssid OpenWrt option encryption none

Konfiguration als PSK2 Wireless Client: config wifi-device wifi0 option type atheros option channel auto option disabled 0 config wifi-iface option device wifi0 option network lan option mode ap option ssid m00m00 option encryption psk2 option key passwort

Hinweis: Damit die PSK2-Verschüsselung funktioniert, werden Funktionen des hostapd Packages verwendet. Hat man die Änderungen im Konfig File gemacht, kann mit dem Befehl „wifi“ die Wireless Funktion neu gestartet werden.

Page 73: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 73 von 89

Konfiguration Dynamic DNS

Die Konfiguration ist im File /etc/config/updatedd gespeichert. Default Konfiguration: config updatedd option service '' option username '' option password '' option host '' option update ''

Konfiguration als No-IP Client: config updatedd option service 'noip' option username '[email protected]' option password 'PASSWORT' option host 'm00m00.no-ip.org' option update '1'

Der Befehl „/etc/init.d/updatedd enable“ aktiviert diesen Service nach einem Neustart.

Konfiguration Tunneling Clients

Die Tools HTTPTunnel und PTunnel brauchen keine speziellen Konfigurations-Files, sie können mit dem OpenWrt Konfigurationstool UCI konfiguriert werden: root@OpenWrt:/tmp# uci show httptunnel httptunnel.cfg02c9f9=httptunnel httptunnel.cfg02c9f9.destination=localhost:443 httptunnel.cfg02c9f9.sourceport=80 root@OpenWrt:/tmp# uci show ptunnel ptunnel.cfg029998=ptunnel ptunnel.cfg029998.interface=br-lan

Damit diese Services nach einem Neustart aktiv sind, werden sie aktiviert: root@OpenWrt:/tmp# /etc/init.d/httptunnel enable root@OpenWrt:/tmp# /etc/init.d/ptunnel enable

Page 74: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 74 von 89

Konfiguration Wifi-Toggler

Damit man Wireless mit einem Knopfdruck ein- und ausschalten kann, müssen folgende files erstellt werden: Eine neue UCI Konfigurations Sektion namens „wifitoggler“ wird erstellt. In dieser Sektion wird der Buttonname definiert, in diesem Beispiel „reset“. So kann dieses Script auch auf anderen Routern verwendet werden, es muss nur die UCI-Konfiguration geändert werden. root@OpenWrt:~# cat /etc/config/wifitoggler config wifitoggle option button 'reset'

Wird nun eine Taste gedrückt, wird das folgende Script ausgeführt: root@OpenWrt:~# cat /etc/hotplug.d/button/10-wifitoggle #!/bin/sh . /lib/config/uci.sh . /etc/functions.sh config_load "wifitoggler" local section="cfg025715" config_get "BUTTON_NAME" "$section" "button" #you may debug your events, write stuff to the eventlog #logger seen: "$SEEN", button: "$BUTTON" butname: "$BUTTON_NAME" toggle_radio() { local section="$1" config_get "WIFI_RADIOSTATUS" "$section" "disabled" case "$WIFI_RADIOSTATUS" in 1|"") logger enable wlan uci_set "wireless" "wifi0" "disabled" "0" wifi # wlan led on echo 1 > /proc/gpio/2_dir echo 1 > /proc/gpio/2_out ;; 0) logger disable wlan uci_set "wireless" "wifi0" "disabled" "1" wifi # wlan led off echo 1 > /proc/gpio/2_dir echo 0 > /proc/gpio/2_out ;; esac } if [ "$BUTTON" = "$BUTTON_NAME" ] && [ $SEEN == "0" ] ; then if [ "$ACTION" = "released" ] ; then logger keypress detected config_load "wireless" config_foreach toggle_radio wifi-device fi fi

Page 75: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 75 von 89

Status

Freier Disk und Speicherplatz nach der Installation (inkl. Applikationen): root@OpenWrt:/tmp# df -h Filesystem Size Used Available Use% Mounted on none 6.7M 204.0k 6.5M 3% /tmp tmpfs 512.0k 0 512.0k 0% /dev /dev/mtdblock3 5.2M 736.0k 4.5M 14% /jffs mini_fo:/jffs 1.8M 1.8M 0 100% / root@OpenWrt:/tmp# free total used free shared buffers Mem: 13640 9508 4132 0 320 Swap: 0 0 0 Total: 13640 9508 4132

Page 76: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 76 von 89

9. TEST

MP3 PLAYERS

Überprüfen der „Muss“ Kriterien aus dem Pflichtenheft:

Der MP3-Player sollte folgende Funktionen unterstützen:

� TM1 - Bedienung (Input) via Fernbedienung und/oder Tasten (z.B. Keypad)

� TM2 - Ausgabe des MP3-Player Status und der aktuellen Songinformationen auf einem Display

� TM3 - Ausgabe der Musik an einem Line-Out, Headphone oder SPDIF Ausgang

� TM4 - Übermitteln der gespielten Songs auf Last.fm47, „Scrobbeln“ genannt

� TM5 - Verwenden von Open Source Software

� TM6 - Erweiterbar, daher muss das Basis-OS modular aufgebaut sein

Überprüfen der „Optionalen“ Kriterien aus dem Pflichtenheft:

Optionale Funktionen des MP3-Players:

� TO1 - Streaming von Internet Radio

� TO2 - Verwendung von Wireless LAN

� TO3 - Verwendung von Bluetooth um den Player zu steuern (z.B. via Mobile Phone)

� TO4 - Die gesamte Hardware in ein Retro-Gehäuse verpacken

Überprüfen des „Muss“ Kriteriums aus der Aufgabenstellung:

� TM7 - Aussagen puncto erzielter Audio Qualität sind zu treffen

Testname Erfüllt Bemerkung

TM1 Ja Erfüllt mit der Applikation CmdPad TM2 Ja Erfüllt mit der Applikation LCD4Linux und dem MPD Plugin TM3 Ja Erfüllt mit der verwendeten Soundkarte (Line-Out und SPDIF) TM4 Ja Erfüllt mit der Applikation SCMPC

TM5 Ja OpenWRT ist OpenSource, jede Applikation die verwendet wird ist OpenWRT (GPL, BSD… Lizenz)

TM6 Ja Erfüllt mit dem OpenWRT Disklayout (Firmware mit Basis OS und Applikationen) TM7 n/a Siehe Kapitel „Test Audioqualität“

TO1 Ja Erfüllt mit der Applikation MPD (Build-in Funktion). Radio Streams sind via JamSE auswählbar.

TO2 Nein Es sind noch keine Linux Treiber vorhanden. Es wäre möglich, die verwendete Wireless Karte auszutauschen, mit einer Atheros mini-PCI Karte. Siehe auch Kapitel „Wireless Treiber“

TO3 Ja

Erfüllt mit der Applikation Bemusedserver und JamSE. Wird eine grössere Playlist verwendet (>1000 Songs) crasht die Applikation JamSE mit einer „Out of Memory Exception“. Die JamSE Software hat nur begrenzt Speicher zur Verfügung, daher muss JamSE und bemusedlinuxserver angepasst werden, dass nur ein Teil der Playlist übertragen wird.

TO4 Ja Erfüllt, siehe Kapitel „Bilder der MP3 Jukebox“

47 http://last.fm/

Page 77: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 77 von 89

Test Audioqualität

Um die Güte des Audiosignals zu bestimmen, werden Sinus-Signale von 30Hz bis 20kHz in acht Schritten verwendet. Für jede Frequenz wird der Peak Level (Vpp) bestimmt. Messresultate: 30Hz, Vpp = 5.8V 60Hz, Vpp = 5.8V 4kHz, Vpp = 5.6V 8kHz, Vpp = 5.3V

12kHz, Vpp = ~4.5V..5.3V (pulsierend) 14kHz, Vpp = ~3.9V..5.0V (pulsierend) 16kHz, Vpp = ~1.7V..4.9V (pulsierend) 20kHz, nicht mehr Messbar!

Hinweis: Alle verwendeten Testsounds sind auf der CD im Unterverzeichnis „Testsounds“ zu finden. Optische Repräsentation des Audiosignals mit einem KO (Vertikaleinstellung KO: 0.1V AC):

Abbildung 26: 30Hz

Abbildung 27: 60Hz

Abbildung 28: 4kHz

Abbildung 29: 8kHz

Page 78: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 78 von 89

Abbildung 30: 12kHz (pulsierende Amplitude)

Abbildung 31: 14kHz (pulsierende Amplitude)

Abbildung 32: 16kHz (pulsierende Amplitude)

Fazit: Laut den Messungen wird das Signal ab ca. 10kHz ein wenig schwächer. Laut dem Motto „Wer misst, misst Mist“ sind die Resultate nicht zu überbewerten. Jedoch kann mit Sicherheit gesagt werden, dass sich die verwendete Soundkarte sicherlich nicht im High-End Bereich bewegt, sondern eher im guten Mittelfeld. Berücksichtigt man die Tatsache, dass relativ günstige Aktiv-Boxen verwendet werden, komme ich zum Schluss, dass der MP3-Player eine akzeptable Audioqualität liefert und den Ansprüchen genügt.

Page 79: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 79 von 89

Bilder der MP3 Jukebox

Einige Bilder der fertigen MP3 Jukebox:

Abbildung 33: Stromanschluss und

Zugentlastung

Abbildung 34: Einbau der Komponenten

Abbildung 35: Jukebox mit montierter

Rückwand

Abbildung 36: Frontansicht mit Keypad

Page 80: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 80 von 89

Wireless Treiber

Erschwerend bei der Verwendung des Wireless Treibers ist die Bluetooth Koexistenz. Bluetooth Frequenzbereich: Der verwendete Frequenzbereich liegt zwischen 2400 und 2480 Megahertz (MHz). Sendeleistung:

� Klasse I: 100,0 Milliwatt (mW) bei einer Reichweite bis circa 100 Meter. Diese Geräte müssen eine automatische Leistungsregelung haben: die benötigte Sendeleistung passt sich dem tatsächlichen Bedarf an.

� Klasse II: 2,5 mW im Bereich des Büroarbeitsplatzes bis maximal 50 Meter. � Klasse III: 1,0 mW für Anwendungen im Nahbereich bis etwa 10 Meter.

WLAN Frequenzbereich: 2400 MHz (wie Bluetooth) sowie im Bereich zwischen 5000 und 6000 MHz, der zurzeit noch wenig genutzt wird. Sendeleistung:

� 100 mW bei 2400 MHz, � 200 mW bei 5150 bis 5350 MHz bei einer Nutzung innerhalb geschlossener Räume sowie � 1000 mW bei 5470 bis 5725 MHz bei einer Nutzung sowohl innerhalb als auch außerhalb

geschlossener Räume. Die Frequenzen zwischen 5000 und 6000 MHz dürfen nur mit automatischer Leistungsregelung genutzt werden. Fazit WLAN (IEEE 802.11b/g) und Bluetooth verwenden beide die gleiche ISM Frequenz auf 2400MHz. Jedoch werden verschiedene Access Technologien verwendet.

� Bluetooth verwendet "frequency hopping" (1600 hops/s, eingeteilt in 79 1-MHz Channels) � WLAN verwendet einen listen-before-talk (Carrier Sensing Multiple Access) und je nach

verwendetem Standart ein anderes Modulationsverfahren (Siehe Wikipedia http://en.wikipedia.org/wiki/IEEE_802.11).

Die Bluetooth und WLAN Standards berücksichtigen eine allfällige Koexistenz beider Standards nicht! Daher muss der WLAN Treiber eine zusätzliche Funktion eingebaut haben, welcher die Bluetooth Koexistenz sicherstellt. Quelle: http://www.broadbandcity.gr/content/modules/downloads/How_80211bg_WLAN_and_Bluetooth_Can_Play_(Philips).pdf

Page 81: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 81 von 89

TEST SSH GATEWAY

Überprüfen der „Muss“ Kriterien aus dem Pflichtenheft:

Der SSH Gateway sollte folgende Funktionen unterstützen:

� TM1 - Der Wireless Access Point kann weiterhin in seiner Funktion verwendet werden, inkl. WPA2 –Verschlüsselung

� TM2 - SSH Server inkl. Tunnelling Funktion (Application Tunneling)

� TM3 - Verwenden eines dynamischen DNS Dienstes wie z.B. DynDNS48

� TM4 - Erreichbar via Internet

� TM5 - Verwenden von Open Source Software

� TM6 - Erweiterbar, daher muss das Basis-OS modular aufgebaut sein

Überprüfen der „Optionalen“ Kriterien aus dem Pflichtenheft:

� TO1 - Ein- und Ausschalten des Wireless Signals inkl. Optischem Feedback (z.B. via LED)

� TO2 - Weitere Tunnelling Funktionen (z.B. SSH over HTTP, SSH over ICMP, SSH over DNS)

� TO3 - Verschleiern der Funktionalität mittels Port-Knocking – verhindert automatisierte Angriffe aus dem Internet

Überprüfen des „Muss“ Kriteriums aus der Aufgabenstellung:

� TM7 - Aussagen puncto Datenrate (Durchsatz) sind zu definieren. Diesen Test werde ich mit IPerf durchführen. IPerf ist in der Version 2.0.2 für OpenWRT bereits vorhanden.

Testname Erfüllt Bemerkung

TM1 Ja Erfüllt mit der Applikation HostAP TM2 Ja Erfüllt mit der Applikation OpenSSH TM3 Ja Erfüllt mit der Applikation DDNS TM4 Ja Erfüllt mit der Verwendung eines dynamischen DNS Dienstes und OpenSSH

TM5 Ja OpenWRT ist OpenSource, jede Applikation, die verwendet wird, ist OpenWRT (GPL, BSD… Lizenz)

TM6 Ja Erfüllt mit dem OpenWRT Disklayout (Firmware mit Basis OS und Applikationen)

TM7 n/a Siehe Kapitel „Test Datendurchsatz“ TO1 Ja Erfüllt mit dem Skript Wireless-Toggle TO2 Ja Erfüllt mit den Applikationen HTTPTunnel und PTunnel

TO3 Nein

Aufgrund der Erreichbarkeit habe ich mich gegen den Einsatz einer Port-Knocking Software entschieden. Wenn ich in einer restriktiven Umgebung arbeite und via HTTPTunnel oder PTunnel auf meinen SSH Server zugreife, kann das Senden der „Magic Sequence“ hinderlich sein.

48 http://www.dyndns.com/

Page 82: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 82 von 89

Test Datendurchsatz

Um den Datendurchsatz zwischen einem Wireless Access Point und einem Laptop zu ermitteln, haben viele Faktoren einen Einfluss auf das Resultat:

� Raum, hat der AP und der Client Sichtkontakt oder muss das Signal durch Wände? Was für Wände sind verwendet (Stahl, Beton, Holz…)?

� Weitere AP, welche auf dem gleichen Channel arbeiten wie unser AP – kann zu Störungen führen. � Güte des Clients, Antenne, Treiber etc.

Ich verwende in diesem Test einen Windows XP Client mit einer Intel PRO/Wireless 2200BG (Treiber v9.0.4.37) Wireless Karte. Der AP und der Client haben keinen direkten Sichtkontakt, jedoch ist die Signalqualität laut Intel Wireless Tool „Ausgezeichnet“:

Abbildung 37: Verbindung mit dem AP

Performance Test mit IPerf: Auf dem AP wird IPerf im Server Mode gestartet: root@OpenWrt:~# iperf -s

Auf dem Windows Client wird IPerf im Client Mode gestartet C:\Program Files\iperf-2.0.2\bin>iperf -c 192.168.111.88 -d -t 180 ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ ------------------------------------------------------------ Client connecting to 192.168.111.88, TCP port 5001 TCP window size: 63.0 KByte (default) ------------------------------------------------------------ [ 4] local 192.168.111.25 port 3849 connected with 192.168.111.88 port 5001 [ 4] 0.0-180.0 sec 224 MBytes 10.4 Mbits/sec [ 4] local 192.168.111.25 port 5001 connected with 192.168.111.88 port 59773

Ausgabe auf dem AP: ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local 192.168.111.88 port 5001 connected with 192.168.111.25 port 3842 root@OpenWrt:~# iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local 192.168.111.88 port 5001 connected with 192.168.111.25 port 3849 [ 4] 0.0-180.1 sec 224 MBytes 10.4 Mbits/sec

Page 83: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 83 von 89

Dieses Resultat ist relativ niedrig, das hat folgenden Grund; die CPU auf dem AP wird mit IPerf voll ausgelastet, eine Ausgabe des Tools „Top“: Mem: 11364K used, 2276K free, 0K shrd, 268K buff, 3808K cached CPU: 1% usr 7% sys 0% nice 1% idle 0% io 5% irq 84% softirq Load average: 0.49 0.12 0.05 PID PPID USER STAT VSZ %MEM %CPU COMMAND 4891 4876 root R 1676 12% 95% iperf -s 4897 4894 root R 2416 18% 1% top 4892 555 root S 6864 50% 1% sshd: root@pts/1 4874 555 root S 6864 50% 0% sshd: root@pts/0

Auf http://www.cablemodem.ch/speedtest/speedtest.html führte ich den Speed-Test durch, die Downloadrate war durchschnittlich bei 17'386 kbit/s

Abbildung 38: Geschwindigkeitstest AP

Fazit: Eine eindeutige Obergrenze des Datendurchsatzes konnte aufgrund der CPU Belastung nicht durchgeführt werden. Der Datendurchsatz des AP reicht jedoch aus, um die Anbindung an das Kabelmodem (Internet) zu gewährleisten.

Page 84: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 84 von 89

10. ZUSAMMENFASSUNG

RÜCKBLICK

Die Diplomarbeit war herausfordernd und abwechslungsreich. Diese Arbeit setzte sich in etwa aus je einem Drittel Evaluation und Analyse, Programmierung und Konfiguration zusammen. Mit dem Endresultat bin ich sehr zufrieden und ich kann meine beiden Anfordungen ganz erfüllen.

AUSBLICK

Der SSH-Gateway genügt meinen Anforderungen und braucht keine Erweiterung mehr. Anders sieht dies beim MP3-Player aus. Folgende Punkte möchte ich in Zukunft noch ändern: Wireless LAN: Entweder die Mini-PCI Karte durch eine OpenWRT unterstützte Karte ersetzten (z.B. Atheros, ca. 30Fr.) oder warten bis ein stabiler Treiber für die Hardware (b43) veröffentlicht wird. Bestrebungen betreffend des Treibers sind im Gange, jedoch kann betreffend einem Endtermin keine Aussage gemacht werden. Pulseaudio support: Beschreibung von der Pulseaudio Web Seite49:

PulseAudio is a sound server for POSIX and Win32 systems. A sound server is basically a proxy for your sound applications. It allows you to do advanced operations on your sound data as it passes between your application and your hardware. Things like transferring the audio to a different machine, changing the sample format or channel count and mixing several sounds into one are easily achieved using a sound server.

PulseAudio has been tested on Linux, Solaris, FreeBSD, Windows 2000 and Windows XP. It should also run on all other POSIX and Windows systems, but may require new backends to handle their sound systems.

Mit Pulseaudio würde es möglich werden, von einer Basis-Station aus mehreren abgesetzten Teilnehmern mit einem Audiosignal zu beliefern. Zusammen mit Wireless LAN würde sich hier ein interessantes Anwendungsgebiet eröffnen. JamSE / Bemusedserver: Zusammen mit dem JamSE Entwickler möchte ich das Problem, welches momentan existiert (Playlist browsing funktioniert nicht bei grossen Playlists) beheben. Vom technischen Aspekt her ist das nicht ein grosses Problem, die Übermittlung der Playlist müsste in mehrere Teilschritte unterteilt werden. Die Problematik dabei ist, dass man dadurch nicht mehr 100% kompatibel zum originalen Bemused Protokoll ist.

49 http://www.pulseaudio.org/

Page 85: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 85 von 89

11. GLOSSAR

API Eine Programmierschnittstelle ist eine Schnittstelle, die von einem Softwaresystem

anderen Programmen zur Anbindung an das System zur Verfügung gestellt wird. Oft wird dafür die Abkürzung API (für engl. application programming interface, deutsch: „Schnittstelle zur Anwendungsprogrammierung“) verwendet. Im Gegensatz zu einer Binärschnittstelle (ABI) definiert eine API nur die Verwendung der Schnittstellen auf Quelltextebene.50

BOM (Unicode) Als Byte Order Mark (BOM, dt. „Bytereihenfolge-Markierung“) wird das Unicode-Zeichen an Position U+FEFF (zero width no-break space) bezeichnet, wenn es verwendet wird, um die Byte-Reihenfolge einer in UTF-16 oder UTF-32 kodierten UCS/Unicode Zeichenkette anzugeben und/oder um den entsprechenden Text als in UTF-8, UTF-16 oder UTF-32 kodiert zu markieren. Bei den Kodierungen UTF-16 und UTF-32 muss die Byte-Reihenfolge angegeben werden, da die Zeichen jeweils mindestens entweder in 16 oder 32 Bit großen Werten kodiert sind und damit mehrere Bytes benötigen. Das Byte-Order-Mark kennzeichnet dabei, in welcher Reihenfolge die Bytes ausgewertet werden müssen. Diese Markierung wird immer dann besonders wichtig, wenn Daten zwischen unterschiedlichen Computersystemen ausgetauscht werden.51

Daemon Als Daemon bzw. Dämon (auch häufig in der Schreibweise Demon) bezeichnet man unter Unix und seinen Derivaten ein Programm, das im Hintergrund abläuft und bestimmte Dienste zur Verfügung stellt. Benutzerinteraktionen finden hierbei nur auf indirektem Weg statt, zum Beispiel über Signale oder Pipes. Der Begriff Daemon wird auch als Abkürzung von disk and execution monitor interpretiert, was jedoch ein Backronym ist.52

DNS Domain Name System – bezeichnet die „Übersetzung“ eines Namens (z.B. www.example.ch) in eine IP Adresse (z.B. 62.112.33.12).

FS File System, auf deutsch Dateisystem. Ein Filesystem beschreibt die Ablageorganisation eines Datenträgers. Beispiele FAT16, FAT32, NTFS, EXT2, SquashFS…

HID HID (Human Interface Device) ist eine Geräteklasse des USB-Standards für Computer, welche Geräte beschreibt, die direkt mit dem Benutzer interagieren. Meist wird HID bei Geräten wie Tastatur, Maus, Joystick und Grafiktabletts verwendet.53

HTTP Hypertext Transfer Protocol – ein Protokoll zur Übertragung von Daten über ein Netzwerk. Das World Wide Web (WWW) verwendet dieses Protokoll.

ICMP Das Internet Control Message Protocol (ICMP) wird verwendet um Fehler- und Statusmeldungen zu verschicken. Die berühmteste Anwendung dafür dürfte wohl das Diagnostik Tool „Ping“ sein.

Idle English für „untätig“. Wenn ein Computersystem Idle ist, ist es nicht ausgelastet IR InfraRot – Signalübertragung, welche Sichtkontakt benötigt. Die meisten TV Geräte

mit einer Fernbedienung verwenden IR Signale. ISM Als ISM-Bänder (Industrial, Scientific, and Medical Band) werden Frequenzbereiche

bezeichnet, die durch Hochfrequenz-Geräte in Industrie, Wissenschaft, Medizin, in häuslichen und ähnlichen Bereichen genutzt werden können. Entsprechende ISM-Geräte wie Mikrowellenherde und medizinische Geräte zur Kurzwellenbestrahlung benötigen dabei nur eine allgemeine Zulassung.54

50 Quelle: http://de.wikipedia.org/wiki/Programmierschnittstelle 51 Quelle: http://de.wikipedia.org/wiki/Byte_Order_Mark 52 Quelle: http://de.wikipedia.org/wiki/Daemon 53 Quelle: http://de.wikipedia.org/wiki/Human_Interface_Device 54 Quelle: http://de.wikipedia.org/wiki/ISM-Band

Page 86: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 86 von 89

Kernel Ein elementarer Bestandteil eines Betriebssystems, Schnittstelle zur Hardware. KO Kathodenstrahl-Oszilloskop. Ein Oszilloskop ist ein elektronisches Messgerät zur

optischen Darstellung voneinander unabhängiger Spannungen in einem zweidimensionalen Koordinatensystem55.

MP3 MPEG-1 Audio Layer 3 (MP3) ist ein Dateiformat zur nicht-verlustfreien Audiodatenkompression. MP3 bedient sich dabei der Psychoakustik mit dem Ziel, nur für den Menschen bewusst hörbare Audiosignale zu speichern. Dadurch wird eine Datenkompression möglich, welche die Audioqualität nicht oder nur gering beeinträchtigt. Das Format ist ein indirekter Vorgänger qualitativ und funktionell überlegener Formate wie AAC oder Vorbis56.

OpenWRT OpenWrt ist eine Linux-Distribution für bestimmte WLAN-Router, die häufig anstelle der vorinstallierten Firmware eingesetzt wird. Im Gegensatz zu einer statischen Firmware setzt OpenWRT auf ein voll beschreibbares Dateisystem sowie einen Paketmanager und ermöglicht es somit, einen WLAN-Router flexibel um ursprünglich nicht vom Hersteller vorgesehene Funktionen zu erweitern.57

OS Operating System – Betriebssystem. Beispiele: Windows, Linux, BSD, Solaris, Tru64, MAC OS/X, etc…

SIP Session Initiation Protocol (SIP). In der IP-Telefonie ist das SIP ein häufig angewandtes Protokoll.

SPDIF Sony/Philips Digital Interface (S/P-DIF). Eine digitale Schnittstelle um Audiogeräte miteinander zu verbinden.

SoC System on Chip (SoC), auf Deutsch ein Ein-Chip-System. Dieses Ein-Chip-System beinhaltet folgende Komponenten: Prozessor, Speicher und interne Einheiten wie z.B. Timer, Interruptcontroller, serielle Schnittstelle, etc.

SSH Secure Shell (SSH) ist sowohl ein Netzwerkprotokoll als auch eine Applikation. Die aktuelle Version des SSH Protokolls ist 2.0. SSH ermöglicht eine sichere, authentifizierte und verschlüsselte Verbindung zwischen zwei Rechnern über ein unsicheres Netzwerk. SSH kann grob gesagt für drei Anwendungs-Szenarien verwendet werden: Secure System Administration, Secure File Transfer und Secure Application Tunneling.

SVN Subversion (SVN) ist eine Open-Source-Software zur Versionsverwaltung von Dateien und Verzeichnissen. Ein „besseres“ CVS System mit mehr Features.

TTL Transistor Transistor Logic. Ein serielles Signal. Der Spannungsbereich eines TTL Signals ist zwischen 0V und 3.3V, während der Spannungsbereich eines RS232 seriellen Signals zwischen -12V und +12V liegt. Um das TTL Signal an einer seriellen Schnittstelle zu verwenden, muss das Signal konvertiert werden. Viele Datenkabel für Mobil-Telefone haben solche Spannungswandler verbaut.

Tunnel Ein Tunnel bezeichnet in der Informationstechnik eine Technik zum Verbinden zweier Rechnernetze über ein drittes Netz, bei dem der Transitverkehr vom Datenverkehr des zwischengeschalteten Netzes isoliert wird. Tunnel werden verwendet, um üblicherweise gesicherte und/oder verschlüsselte Verbindungen über ungesicherte Computernetze aufzubauen (siehe VPN) oder um Firewalls und andere Sicherheitsmaßnahmen zu umgehen.58

VPN Virtual Private Network (VPN). In der Praxis werden zwei Netzwerke (z.B. Hauptsitz und Zweigstelle) miteinander verbunden. Dazu wird via Internet ein sicherer Tunnel (siehe Tunnel) erstellt.

WDS Wireless Distribution System (WDS) – bezeichnet ein drahtloses Netzwerk aus mehreren Zugriffspunkten (Wireless Access Point, AP).59

55 Quelle: http://de.wikipedia.org/wiki/Oszilloskop 56 Quelle: http://de.wikipedia.org/wiki/MP3 57 Quelle: http://de.wikipedia.org/wiki/OpenWRT 58 Quelle: http://de.wikipedia.org/wiki/Tunneling 59 Quelle: http://de.wikipedia.org/wiki/Wireless_Distribution_System

Page 87: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 87 von 89

WEP Wired Equivalent Privacy (WEP). Der ursprüngliche Verschlüsselungsstandart für

Wireless LAN, dieser sollte die Vertraulichkeit und Integrität der Übertragenen Daten sicherstellen. Dieser Standart gilt als unsicher und der Schlüssel (Ciphertext) kann nach wenigen Minuten herausgefunden werden – diese Verschlüsselungsmethode sollte also nicht mehr verwendet werden.

WPA2 Wi-Fi Protected Access 2 (WPA2). Die Wireless Verbindung wird basierend auf dem Advanced Encryption Standard (AES) verschlüsselt und gilt heutzutage als sicherste W-LAN Verschlüsselung.

Page 88: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 88 von 89

12. ANHANG

BUILDUMGEBUNG

Um OpenWRT Images zu erstellen habe ich VMware Workstation v5.5.0 build-18463 mit einem Debian GNU/Linux 4.0 verwendet, hier einige Versions-Informationen michux@fwpiercer:~/trunk$ cat /etc/debian_version 4.0 michux@fwpiercer:~/trunk$ uname -a Linux fwpiercer 2.6.18-6-686 #1 SMP Sun Feb 10 22:11:31 UTC 2008 i686 GNU/Linux michux@fwpiercer:~/trunk$ gcc -v Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --with-tune=i686 --enable-checking=release i486-linux-gnu Thread model: posix gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) michux@fwpiercer:~/trunk$ automake --version automake (GNU automake) 1.10 Written by Tom Tromey <[email protected]> and Alexandre Duret-Lutz <[email protected]>.

Für die OpenWRT Buildumgebung sollte mindestens 6GB Diskspace eingeplant werden: michux@fwpiercer:~/trunk$ du -h --max-depth=1 /home/michux/trunk/ 2.3M /home/michux/trunk/scripts 164M /home/michux/trunk/dl 138M /home/michux/trunk/feeds 22M /home/michux/trunk/tmp 80M /home/michux/trunk/target 2.4M /home/michux/trunk/tools 300K /home/michux/trunk/docs 16M /home/michux/trunk/toolchain 120K /home/michux/trunk/.svn 34M /home/michux/trunk/package.save 4.1G /home/michux/trunk/build_dir 122M /home/michux/trunk/bin 548K /home/michux/trunk/include 350M /home/michux/trunk/staging_dir 5.0G /home/michux/trunk/

Page 89: Diplomarbeit „Embedded Linux“ Dokumentation · 2011. 4. 6. · Embedded Linux Erfahrungsbericht Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür

Diplomarbeit

Michael Vogt Seite 89 von 89

BILDVERZEICHNIS

Abbildung 1: Übersicht Mobiltelefon Steuerung ............................................................................................ 9 Abbildung 2: Verbindungsaufbau via HTTPTunnel ..................................................................................... 13 Abbildung 3: Verbindungsaufbau via PTunnel............................................................................................. 13 Abbildung 4: OpenWRT Software Architektur ............................................................................................ 15 Abbildung 5: Entwicklungsumgebung.......................................................................................................... 17 Abbildung 6: OpenWRT Firmware Konfiguration ....................................................................................... 19 Abbildung 7: Auswahl der Applikation ........................................................................................................ 23 Abbildung 8: Auswahl der Konfigurationsoptionen ..................................................................................... 23 Abbildung 9: Konfiguration der Applikation ................................................................................................ 23 Abbildung 10: Flashlayout I.......................................................................................................................... 26 Abbildung 11: Flashlayout II ........................................................................................................................ 26 Abbildung 12: Flashlayout III ....................................................................................................................... 27 Abbildung 13: Übersicht MP3 Player ........................................................................................................... 29 Abbildung 14: Detailierte Applikations-Abhängikeiten................................................................................ 30 Abbildung 15: Übersicht MPD...................................................................................................................... 31 Abbildung 16: LCD4Linux Terminologie..................................................................................................... 34 Abbildung 17: LCD4Linux konfiguration..................................................................................................... 34 Abbildung 18: Übersicht SSH Gateway........................................................................................................ 35 Abbildung 19: Bemusedserver in Action ...................................................................................................... 45 Abbildung 20: Konfiguration MP3 Firmware............................................................................................... 50 Abbildung 21: ASUS Firmware Restoration Tool ........................................................................................ 52 Abbildung 22: WinSCP Datentransfer zu OpenWRT................................................................................... 54 Abbildung 23: LCD4Linux Konfiguration.................................................................................................... 60 Abbildung 24: Target System ist Atheros 2.6 ............................................................................................... 65 Abbildung 25: La Fonera TTL Serial Access................................................................................................ 67 Abbildung 26: 30Hz...................................................................................................................................... 77 Abbildung 27: 60Hz...................................................................................................................................... 77 Abbildung 28: 4kHz...................................................................................................................................... 77 Abbildung 29: 8kHz...................................................................................................................................... 77 Abbildung 30: 12kHz (pulsierende Amplitude) ............................................................................................ 78 Abbildung 31: 14kHz (pulsierende Amplitude) ............................................................................................ 78 Abbildung 32: 16kHz (pulsierende Amplitude) ............................................................................................ 78 Abbildung 33: Stromanschluss und Zugentlastung....................................................................................... 79 Abbildung 34: Einbau der Komponenten...................................................................................................... 79 Abbildung 35: Jukebox mit montierter Rückwand ....................................................................................... 79 Abbildung 36: Frontansicht mit Keypad ....................................................................................................... 79 Abbildung 37: Verbindung mit dem AP ....................................................................................................... 82 Abbildung 38: Geschwindigkeitstest AP ...................................................................................................... 83