Diplomarbeit Embedded Linux

Größe: px
Ab Seite anzeigen:

Download "Diplomarbeit Embedded Linux"

Transkript

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

2 1. INHALTSVERZEICHNIS 1. Inhaltsverzeichnis Diplominfromationen...4 Diplomand...4 Experte...4 Betreuer HFT-SO...4 Termine Aufgabenstellung 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 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 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 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 Michael Vogt Seite 2 von 89

3 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 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 Test...76 MP3 Players...76 Test Audioqualität...77 Bilder der MP3 Jukebox...79 Wireless Treiber...80 Test SSH Gateway...81 Test Datendurchsatz Zusammenfassung...84 Rückblick...84 Ausblick Glossar Anhang...88 Buildumgebung...88 Bildverzeichnis...89 Michael Vogt Seite 3 von 89

4 2. DIPLOMINFROMATIONEN DIPLOMAND Michael Vogt Bierhübeliweg Bern Mail: Klasse: TIS6 EXPERTE Stefan Huggenberger Mail: BETREUER HFT-SO Richard Moor Mail: TERMINE Ausgabe der Arbeit: 21. April 2008 Abgabe der Arbeit: 6. Mai 2008 Michael Vogt Seite 4 von 89

5 3. AUFGABENSTELLUNG Die Aufgabenstellung ist detailliert im Dokument Pflichtenheft Embedded Linux und Aufgabenstellung Diplomarbeit 2008 definiert und wird an dieser Stelle nicht erneut wiederholt. Michael Vogt Seite 5 von 89

6 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 Pulseaudio 1 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 Console 2 MPD Music Player Daemon 3 XMMS2 X-platform Music Multiplexing System 2 4 Mserv 5 Lamip 6 MOC MPD XMMS2 Mserv Lamip Formatvielfalt 16 Formate 12 Formate 10 Formate 12 Formate 16 Formate API vorhanden Nein Ja Ja Nein Nein Pulseaudio Nein Ja Ja Nein Nein unterstützung Aktives Projekt / Ja / Ja / Ja / Nein / Ja / Letztes Release Netzwerk fähig Nein Ja Ja Ja Ja Embedded Linux Erfahrungsbericht Keiner gefunden Keiner gefunden Keiner gefunden Ja 7, zusätzlich als OpenWrt Paket vorhanden Nicht speziell dafür entwickelt Hauptsächlich aufgrund geringer CPU Anforderungen und Erfahrungsberichten betreffend MPD und Embedded Devices habe ich mich für den Music Player Daemon entschieden Michael Vogt Seite 6 von 89

7 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: LCD4Linux 8 LCDproc 9 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 Ja 10, zusätzlich als OpenWrt Nein Systeme eingesetzt Paket verfügbar Aktives Projekt / Letztes Release Ja / (jedoch viele SVN Änderungen) Ja / Auch hier habe ich mich hauptsächlich aufgrund Erfahrungsberichten zufolge für die Software LCD4Linux entschieden https://ssl.bulix.org/projects/lcd4linux/wiki/coolstuff Michael Vogt Seite 7 von 89

8 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: cmdpad 11 EMPCd 12 cmdpad EMPCd Berücksichtigung der Ja Ja Tastenaktion 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 Michael Vogt Seite 8 von 89

9 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 Server 13 / JamSE Client 14 Remuco 15 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 Ja Ja Mobiltelefone Server arbeitet Ressourcenschonend Unbekannt Unbekannt Wird schon für Embedded Ja, Palm Version verfügbar Nein Systeme eingesetzt Aktives Projekt Nein / Ja Ja MPD unterstützt Nein Nein Da Remuco hauptsächlich auf schwergewichtigere Audioplayer zugeschnitten ist (z.b. Amorak 16 oder Rhythmbox 17 ), 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 Michael Vogt Seite 9 von 89

10 Last.FM Daemon Eine Beschreibung von Last.fm 18 (von Wikipedia 19 ): 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 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: scmpc 20 mpdscribble 21 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 Michael Vogt Seite 10 von 89

11 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. Michael Vogt Seite 11 von 89

12 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 OpenSSH 22 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 Michael Vogt Seite 12 von 89

13 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 SSHover-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 Michael Vogt Seite 13 von 89

14 5. TECHNOLOGIE Als Distribution wird OpenWRT 25 verwendet. Diese Distribution stellt ebenfalls eine (Linux-basierende) Entwicklungsumgebung zur Verfügung. OpenWRT verwendet SVN als Versionsmanagement. SVN 26 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 edge 27 ) 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! Michael Vogt Seite 14 von 89

15 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 uclibs: Abbildung 4: OpenWRT Software Architektur 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 Quelle: Michael Vogt Seite 15 von 89

16 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 Diskettenund 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 Quelle: 30 Quelle: Michael Vogt Seite 16 von 89

17 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: Cross Compile Create Compile 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. Michael Vogt Seite 17 von 89

18 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). Michael Vogt Seite 18 von 89

19 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. Hier weitere Beispiele: Abbildung 6: OpenWRT Firmware Konfiguration 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 Michael Vogt Seite 19 von 89

20 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. Michael Vogt Seite 20 von 89

21 Komplexere Portierung Als komplexere Applikation dient die Applikation LCD4Linux, hier der Aufbau des Verzeichnisses: ls -al drwxr-xr-x 3 michux michux :04 files <dir> drwxr-xr-x 3 michux michux :23 patches <dir> -rw-r--r-- 1 michux michux :29 Config.in -rw-r--r-- 1 michux michux :15 Makefile ls files/ -al -rw-r--r-- 1 michux michux :04 lcd4linux.conf -rw-r--r-- 1 michux michux :04 lcd4linux.init ls patches/ -al -rw-r--r-- 1 michux michux : drv_RouterBoard.patch -rw-r--r-- 1 michux michux : remove_parport_outb.patch -rw-r--r-- 1 michux michux : no_repnop_T6963.patch -rw-r--r-- 1 michux michux : 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 \ Michael Vogt Seite 21 von 89

22 <...> 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" Michael Vogt Seite 22 von 89

23 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 Michael Vogt Seite 23 von 89

24 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 :15: lcd4linux-847/drv_routerboard.c :15: ,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 :15: lcd4linux-847/drv_generic_parport.c :15: ,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 Michael Vogt Seite 24 von 89

25 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: diff -urn test_a test_b --- test_a :48: test_b :49: ,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 :24: bemused-mpd-r060/main.cpp :25: ,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. Michael Vogt Seite 25 von 89

26 OPENWRT DISKLAYOUT / BOOTVORGANG Quellennachweis: 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 LZMA 31 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: SquashFS 32 : ein komprimiertes READ ONLY Filesystem. JFFS2 33 : 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 Michael Vogt Seite 26 von 89

27 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_fo 35, 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 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 Michael Vogt Seite 27 von 89

28 6. DETAILKONZEPT / DESIGN Michael Vogt Seite 28 von 89

29 SYSTEMÜBERSICHT MP3 PLAYER Abbildung 13: Übersicht MP3 Player Michael Vogt Seite 29 von 89

30 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 Michael Vogt Seite 30 von 89

31 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 funktioniert 36 : Abbildung 15: Übersicht MPD 36 Bildquelle: Michael Vogt Seite 31 von 89

32 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 Seite 37 ). 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-Wiki 38 (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 MPC 39. Damit ist es möglich, den entfernten MPD Server des MP3 Players zu kontrollieren. Beispiel: C:\_hftso\diplomarbeit\mpc-win >set MPD_HOST= C:\_hftso\diplomarbeit\mpc-win >mpc UnitedBreaks.FM - Online Breakbeat Station - [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! Michael Vogt Seite 32 von 89

33 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 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 Tools 40 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 Michael Vogt Seite 33 von 89

34 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: Datenquelle Bsp: MPD Player Stati, Uptime... Anzeige-Art Bsp: 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. Michael Vogt Seite 34 von 89

35 SYSTEMÜBERSICHT SSH GATEWAY Abbildung 18: Übersicht SSH Gateway Michael Vogt Seite 35 von 89

36 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 v Changeset 8467 update package mpc to v 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 update scmpc package, correct depends Changeset add package cmdpad, inkl. Linux 2.6 Patch Changeset update darkstat package, fix init file Changeset update HTTPTunnel package, use hci for config Changeset update PTunnel package, use hci for config Changeset update cmdpad package, no-zombie patch Changeset update bluez package to v3.24 (bluetooth), 4 packages Changeset update mpd package v Changeset update mpc package, add pls handler Changeset add package libs/libshout Changeset update openssh package, add ssh-keysign, used for hostbased auth. Changeset 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. Michael Vogt Seite 36 von 89

37 Argtable Applikation: Grund: Arbeit: Schwierigkeitsgrad: Library, Command Line Parser Die Applikation SCMPC benötigt diese Library Makefile selber erstellt Einfach, kein Patch nötig, kein Init-File nötig. Library muss zusätzlich in die Entwicklungsumgebung kopiert werden (installdev) libdaemon Applikation: Grund: Arbeit: Schwierigkeitsgrad: Library, ermöglicht das eine Applikation als Daemon laufen kann Die Applikation SCMPC benötigt diese Library Makefile selber erstellt Einfach, kein Patch nötig, kein Init-File nötig. Library muss zusätzlich in die Entwicklungsumgebung kopiert werden (installdev) confuse Applikation: Grund: Arbeit: Schwierigkeitsgrad: Library, File Parser. Wird z.b. verwendet um Konfigurationsfiles zu lesen Die Applikation SCMPC benötigt diese Library Makefile selber erstellt Einfach, kein Patch nötig, kein Init-File nötig. Library muss zusätzlich in die Entwicklungsumgebung kopiert werden (installdev) scmpc Applikation: Grund: Arbeit: Schwierigkeitsgrad: Last.fm Daemon, übermittelt die gehörten Songs an Last.fm Anforderung Pflichtenheft (MP3 Player) Makefile selber erstellt, Patch erstellt, Init-File erstellt Mittel, Patch nötig damit die Applikation kompiliert werden kann, viele Abhängigkeiten. Zusätzliches Init-File benötigt. cmdpad Applikation: Grund: Arbeit: Schwierigkeitsgrad: Liest Keycodes eines HID Devices und führt entsprechend eine Applikation aus. Anforderung Pflichtenheft (MP3 Player) Makefile selber erstellt, Patches erstellt, Init-File erstellt 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 Michael Vogt Seite 37 von 89

38 lcd4linux Applikation: Grund: Arbeit: Schwierigkeitsgrad: Visualisierung von Informationen Anforderung Pflichtenheft (MP3 Player) Makefile erweitert (Update der Applikation, Menueinträge), Patch erstellt (für libmpdclient), Init-File erstellt, Plugin erstellt 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: Grund: Arbeit: Schwierigkeitsgrad: Music Player Daemon, Soundserver Anforderung Pflichtenheft (MP3 Player), Elementare Applikation des MP3 Players Makefile erweitert, verwenden von Libiconv, Init-File hinzugefügt Applikation updaten Mittel, relativ komplexes OpenWRT Makefile (Angabe aller benötigten Libs) MPC Applikation: Grund: Arbeit: Schwierigkeitsgrad: Music Player Console, Steuert MPD Kernapplikation um MPD zu steuern Makefile erweitert, Skript hinzugefügt um Radio Streams abzuspielen, Applikation updaten Einfach, Standart OpenWRT Makefile bluez-libs Applikation: Grund: Arbeit: Schwierigkeitsgrad: Bluetooth Library Die Applikation Bemused benötigt diese Library Update des Makefiles (neue Version der Applikation) Einfach, Standart OpenWRT Makefile bluez-utils Applikation: Grund: Arbeit: Schwierigkeitsgrad: Bluetooth Tools Die Applikation Bemused benötigt diese Library Update des Makefiles (neue Version der Applikation) Schwierig, diese neue Version verwendet neu dbus, diverse Konfigurationsänderungen waren nötig, installieren von Konfigurations-Files bluez-hcidump Applikation: Grund: Arbeit: Schwierigkeitsgrad: Bluetooth Traffic Dumper (Debug Tool) Troubleshooting bei Bluetooth Problemen Update des Makefiles (neue Version der Applikation) Einfach, Standart OpenWRT Makefile Michael Vogt Seite 38 von 89

39 bemused Applikation: Grund: Arbeit: Schwierigkeitsgrad: Bluetooth Server um mit MPD zu kommunizieren Anforderung Pflichtenheft (MP3 Player) Applikation angepasst, OpenWRT Makefile erstellt, Init-File erstellt, Patch File erstellt (Libiconv spezifisch), Konfigurations File erstellt Mittel, viele Abhängigkeiten, viele zusätzliche Files, Patch war nötig OpenSSH Applikation: Grund: Arbeit: Schwierigkeitsgrad: OpenSSH Suite (Client und Server) Anforderung Pflichtenheft (SSH Gateway) Makefile erweitert, das Tool ssh-keysign war nicht im Packet, welches für die host-based authentication nötig ist Einfach PTunnel Applikation: Grund: Arbeit: Schwierigkeitsgrad: ICMP Tunnel Software Anforderung Pflichtenheft (SSH Gateway) Update des Makefiles, Hinzufügen default Konfigurationsfile, Init-File erstellt welches IPTables rules anpasst, verwenden von UCI (zentrales OpenWRT Konfigurations-Skript) Mittel, Standart OpenWRT Makefile jedoch Konfiguration von IPTables, verwendet UCI http Tunnel Applikation: Grund: Arbeit: Schwierigkeitsgrad: http Tunnel Software Anforderung Pflichtenheft (SSH Gateway) Makefile erstellt, Hinzufügen default Konfigurationsfile, Init-File erstellt, verwenden von UCI (zentrales OpenWRT Konfigurations-Skript) Mittel, Standart OpenWRT Makefile, verwendet UCI Michael Vogt Seite 39 von 89

40 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 nachgesehen werden. Quellcode: Die ganze Source von LCD4Linux ist auf der CD unter \Software\LCD4Linux zu finden. Michael Vogt Seite 40 von 89

41 Plugin Entwicklung LCD4Linux beschreibt auf der Wiki Seite 41, 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 ) 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 Michael Vogt Seite 41 von 89

42 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). Michael Vogt Seite 42 von 89

43 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 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. Michael Vogt Seite 43 von 89

44 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 encodiert werden, in der Praxis sieht dies jedoch häufig anders aus. Daher ist Mojibake 42 (falsche Darstellung von Zeichen) ein häufiges Problem von ID3v1 Tags. ID3v2 Die Version 2 hingegen ist ein offizieller Standart, Informationen werden unter veröffentlicht. ID3v2 ist eigentlich eine falsche Bezeichnung, da von dieser Version zwei verschiedene Varianten existieren. ID3v2.3, encodiert Strings in ISO 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 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 Michael Vogt Seite 44 von 89

45 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 zu finden. Ich habe Bemused Linux Server für den MPD Musik Player umgeschrieben. Unter 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. Michael Vogt Seite 45 von 89

46 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 Michael Vogt Seite 46 von 89

47 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 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 :55: cmdpad-0.0.3/src/parse.c :56: ,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 :54: cmdpad-0.0.3/src/command.c :41: ,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. Michael Vogt Seite 47 von 89

48 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. 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 } done 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 #create mpd db /usr/bin/mpd --stdout --create-db #optional export for mpc export MPD_HOST= #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 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. Michael Vogt Seite 48 von 89

49 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. Michael Vogt Seite 49 von 89

50 8. INSTALLATION MP3 PLAYER Konfiguration Firmware Starten der OpenWrt Firmware-Konfiguration 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. Michael Vogt Seite 50 von 89

51 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-iso 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-iso Unterstützung für das iso 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) Michael Vogt Seite 51 von 89

52 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. 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: 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 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 Michael Vogt Seite 52 von 89

53 Serielle Ausgabe während des Flash-update Prozesses: Device eth0: hwaddr F3-85-6A-9D, ipaddr , mask gateway not set, nameserver not set Failed.: Timeout occured Reading :: TFTP Server. Failed.: Timeout occured Reading :: TFTP Server. TFTP_BLKLEN!! Done bytes read Download of 0x1c1000 bytes completed Write kernel and filesystem binary to FLASH (0xbfc40000) flash device 'flash1.trx' parseflag = 0, the copysize is 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 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 Michael Vogt Seite 53 von 89

54 Basis Konfiguration Ist OpenWRT als Firmware installiert, muss zuerst die Grundkonfiguration erstellt werden. Dazu verbindet man sich via Telnet auf die IP und setzt das Root Passwort: === IMPORTANT ============================ Use 'passwd' to set your login password this will disable telnet and enable SSH BusyBox v1.8.2 ( :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! 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): 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 WinSCP 43 aufgebaut, werden diverse Fehlermeldungen über fehlende Files angezeigt. Diese Fehler können ignoriert werden und stören die Funktion nicht. 43 Michael Vogt Seite 54 von 89

55 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_ 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_ brcm47xx-1_mipsel.ipk 18. kmod-input-evdev_ brcm47xx-1_mipsel.ipk 19. kmod-hid_ 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_ _mipsel.ipk 26. libexpat_ _mipsel.ipk 27. dbus_ _mipsel.ipk 28. bluez-utils* 29. libncurses_5.6-1_mipsel.ipk 30. alsa-lib_ _mipsel.ipk 31. alsa-utils* 32. cmdpad * 33. libflac_ _mipsel.ipk 34. zlib_ _mipsel.ipk 35. libid3tag_0.15.1b-1_mipsel.ipk 36. libmad_0.15.1b-1_mipsel.ipk 37. libvorbisidec_1.0.2\+svn _mipsel.ipk 38. libiconv_ _mipsel.ipk 39. mpd* 40. mpc* 41. libusb_ _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_ _mipsel.ipk 48. scmpc* 49. glib1_ _mipsel.ipk 50. libstdcpp_ _mipsel.ipk 51. bemusedlinuxserver* Michael Vogt Seite 55 von 89

56 Konfiguration Netzwerk Per Default ist das Netzwerk folgendermassen konfiguriert: ifconfig br-lan Link encap:ethernet HWaddr 00:18:F3:85:6A:9D inet addr: Bcast: Mask: 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 Umkonfigurieren auf DHCP: vi /etc/config/network #### LAN configuration ALT config interface lan option type bridge option ifname "eth0.0" option proto static option ipaddr option netmask #### LAN configuration NEU config interface lan option type bridge option ifname "eth0.0" option proto dhcp Nach einem Reboot sieht die Netzwerkkonfiguration folgendermassen aus: ifconfig br-lan Link encap:ethernet HWaddr 00:18:F3:85:6A:9D inet addr: Bcast: Mask: 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. Michael Vogt Seite 56 von 89

57 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 audio_output { type name device format } "/tmp/mpd.pid" "oss" "My OSS Device" "/dev/dsp" # optional "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: /etc/init.d/mpd enable Michael Vogt Seite 57 von 89

58 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 ', mpd::artist()). '/'. iconv('utf-8', 'ISO ', 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 } Michael Vogt Seite 58 von 89

59 # # 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 Bitmap { Row1 '...*' Row2 '...**' Row3 '..***' Row4 '*****' Row5 '*****' Row6 '..***' Row7 '...**' Row8 '...*' } } Michael Vogt Seite 59 von 89

60 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 #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: /etc/init.d/lcd4linux enable Schematisch ist das Display folgendermassen eingeteilt: Abbildung 23: LCD4Linux Konfiguration Michael Vogt Seite 60 von 89

61 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 Michael Vogt Seite 61 von 89

62 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. Michael Vogt Seite 62 von 89

63 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 # 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: # 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, 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 = nubreaks.mp3 = RauteMusik.mp3 = punkbeans.mp3 = UkBassRadio.mp3 = DigitallyImportetDB.mp3 = GrooveSaladAmbient.mp3 = LoungeRadio.mp3 = RadioRABE.mp3 = RadioBE1.mp3 = Aktivieren des Bemused Daemons: /etc/init.d/bemused enable Michael Vogt Seite 63 von 89

64 Konfiguration OpenNTP Bevor mit der Konfiguration von OpenNTP begonnen werden kann, muss zuerst die Zeitzone festgelegt werden: echo GMT-1 > /etc/tz Die Zeitserver werden in der Konfiguration /etc/ntpd.conf definiert. Nun kann der NTP Client aktiviert werden: /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 Michael Vogt Seite 64 von 89

65 SSH GATEWAY Konfiguration Firmware Starten der OpenWrt Firmware Konfiguration 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. Michael Vogt Seite 65 von 89

66 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 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 iso 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. make V=99 Ist der Build Prozess erfolgreich beendet, liegen im./bin/mips Verzeichnis die kompilierten Image Files und die ausgewählten Packages. Michael Vogt Seite 66 von 89

67 Update Firmware Nun muss die Firmware auf das Embedded Device kopiert werden. La Fonera verwendet Redboot 44 als Bootloader. Auf dem Mainboard des La Fonera ist ein TTL Serial Port vorhanden. TTL bedeutet Transistor Transistor Logic und hat einen Spannungsbereich von V. Ein Standard Serial Port hingegen hat einen Spannungsbereich von V. 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: / , Gateway: Default server: RedBoot(tm) bootstrap and debug environment [ROMRAM] Non-certified release, version v built 16:57:58, Aug Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc. Board: ap51 RAM: 0x x , [0x x80fe1000] available FLASH: 0xa xa87f0000, 128 blocks of 0x bytes each. == Executing boot script in seconds - enter ^C to abort ^C 44 Redboot Dokumentation: Michael Vogt Seite 67 von 89

68 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 0xA xA x x vmlinux.bin.l7 0xA x x000B0000 0x rootfs 0xA80E0000 0x x x FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x RedBoot config 0xA87EF000 0xA87EF000 0x x 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-0x at 0xa87e0000:. RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot 0xA xA x x FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x RedBoot config 0xA87EF000 0xA87EF000 0x x 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: Local IP address: Local IP address mask: Default server IP address: 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 Server 45. Der TFTP Server muss noch konfiguriert werden, damit die Files openwrt-atheros-vmlinux.lzma und openwrt-atherosroot.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 0x x800f07ff, assumed entry at 0x RedBoot> fis create -e 0x r 0x vmlinux.bin.l7... Erase from 0xa xa80e0000: Program from 0x x800f0800 at 0xa : Erase from 0xa87e0000-0xa87f0000:.... Program from 0x80ff0000-0x 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: Michael Vogt Seite 68 von 89

69 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 0xA80E xA87E0000 RedBoot> RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-root.squashfs Using default protocol (TFTP) Raw file loaded 0x x802407ff, assumed entry at 0x RedBoot> fis create -l 0x rootfs... Erase from 0xa80e0000-0xa87e0000: Program from 0x x at 0xa80e0000: Erase from 0xa87e0000-0xa87f0000:.... Program from 0x80ff0000-0x at 0xa87e0000:. Nun läuft La Fonera mit OpenWrt und kann konfiguriert werden. Michael Vogt Seite 69 von 89

70 Konfiguration Per Default hat ein OpenWrt Device die Standart IP Adresse von 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 ( :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! 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 WinSCP 46 um die Packages ins /tmp Verzeichnis zu kopieren. ls *.ipk -al -rw-r--r-- 1 root root Feb httptunnel_3.3-1_mips.ipk -rw-r--r-- 1 root root 3762 Feb kmod-nls-base_ atheros-1_mips.ipk -rw-r--r-- 1 root root 2895 Feb kmod-nls-cp1250_ atheros-1_mips.ipk -rw-r--r-- 1 root root 2978 Feb kmod-nls-cp437_ atheros-1_mips.ipk -rw-r--r-- 1 root root 2927 Feb kmod-nls-cp850_ atheros-1_mips.ipk -rw-r--r-- 1 root root 2955 Feb kmod-proc-gpio_ atheros-1_mips.ipk -rw-r--r-- 1 root root Feb libpcap_ _mips.ipk -rw-r--r-- 1 root root Feb libpthread_ _mips.ipk -rw-r--r-- 1 root root 8870 Feb hostapd-utils_ _mips.ipk -rw-r--r-- 1 root root Feb hostapd_ _mips.ipk -rw-r--r-- 1 root root Feb openntpd_3.9p1-2_mips.ipk -rw-r--r-- 1 root root Feb ptunnel_0.61-1_mips.ipk -rw-r--r-- 1 root root 5428 Feb updatedd-mod-noip_2.6-5_mips.ipk -rw-r--r-- 1 root root 5667 Feb updatedd_2.6-5_mips.ipk 46 WinSCP: TODO Michael Vogt Seite 70 von 89

71 Diese Packages können mittels ipkg install xxx.ipk installiert werden. ipkg install lib*.ipk Installing libpcap ( ) to root... Installing libpthread ( ) to root... Configuring libpcap Configuring libpthread Done. ipkg install kmod*.ipk Installing kmod-nls-base ( atheros-1) to root... Installing kmod-nls-cp1250 ( atheros-1) to root... Installing kmod-nls-cp437 ( atheros-1) to root... Installing kmod-nls-cp850 ( atheros-1) to root... Installing kmod-proc-gpio ( 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. ipkg install httptunnel_3.3-1_mips.ipk Installing httptunnel (3.3-1) to root... Configuring httptunnel ^[[A^[Done. ipkg install pt*.ipk Installing ptunnel (0.61-1) to root... Configuring ptunnel Done. 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. 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. ipkg install hos*.ipk Installing hostapd-utils ( ) to root... Installing hostapd ( _-1) to root... Configuring hostapd Configuring hostapd-utils Done. Michael Vogt Seite 71 von 89

72 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 option netmask config interface lan option ifname eth0 option type bridge option proto static option ipaddr option netmask Konfiguration als DHCP Client: # Copyright (C) 2006 OpenWrt.org config interface loopback option ifname lo option proto static option ipaddr option netmask 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. Michael Vogt Seite 72 von 89

73 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 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: uci show httptunnel httptunnel.cfg02c9f9=httptunnel httptunnel.cfg02c9f9.destination=localhost:443 httptunnel.cfg02c9f9.sourceport=80 uci show ptunnel ptunnel.cfg029998=ptunnel ptunnel.cfg interface=br-lan Damit diese Services nach einem Neustart aktiv sind, werden sie aktiviert: /etc/init.d/httptunnel enable /etc/init.d/ptunnel enable Michael Vogt Seite 73 von 89

74 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. cat /etc/config/wifitoggler config wifitoggle option button 'reset' Wird nun eine Taste gedrückt, wird das folgende Script ausgeführt: 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 Michael Vogt Seite 74 von 89

75 Status Freier Disk und Speicherplatz nach der Installation (inkl. Applikationen): df -h Filesystem Size Used Available Use% Mounted on none 6.7M 204.0k 6.5M 3% /tmp tmpfs 512.0k k 0% /dev /dev/mtdblock3 5.2M 736.0k 4.5M 14% /jffs mini_fo:/jffs 1.8M 1.8M 0 100% / free total used free shared buffers Mem: Swap: Total: Michael Vogt Seite 75 von 89

76 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.fm 47, 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 Michael Vogt Seite 76 von 89

77 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 Michael Vogt Seite 77 von 89

78 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. Michael Vogt Seite 78 von 89

79 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 Michael Vogt Seite 79 von 89

80 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 b/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 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: y_(philips).pdf Michael Vogt Seite 80 von 89

81 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. DynDNS 48 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 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 TM6 Ja (GPL, BSD Lizenz) 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 Michael Vogt Seite 81 von 89

82 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 v ) Wireless Karte. Der AP und der Client haben keinen direkten Sichtkontakt, jedoch ist die Signalqualität laut Intel Wireless Tool Ausgezeichnet : Performance Test mit IPerf: Auf dem AP wird IPerf im Server Mode gestartet: iperf -s Abbildung 37: Verbindung mit dem AP Auf dem Windows Client wird IPerf im Client Mode gestartet C:\Program Files\iperf-2.0.2\bin>iperf -c d -t Server listening on TCP port 5001 TCP window size: 8.00 KByte (default) Client connecting to , TCP port 5001 TCP window size: 63.0 KByte (default) [ 4] local port 3849 connected with port 5001 [ 4] sec 224 MBytes 10.4 Mbits/sec [ 4] local port 5001 connected with port Ausgabe auf dem AP: Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) [ 4] local port 5001 connected with port 3842 iperf -s Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) [ 4] local port 5001 connected with port 3849 [ 4] sec 224 MBytes 10.4 Mbits/sec Michael Vogt Seite 82 von 89

83 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: PID PPID USER STAT VSZ %MEM %CPU COMMAND root R % 95% iperf -s root R % 1% top root S % 1% sshd: root S % 0% sshd: Auf 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. Michael Vogt Seite 83 von 89

Chaostreff Augsburg, 29.11.2012. Manuel Munz

Chaostreff Augsburg, 29.11.2012. Manuel Munz Chaostreff Augsburg, 29.11.2012 Manuel Munz soma@augsburg.freifunk.net Manuel Munz, augsburg.freifunk.net C3A 29.11.2012 1 Übersicht Was ist OpenWrt? OpenWrt benutzen Hacking OpenWrt Manuel Munz, augsburg.freifunk.net

Mehr

p^db=`oj===pìééçêíáåñçêã~íáçå=

p^db=`oj===pìééçêíáåñçêã~íáçå= p^db=`oj===pìééçêíáåñçêã~íáçå= Error: "Could not connect to the SQL Server Instance" or "Failed to open a connection to the database." When you attempt to launch ACT! by Sage or ACT by Sage Premium for

Mehr

Hier folgt eine kurze Aufstellung über die verwendete Architekur. Die Angaben sind ohne Gewähr für Vollständigkeit oder vollständige Richtigkeit.

Hier folgt eine kurze Aufstellung über die verwendete Architekur. Die Angaben sind ohne Gewähr für Vollständigkeit oder vollständige Richtigkeit. 1. ODBC 1.1 Problemstellung Die Informationen über die Microsoft SQL Server Datenbanken sind zur Zeit nicht auf der TIMD Website verfügbar. Der Grund ist, dass kein Interface zur Abfrage der benötigten

Mehr

1. Vorbereiten das Host, folgende Software Pakete müssen installiert werden: gnome-devel bison flex texinfo libncurses5-dev git codeblocks putty

1. Vorbereiten das Host, folgende Software Pakete müssen installiert werden: gnome-devel bison flex texinfo libncurses5-dev git codeblocks putty 1. Vorbereiten das Host, folgende Software Pakete müssen installiert werden: gnome-devel bison flex texinfo libncurses5-dev git codeblocks putty 2. Buildroot installieren Buildroot (www.buildroot.org)

Mehr

Effizienz im Vor-Ort-Service

Effizienz im Vor-Ort-Service Installation: Anleitung SatWork Integrierte Auftragsabwicklung & -Disposition Februar 2012 Disposition & Auftragsabwicklung Effizienz im Vor-Ort-Service Disclaimer Vertraulichkeit Der Inhalt dieses Dokuments

Mehr

lome6 (Lights-Out-Management-Ether6) by warhog 2011

lome6 (Lights-Out-Management-Ether6) by warhog <warhog@gmx.de> 2011 lome6 (Lights-Out-Management-Ether6) by warhog 2011 Inhaltsverzeichnis 1 GPL...2 2 Einleitung...3 3 Funktionen...3 4 Erster Prototyp...4 5 Hardware...4 6 Software...5 6.1 Ethersex...5 6.2

Mehr

Enigma2 Plugin Entwicklung mit Eclipse

Enigma2 Plugin Entwicklung mit Eclipse Enigma2 Plugin Entwicklung mit Eclipse Enigma2 Plugin Entwicklung mit Eclipse 1/15 Inhaltsverzeichnis 1 ÜBER... 3 2 INSTALLATION... 4 2.1 INSTALLATION VON ECLIPSE... 4 2.2 INSTALLATION VON PYDEV... 4 3

Mehr

Anleitung zur Schnellinstallation TFM-560X YO.13

Anleitung zur Schnellinstallation TFM-560X YO.13 Anleitung zur Schnellinstallation TFM-560X YO.13 Table of Contents Deutsch 1 1. Bevor Sie anfangen 1 2. Installation 2 Troubleshooting 6 Version 06.08.2011 1. Bevor Sie anfangen Packungsinhalt ŸTFM-560X

Mehr

Programmierung eines GIMP-Plugin

Programmierung eines GIMP-Plugin Programmierung eines GIMP-Plugin Was ist GIMP? GNU Image Manipulation Program Bildbearbeitungssoftware Bildkonvertierer Open Source Erweiterbar durch Plugins Mögliche Programmiersprachen für Plugin-Entwicklung

Mehr

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Das Beispiel orientiert sich am selben Code, der im Teil 1 der Serie verwendet wurde. Text Styles: Shell Prompt mit

Mehr

Smartphone Entwicklung mit Android und Java

Smartphone Entwicklung mit Android und Java Smartphone Entwicklung mit Android und Java predic8 GmbH Moltkestr. 40 53173 Bonn Tel: (0228)5552576-0 www.predic8.de info@predic8.de Was ist Android Offene Plattform für mobile Geräte Software Kompletter

Mehr

Firmware. Dokument-Version 1

Firmware. Dokument-Version 1 Fortinet TFTP Prozess Datum 02/12/2011 11:01:00 Hersteller Modell Type(n) Fortinet Fortigate Firmware Copyright Autor Boll Engineering AG, Wettingen mp Dokument-Version 1 Fortinet TFTP Prozess Dieser Artikel

Mehr

Architektur-übergreifende Firmware-Entwicklung für eingebettete Systeme

Architektur-übergreifende Firmware-Entwicklung für eingebettete Systeme Architektur-übergreifende Firmware-Entwicklung für eingebettete Systeme Florian Frank 31.03.2010 Zusammenfassung 1 INHALTSVERZEICHNIS INHALTSVERZEICHNIS Inhaltsverzeichnis I Einleitung 4 II Bestandsaufnahme

Mehr

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme Grundkurs C++ Buildsysteme Buildsysteme Beispielhaftes Übersetzungsszenario: Verzeichnis tutorial7/ main.cpp, lcdrange.cpp, lcdrange.h *.cpp Kompilieren *.o *.h Grundkurs C++ 2 Headerdateien //blackbox.h

Mehr

Michael Vogt Seite 1 von 15

Michael Vogt Seite 1 von 15 Michael Vogt Seite 1 von 15 Michael Vogt Seite 2 von 15 INHALTSVERZEICHNIS Inhaltsverzeichnis...3 Einleitung...4 Vorbedingungen...5 Benötigte Hardware...5 Hardware zusammenstellen...6 Benötigte Software...6

Mehr

German English Firmware translation for T-Sinus 154 Access Point

German English Firmware translation for T-Sinus 154 Access Point German English Firmware translation for T-Sinus 154 Access Point Konfigurationsprogramm Configuration program (english translation italic type) Dieses Programm ermöglicht Ihnen Einstellungen in Ihrem Wireless

Mehr

Bisherige Erfahrungen mit Eclipse auf NonStop. programmer retire? Hans-Fried Kirschbaum CommitWork GmbH 12/22/2010 1

Bisherige Erfahrungen mit Eclipse auf NonStop. programmer retire? Hans-Fried Kirschbaum CommitWork GmbH 12/22/2010 1 Bisherige Erfahrungen mit Eclipse auf NonStop programmer retire? Hans-Fried Kirschbaum CommitWork GmbH 12/22/2010 1 agenda what is Eclipse? a look at NSDEE a look at CDS 12/22/2010 2 what is Eclipse? 12/22/2010

Mehr

Software development with continuous integration

Software development with continuous integration Software development with continuous integration (FESG/MPIfR) ettl@fs.wettzell.de (FESG) neidhardt@fs.wettzell.de 1 A critical view on scientific software Tendency to become complex and unstructured Highly

Mehr

BLK-2000. Quick Installation Guide. English. Deutsch

BLK-2000. Quick Installation Guide. English. Deutsch BLK-2000 Quick Installation Guide English Deutsch This guide covers only the most common situations. All detail information is described in the user s manual. English BLK-2000 Quick Installation Guide

Mehr

BNG Bootloader Documentation

BNG Bootloader Documentation BNG Bootloader Documentation Release 0.2 Elias Medawar, Yves Peissard, Simon Honegger, Jonathan Stoppani 20. 04. 2010 Inhaltsverzeichnis 1 Abstract 1 2 Architektur 3 2.1 Überblick.................................................

Mehr

ReadMe zur Installation der BRICKware for Windows, Version 6.1.2. ReadMe on Installing BRICKware for Windows, Version 6.1.2

ReadMe zur Installation der BRICKware for Windows, Version 6.1.2. ReadMe on Installing BRICKware for Windows, Version 6.1.2 ReadMe zur Installation der BRICKware for Windows, Version 6.1.2 Seiten 2-4 ReadMe on Installing BRICKware for Windows, Version 6.1.2 Pages 5/6 BRICKware for Windows ReadMe 1 1 BRICKware for Windows, Version

Mehr

Load balancing Router with / mit DMZ

Load balancing Router with / mit DMZ ALL7000 Load balancing Router with / mit DMZ Deutsch Seite 3 English Page 10 ALL7000 Quick Installation Guide / Express Setup ALL7000 Quick Installation Guide / Express Setup - 2 - Hardware Beschreibung

Mehr

Linutronix - Wir verbinden Welten. Open Source Software in der Industrie. Firmenvorstellung

Linutronix - Wir verbinden Welten. Open Source Software in der Industrie. Firmenvorstellung Linutronix - Wir verbinden Welten Open Source Software in der Industrie Firmenvorstellung Firma Gegründet 1996 von Thomas Gleixner 2006 Umwandlung in GmbH Maintainer von: X86 Architektur RT-Preempt UIO

Mehr

VPN Client installieren und starten

VPN Client installieren und starten Netzzugang VPN steht für Virtual Private Network und ist für all diejenigen gedacht, die mit ihren Rechnern über einen beliebigen Internet-Zugang von ausserhalb auf spezielle Dienste der Universität Bielefeld

Mehr

English. Deutsch. niwis consulting gmbh (https://www.niwis.com), manual NSEPEM Version 1.0

English. Deutsch. niwis consulting gmbh (https://www.niwis.com), manual NSEPEM Version 1.0 English Deutsch English After a configuration change in the windows registry, you have to restart the service. Requirements: Windows XP, Windows 7, SEP 12.1x With the default settings an event is triggered

Mehr

Installations-Dokumentation, YALG Team

Installations-Dokumentation, YALG Team Installations-Dokumentation, YALG Team Version 8.1 1 Benötigtes Material 2 Vor der Installation 3 Beginn 4 Installation 4.1 Sicherheit 4.2 Partitionierung 4.3 Paketauswahl 4.4 Paketauswahl (fein) 5 Konfiguration

Mehr

Subversion. Einstieg in die. Versionskontrolle

Subversion. Einstieg in die. Versionskontrolle Versionskontrolle mit Subversion Einstieg in die Versionskontrolle Dipl.Ing.(FH) K. H. Marbaise Agenda Wozu Versionskontrolle? Was leistet Versionskontrolle? Historie zu Subversion Projekt Handling Installation

Mehr

NetDot und RANCID. Jens Link. NetDot und RANCID. jl@jenslink.net. Jens Link (jl@jenslink.net) NetDot 1 / 25

NetDot und RANCID. Jens Link. NetDot und RANCID. jl@jenslink.net. Jens Link (jl@jenslink.net) NetDot 1 / 25 NetDot und RANCID Jens Link jl@jenslink.net NetDot und RANCID Jens Link (jl@jenslink.net) NetDot 1 / 25 Übersicht 1 Dokumentation 2 netdot 3 Rancid Jens Link (jl@jenslink.net) NetDot 2 / 25 Wer bin ich?

Mehr

http://www.stud.uni-potsdam.de/~hoeffi/gdb.html#wozu

http://www.stud.uni-potsdam.de/~hoeffi/gdb.html#wozu gdb: debugging code In der Vorlesung hatte ich Teile von http://www.stud.uni-potsdam.de/~hoeffi/gdb.html#wozu und ein eigenes Beispiel diskutiert. Ein Debugger soll helfen Fehler im Programm, die sich

Mehr

Installationsanleitung Tivoli Storage Manager für Linux

Installationsanleitung Tivoli Storage Manager für Linux 11. März 2009, Version 1.0 Installationsanleitung für Linux Verwaltungsdirektion Informatikdienste Installationsanleitung für Linux Inhaltsverzeichnis...1 Installation... 1 Voraussetzungen...1 Ablauf der

Mehr

Security. Stefan Dahler. 6. Zone Defense. 6.1 Einleitung

Security. Stefan Dahler. 6. Zone Defense. 6.1 Einleitung 6. Zone Defense 6.1 Einleitung Im Folgenden wird die Konfiguration von Zone Defense gezeigt. Sie verwenden einen Rechner für die Administration, den anderen für Ihre Tests. In der Firewall können Sie entweder

Mehr

Switching. Übung 2 System Management. 2.1 Szenario

Switching. Übung 2 System Management. 2.1 Szenario Übung 2 System Management 2.1 Szenario In der folgenden Übung werden Sie Ihre Konfiguration sichern, löschen und wieder herstellen. Den Switch werden Sie auf die neueste Firmware updaten und die Funktion

Mehr

TimeMachine. Installation und Konfiguration. Version 1.4. Stand 21.11.2013. Dokument: install.odt. Berger EDV Service Tulbeckstr.

TimeMachine. Installation und Konfiguration. Version 1.4. Stand 21.11.2013. Dokument: install.odt. Berger EDV Service Tulbeckstr. Installation und Konfiguration Version 1.4 Stand 21.11.2013 TimeMachine Dokument: install.odt Berger EDV Service Tulbeckstr. 33 80339 München Fon +49 89 13945642 Mail rb@bergertime.de Versionsangaben Autor

Mehr

Installation mit Lizenz-Server verbinden

Installation mit Lizenz-Server verbinden Einsteiger Fortgeschrittene Profis markus.meinl@m-quest.ch Version 1.0 Voraussetzungen für diesen Workshop 1. Die M-Quest Suite 2005-M oder höher ist auf diesem Rechner installiert 2. Der M-Lock 2005 Lizenzserver

Mehr

Connecting Android. Externe Hardware mit dem grünen Roboter verbinden. Alexander Dahmen Dominik Helleberg

Connecting Android. Externe Hardware mit dem grünen Roboter verbinden. Alexander Dahmen Dominik Helleberg Connecting Android Externe Hardware mit dem grünen Roboter verbinden Alexander Dahmen Dominik Helleberg Speaker Dominik Helleberg Mobile Development Android / Embedded Tools http://dominik-helleberg.de/+

Mehr

an Hand eines Beispiels Konsole

an Hand eines Beispiels Konsole Versionskontrolle an Hand eines Beispiels Konsole 1 / 14 PAUL SCHEREMET Inhaltsverzeichnis Einleitung 3 Das Repository anlegen (init) 4 Das erste Modul importieren (import) 5 Module auschecken (checkout

Mehr

Exercise (Part XI) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1

Exercise (Part XI) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1 Exercise (Part XI) Notes: The exercise is based on Microsoft Dynamics CRM Online. For all screenshots: Copyright Microsoft Corporation. The sign ## is you personal number to be used in all exercises. All

Mehr

USB Treiber updaten unter Windows 7/Vista

USB Treiber updaten unter Windows 7/Vista USB Treiber updaten unter Windows 7/Vista Hinweis: Für den Downloader ist momentan keine 64 Bit Version erhältlich. Der Downloader ist nur kompatibel mit 32 Bit Versionen von Windows 7/Vista. Für den Einsatz

Mehr

Pimp my WRT54 Linux Router Linksys ist unser Freund ;-)

Pimp my WRT54 Linux Router Linksys ist unser Freund ;-) Pimp my WRT54 Linux Router Linksys ist unser Freund ;-) Unix Friends and User Group Furtwangen 02.06.2005 Inhalt 1. Was sind das für Geräte? 2. Was kann der DAU damit machen? 3. Was können wir damit machen?

Mehr

KURZANLEITUNG. Firmware-Upgrade: Wie geht das eigentlich?

KURZANLEITUNG. Firmware-Upgrade: Wie geht das eigentlich? KURZANLEITUNG Firmware-Upgrade: Wie geht das eigentlich? Die Firmware ist eine Software, die auf der IP-Kamera installiert ist und alle Funktionen des Gerätes steuert. Nach dem Firmware-Update stehen Ihnen

Mehr

Anleitung zur Schnellinstallation TE100-P1U

Anleitung zur Schnellinstallation TE100-P1U Anleitung zur Schnellinstallation TE100-P1U V2 Table of Contents Deutsch 1 1. Bevor Sie anfangen 1 2. Installation 2 3. Konfiguration des Druckservers 3 4. Hinzufügen des Druckers zu Ihren PC-Einstellungen

Mehr

1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse

1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse 1. Einführung 1.1 Eclipse Die Eclipse ist eine kostenlose integrierte Entwicklungsumgebung oder auch IDE genannt, (Abkürzung IDE, engl. Integrated development enviroment). Sie ist eine grafische Benutzeroberfläche

Mehr

WRT als Plattform für anderes

WRT als Plattform für anderes 14. Mai 2009 Übersicht 1 Einstieg 2 Ideen 3 Basis 4 Beispiel 5 Abschluß Übersicht 1 Einstieg 2 Ideen 3 Basis 4 Beispiel 5 Abschluß Übersicht 1 Einstieg 2 Ideen 3 Basis 4 Beispiel 5 Abschluß Übersicht 1

Mehr

Zur Konfiguration wird hierbei die GUI und parallel die Shell verwendet.

Zur Konfiguration wird hierbei die GUI und parallel die Shell verwendet. 1. Konfigurations- und Update-Management 1.1 Einleitung Im Folgenden werden unterschiedliche Möglichkeiten vorgestellt, wie Sie die Konfigurationen im Bintec Router handhaben. Erläutert wird das Speichern,

Mehr

Programmentwicklung ohne BlueJ

Programmentwicklung ohne BlueJ Objektorientierte Programmierung in - Eine praxisnahe Einführung mit Bluej Programmentwicklung BlueJ 1.0 Ein BlueJ-Projekt Ein BlueJ-Projekt ist der Inhalt eines Verzeichnisses. das Projektname heißt wie

Mehr

Cross Compiler. Entwickeln von Windows Anwendungen unter Linux (und mehr) Wolfgang Dautermann. Chemnitzer Linuxtage 2011 FH JOANNEUM

Cross Compiler. Entwickeln von Windows Anwendungen unter Linux (und mehr) Wolfgang Dautermann. Chemnitzer Linuxtage 2011 FH JOANNEUM Cross Compiler Entwickeln von Windows Anwendungen unter Linux (und mehr) Wolfgang Dautermann FH JOANNEUM Chemnitzer Linuxtage 2011 1 Einleitung 2 Einsatzzwecke 3 Installation des Crosscompilers 4...und

Mehr

Apps-Entwicklung mit Netbeans

Apps-Entwicklung mit Netbeans JDroid mit Netbeans Seite 1 Apps-Entwicklung mit Netbeans Version 2.2, 30. April 2013 Vorbereitungen: 1. JDK SE neuste Version installieren, (http://www.oracle.com/technetwork/java/javase/downloads/index.html)

Mehr

FOR ENGLISCH VERSION PLEASE SCROLL FORWARD SOME PAGES. THANK YOU!

FOR ENGLISCH VERSION PLEASE SCROLL FORWARD SOME PAGES. THANK YOU! FOR ENGLISCH VERSION PLEASE SCROLL FORWARD SOME PAGES. THANK YOU! HELPLINE GAMMA-SCOUT ODER : WIE BEKOMME ICH MEIN GERÄT ZUM LAUFEN? Sie haben sich für ein Strahlungsmessgerät mit PC-Anschluss entschieden.

Mehr

DENON DJ Music Manager

DENON DJ Music Manager DENON DJ Music Manager Der DENON DJ Music Manager verfügt über folgende Funktionen Datenbanken erstellen und aktualisieren Wiedergabe Dateiattribute ändern Dateisuche Wiedergabelisten erstellen und aktualisieren

Mehr

NetDot und RANCID. Jens Link. NetDot und RANCID. jl@jenslink.net. Jens Link (jl@jenslink.net) IPv6 1 / 24

NetDot und RANCID. Jens Link. NetDot und RANCID. jl@jenslink.net. Jens Link (jl@jenslink.net) IPv6 1 / 24 NetDot und RANCID Jens Link jl@jenslink.net NetDot und RANCID Jens Link (jl@jenslink.net) IPv6 1 / 24 Übersicht 1 Dokumentation 2 netdot 3 Rancid Jens Link (jl@jenslink.net) IPv6 2 / 24 Wer bin ich? Freiberuflicher

Mehr

Von SVN zu Git. Daniel Willmann 2011-10-18 cbna

Von SVN zu Git. Daniel Willmann <daniel@totalueberwachung.de> 2011-10-18 cbna Von SVN zu Git Daniel Willmann 2011-10-18 cbna Inhalt Einführung Git für SVN Benutzer Weitergehende Konzepte Zusammenfassung Daniel Willmann Von SVN zu Git 2 Über den Vortragenden

Mehr

MGE Datenanbindung in GeoMedia

MGE Datenanbindung in GeoMedia TIPPS & TRICKS MGE Datenanbindung in GeoMedia 10. September 2002 / AHU INTERGRAPH (Schweiz) AG Neumattstrasse 24, CH 8953 Dietikon Tel: 043 322 46 46 Fax: 043 322 46 10 HOTLINE: Telefon: 043 322 46 00

Mehr

11: Echtzeitbetriebssystem ucos-ii

11: Echtzeitbetriebssystem ucos-ii 11: Echtzeitbetriebssystem ucos-ii Sie lernen anhand aufeinander aufbauender Übungen, welche Möglichkeiten ein Echtzeitbetriebssystem wie das ucosii bietet und wie sich damit MC-Applikationen realisieren

Mehr

Frequently asked Questions for Kaercher Citrix (apps.kaercher.com)

Frequently asked Questions for Kaercher Citrix (apps.kaercher.com) Frequently asked Questions for Kaercher Citrix (apps.kaercher.com) Inhalt Content Citrix-Anmeldung Login to Citrix Was bedeutet PIN und Token (bei Anmeldungen aus dem Internet)? What does PIN and Token

Mehr

Virtualisierung fur Einsteiger

Virtualisierung fur Einsteiger Brochure More information from http://www.researchandmarkets.com/reports/3148674/ Virtualisierung fur Einsteiger Description: Virtualisierung von Grund auf verstehen Für die meisten Administratoren gehört

Mehr

Software Engineering I

Software Engineering I Software I Übungsblatt 1 + 2 Claas Pinkernell Technische Universität Braunschweig http://www.sse.cs.tu-bs.de/ Seite 2 Welche Werkzeuge? Programmiersprache Java Integrierte Entwicklungsumgebung Eclipse

Mehr

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: 1. Access Point im Personal Mode (WEP / WPA / WPA2) 1.1 Einleitung Im Folgenden wird die Konfiguration des Access Point Modus gezeigt. Zur Absicherung der Daten werden die verschiedenen Verschlüsselungsalgorithmen

Mehr

Embedded Linux gnublin Board Programmieren Sonstiges. Embedded Linux am Beispiel des Gnublin-Boards

Embedded Linux gnublin Board Programmieren Sonstiges. Embedded Linux am Beispiel des Gnublin-Boards Embedded Linux am Beispiel des Gnublin-Boards Was ist Embedded Linux? Wikipedia Als Embedded Linux bezeichnet man ein eingebettetes System mit einem auf dem Linux-Kernel basierenden Betriebssystem. In

Mehr

Webmin mit SSL Unterstützung

Webmin mit SSL Unterstützung Webmin mit SSL Unterstützung Installation Für die Installation werden benötigt: Net_SSLeay.pm-1.05.tar.gz webmin-0.80.tar.gz mögliche Zusatzmodule: backup_1.0.wbm ipchains-0.80.1.wbm nettools-0.79.1.wbm

Mehr

AVR-Programmierung unter Mac OSX

AVR-Programmierung unter Mac OSX AVR-Programmierung unter Mac OSX im Studiengang BEL3 Lehrveranstaltung Embedded Systems Tutorial ausgeführt von: Jürgen Hausladen A-2460 Bruck/Leitha, Obere Neugasse 6 Wien 01.02.2011 Inhaltsverzeichnis

Mehr

MySQL Queries on "Nmap Results"

MySQL Queries on Nmap Results MySQL Queries on "Nmap Results" SQL Abfragen auf Nmap Ergebnisse Ivan Bütler 31. August 2009 Wer den Portscanner "NMAP" häufig benutzt weiss, dass die Auswertung von grossen Scans mit vielen C- oder sogar

Mehr

GmbH, Stettiner Str. 38, D-33106 Paderborn

GmbH, Stettiner Str. 38, D-33106 Paderborn Serial Device Server Der Serial Device Server konvertiert die physikalische Schnittstelle Ethernet 10BaseT zu RS232C und das Protokoll TCP/IP zu dem seriellen V24-Protokoll. Damit können auf einfachste

Mehr

Die Hifidelio App Beschreibung

Die Hifidelio App Beschreibung Die Hifidelio App Beschreibung Copyright Hermstedt 2010 Version 1.0 Seite 1 Inhalt 1. Zusammenfassung 2. Die Umgebung für die Benutzung 3. Der erste Start 4. Die Ansicht Remote Control RC 5. Die Ansicht

Mehr

http://www.cis.upenn.edu/~bcpierce/unison/download/stable/unison- 2.9.1/

http://www.cis.upenn.edu/~bcpierce/unison/download/stable/unison- 2.9.1/ Einführung Was ist Unison? Unison ist ein Dateisynchronisationsprogramm für Windows und Unix. Es teilt sich viele Funktionen mit anderen Programmen, wie z.b. CVS und rsync. Folgend einige Vorteile des

Mehr

JOB SCHEDULER. Managed User Jobs. Dokumentation Juli 2005. MySQL-Job-Automation

JOB SCHEDULER. Managed User Jobs. Dokumentation Juli 2005. MySQL-Job-Automation MySQL-Job-Automation Managed User Jobs JOB SCHEDULER Dokumentation Juli 2005 Software- und Organisations-Service GmbH Giesebrechtstr. 15 D-10629 Berlin Telefon (030) 86 47 90-0 Telefax (030) 861 33 35

Mehr

Sicherer Remote Support über das Internet mit UltraVNC

Sicherer Remote Support über das Internet mit UltraVNC Sicherer Remote Support über das Internet mit UltraVNC Diese Dokumentation beschreibt die Lösung eines abgesicherten Zugriffs auf einen über das Internet erreichbaren Windows Systems unter Verwendung des

Mehr

1. General information... 2 2. Login... 2 3. Home... 3 4. Current applications... 3

1. General information... 2 2. Login... 2 3. Home... 3 4. Current applications... 3 User Manual for Marketing Authorisation and Lifecycle Management of Medicines Inhalt: User Manual for Marketing Authorisation and Lifecycle Management of Medicines... 1 1. General information... 2 2. Login...

Mehr

Titelbild1 ANSYS. Customer Portal LogIn

Titelbild1 ANSYS. Customer Portal LogIn Titelbild1 ANSYS Customer Portal LogIn 1 Neuanmeldung Neuanmeldung: Bitte Not yet a member anklicken Adressen-Check Adressdaten eintragen Customer No. ist hier bereits erforderlich HERE - Button Hier nochmal

Mehr

So bringst du Prolog zum Laufen...

So bringst du Prolog zum Laufen... Diese Anleitung soll dir dabei helfen den freien Prolog-Interpreter SWI-Prolog zu installieren einen geeigneten Texteditor auszuwählen, mit dem du Prolog-Programme schreiben kannst das erste kleine Programm

Mehr

VPN Tracker für Mac OS X

VPN Tracker für Mac OS X VPN Tracker für Mac OS X How-to: Kompatibilität mit DrayTek Vigor Routern Rev. 1.0 Copyright 2003 equinux USA Inc. Alle Rechte vorbehalten. 1. Einführung 1. Einführung Diese Anleitung beschreibt, wie eine

Mehr

SIS-Freetz. Was? Was noch? Stand Februar 2010. Steuerung der Gembird SIS-PMS Steckdosenleiste mit einer AVM FritzBox 7270

SIS-Freetz. Was? Was noch? Stand Februar 2010. Steuerung der Gembird SIS-PMS Steckdosenleiste mit einer AVM FritzBox 7270 SIS-Freetz Was? Stand Februar 2010 Steuerung der Gembird SIS-PMS Steckdosenleiste mit einer AVM FritzBox 7270 Was noch? Auf dem Rechner brauchen wir noch 7-Zip, PuTTy, und WinSCP. Warum? Die Anforderung

Mehr

Lizenz-Server einrichten

Lizenz-Server einrichten Einsteiger Fortgeschrittene Profis markus.meinl@m-quest.ch Version 1.0 Voraussetzungen für diesen Workshop 1. Die M-Quest Suite 2005-M oder höher ist auf diesem Rechner installiert 2. Das Produkt M-Lock

Mehr

Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2

Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2 Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2 1. Benötigte Software Zur Erstellung des Installers wird folgende Software benötigt. Es wird sich in dieser Dokumentation

Mehr

Renée Bäcker. Perl $foo Magazin

Renée Bäcker. Perl $foo Magazin Renée Bäcker Renée Bäcker Perl Renée Bäcker Perl $foo Magazin Renée Bäcker Perl $foo Magazin OTRS Renée Bäcker Perl $foo Magazin OTRS u.v.m Früher... Am Anfang steht der Kunde... dann kommt der Auftrag

Mehr

Algorithms for graph visualization

Algorithms for graph visualization Algorithms for graph visualization Project - Orthogonal Grid Layout with Small Area W INTER SEMESTER 2013/2014 Martin No llenburg KIT Universita t des Landes Baden-Wu rttemberg und nationales Forschungszentrum

Mehr

OpenVMS und OpenSource Ein Widerspruch? peter ranisch openvms@ranisch.at

OpenVMS und OpenSource Ein Widerspruch? peter ranisch openvms@ranisch.at OpenVMS und OpenSource Ein Widerspruch? peter ranisch openvms@ranisch.at Perens' principles Under Perens' definition, open source describes a broad general type of software license that makes source code

Mehr

Dies ist ein Auszug aus dem Buch Netzwerksicherheit Hacks, ISBN 978-3-89721-496-5. Melden Sie sich http://www.oreilly.de/catalog/netsechacks2ger/

Dies ist ein Auszug aus dem Buch Netzwerksicherheit Hacks, ISBN 978-3-89721-496-5. Melden Sie sich http://www.oreilly.de/catalog/netsechacks2ger/ Verwandeln Sie Ihre herkömmlichen Drahtlos-Router #76 HACK #76 Verwandeln Sie Ihre herkömmlichen Drahtlos-Router in eine ausgeklügelte Sicherheitsplattform Hack Rüsten Sie den Drahtlos-Router in Ihrem

Mehr

Das Build Tool Ant. Sebastian Mancke, mancke@mancke-software.de

Das Build Tool Ant. Sebastian Mancke, mancke@mancke-software.de Das Build Tool Ant Sebastian Mancke, mancke@mancke-software.de Grundlagen Motivation Bei der Übersetzung und Pflege von Software treten viele, gleich bleibende Arbeitsschritte auf. Übersetzen des Codes

Mehr

Aufbau einer Testumgebung mit VMware Server

Aufbau einer Testumgebung mit VMware Server Aufbau einer Testumgebung mit VMware Server 1. Download des kostenlosen VMware Servers / Registrierung... 2 2. Installation der Software... 2 2.1 VMware Server Windows client package... 3 3. Einrichten

Mehr

docker.io @ CentOS 7 Secure And Portable Containers Made Easy Jürgen Brunk Köln, 04.08.2014

docker.io @ CentOS 7 Secure And Portable Containers Made Easy Jürgen Brunk Köln, 04.08.2014 docker.io @ CentOS 7 Secure And Portable Containers Made Easy Jürgen Brunk Köln, 04.08.2014 Agenda 1. Was ist Docker? 2. Was sind Container? 3. Warum Docker? 4. Architektur 5. Praxis 6. Docker unter CentOS

Mehr

JDroidLib mit Eclipse (Mac/Linux/Windows)

JDroidLib mit Eclipse (Mac/Linux/Windows) JDroidLib mit Eclipse (Mac/Linux/Windows) Version 1.3, 25. März 2013 (Unter Windows besser die ADT-Bundle Version installieren, siehe entsprechende Anleitung) Vorbereitungen: 1. JDK SE neuste Version installieren,

Mehr

Software-Engineering Grundlagen des Software-Engineering 7.3 Sourcecode-Verwaltung mit Versionsmanagement-Systemen Einführung in Subversion (SVN)

Software-Engineering Grundlagen des Software-Engineering 7.3 Sourcecode-Verwaltung mit Versionsmanagement-Systemen Einführung in Subversion (SVN) Software-Engineering Grundlagen des Software-Engineering 7.3 Sourcecode-Verwaltung mit Versionsmanagement-Systemen Einführung in Subversion (SVN) Prof. Dr. Rolf Dornberger Software-Engineering: 7.3 Versionsmanagement-Systeme

Mehr

Workbooster File Exchanger Command Line Tool

Workbooster File Exchanger Command Line Tool Thema Technische Benutzerdokumentation - WBFileExchanger Workbooster File Exchanger Command Line Tool Letzte Anpassung 18. Januar 2014 Status / Version Finale Version - V 1.1 Summary Erstellung Diese technische

Mehr

Ingenics Project Portal

Ingenics Project Portal Version: 00; Status: E Seite: 1/6 This document is drawn to show the functions of the project portal developed by Ingenics AG. To use the portal enter the following URL in your Browser: https://projectportal.ingenics.de

Mehr

Compass E-Lab Remote Security Lab 19. November 2008. Hacking-Lab Glärnischstrasse 7 Postfach 1671 CH-8640 Rapperswil

Compass E-Lab Remote Security Lab 19. November 2008. Hacking-Lab Glärnischstrasse 7 Postfach 1671 CH-8640 Rapperswil Hacking-Lab Glärnischstrasse 7 Postfach 1671 CH-8640 Rapperswil T +41 55 214 41 60 F +41 55 214 41 61 root@hacking-lab.com Compass E-Lab Remote Security Lab 19. November 2008 Name des Dokumentes: DE_Hacking_Lab_V3.2.doc

Mehr

CDE-13xBT & CDE-W235BT & CDA-137BTi

CDE-13xBT & CDE-W235BT & CDA-137BTi Bluetooth Software Update Manual mit Windows 7 Für Geräte aus dem Modelljahr 2012 CDE-13xBT & CDE-W235BT & CDA-137BTi 1 Einleitung In der Anleitung wird die Vorgehensweise zum aktualisieren der Radio Bluetooth

Mehr

Open Source. Legal Dos, Don ts and Maybes. openlaws Open Source Workshop 26 June 2015, Federal Chancellery Vienna

Open Source. Legal Dos, Don ts and Maybes. openlaws Open Source Workshop 26 June 2015, Federal Chancellery Vienna Open Source Legal Dos, Don ts and Maybes openlaws Open Source Workshop 26 June 2015, Federal Chancellery Vienna 1 2 3 A Case + vs cooperation since 2003 lawsuit initiated 2008 for violation of i.a. GPL

Mehr

FAQ - Häufig gestellte Fragen zur PC Software iks AQUASSOFT FAQ Frequently asked questions regarding the software iks AQUASSOFT

FAQ - Häufig gestellte Fragen zur PC Software iks AQUASSOFT FAQ Frequently asked questions regarding the software iks AQUASSOFT FAQ - Häufig gestellte Fragen zur PC Software iks AQUASSOFT FAQ Frequently asked questions regarding the software iks AQUASSOFT Mit welchen Versionen des iks Computers funktioniert AQUASSOFT? An Hand der

Mehr

Einsatz einer Dokumentenverwaltungslösung zur Optimierung der unternehmensübergreifenden Kommunikation

Einsatz einer Dokumentenverwaltungslösung zur Optimierung der unternehmensübergreifenden Kommunikation Einsatz einer Dokumentenverwaltungslösung zur Optimierung der unternehmensübergreifenden Kommunikation Eine Betrachtung im Kontext der Ausgliederung von Chrysler Daniel Rheinbay Abstract Betriebliche Informationssysteme

Mehr

Linux basierendes NAS auf Seagate Goflex Net installieren. Christian Eppler 21162, Stefan Möbius 21165

Linux basierendes NAS auf Seagate Goflex Net installieren. Christian Eppler 21162, Stefan Möbius 21165 Linux basierendes NAS auf Seagate Goflex Net installieren Christian Eppler 21162, Stefan Möbius 21165 Inhaltsverzeichnis Wieso das Ganze? Nachteile Pogoplug/Debian Vorteile Pogoplug/Debian Wieso diese

Mehr

docker.io Secure And Portable Containers Made Easy Jürgen Brunk München, 30.04.2014

docker.io Secure And Portable Containers Made Easy Jürgen Brunk München, 30.04.2014 Secure And Portable Containers Made Easy Jürgen Brunk München, 30.04.2014 Agenda 1. Was ist Docker? 2. Was sind Container? 3. Warum Docker? 4. Architektur 5. Praxis 6. Docker unter Ubuntu installieren

Mehr

1.1 IPSec - Sporadische Panic

1.1 IPSec - Sporadische Panic Read Me System Software 9.1.2 Patch 2 Deutsch Version 9.1.2 Patch 2 unserer Systemsoftware ist für alle aktuellen Geräte der bintec- und elmeg-serien verfügbar. Folgende Änderungen sind vorgenommen worden:

Mehr

IPCOP OPENVPN TUTORIAL

IPCOP OPENVPN TUTORIAL IPCOP OPENVPN TUTORIAL von Blue nach Green über VPN mit installiertem BOT Zerina Plugin 0.9.4b und OPENVPN GUI auf IPCOP 1.4.10 http://www.ipcop.org http://www.carinthian-linux.at http://www.openvpn-forum.de

Mehr

IVE-W530BT. Bluetooth Software Update Manual mit Windows 7 09.03.2015

IVE-W530BT. Bluetooth Software Update Manual mit Windows 7 09.03.2015 Bluetooth Software Update Manual mit Windows 7 IVE-W530BT 1 Einleitung In der Anleitung wird die Vorgehensweise zum aktualisieren der Radio Bluetooth Firmware beschrieben. Bitte beachten Sie alle Warnhinweise

Mehr

PostgreSQL unter Debian Linux

PostgreSQL unter Debian Linux Einführung für PostgreSQL 7.4 unter Debian Linux (Stand 30.04.2008) von Moczon T. und Schönfeld A. Inhalt 1. Installation... 2 2. Anmelden als Benutzer postgres... 2 2.1 Anlegen eines neuen Benutzers...

Mehr

Anleitung Gen2VDR Installationsanleitung für REYCOM. Gen2VDR Installationsanleitung für REYCOM

Anleitung Gen2VDR Installationsanleitung für REYCOM. Gen2VDR Installationsanleitung für REYCOM 1 Gen2VDR Installationsanleitung für REYCOM 2 Anleitung Gen2VDR Installationsanleitung für REYCOM Inhaltsverzeichnis 1 Allgemein... 3 1.1 Systemvoraussetzungen... 3 2 Installation... 4 2.1 Download der

Mehr

VPNs mit OpenVPN. von Michael Hartmann

VPNs mit OpenVPN. von Michael Hartmann <michael.hartmann@as netz.de> VPNs mit OpenVPN von Michael Hartmann Allgemeines Was ist ein VPN? VPN: Virtual Privat Network (virtuelles, privates Netzwerk) Tunnel zwischen zwei Rechnern durch ein (unsicheres)

Mehr