Inhaltsverzeichnis Einführung Vorbereitung NGW100 Inbetriebnahme Entwicklungsumgebung einrichten Anwendungsbeispiele Schnittstellen auf dem NGW100

Größe: px
Ab Seite anzeigen:

Download "Inhaltsverzeichnis Einführung Vorbereitung NGW100 Inbetriebnahme Entwicklungsumgebung einrichten Anwendungsbeispiele Schnittstellen auf dem NGW100"

Transkript

1

2 Inhaltsverzeichnis Einführung 4 Vorbereitung 4 Betriebssystem 4 Installation VMware Tools 4 Erweiterung der Hardware Konfiguration für VMware 5 Installation der Docutils 5 NGW100 Inbetriebnahme 7 Hinzufügen eines VMware Netzwerkadapters 7 Verkabelung des NGW100 7 Verbindung zur RS232-Schnittstelle 8 Verbindung zum Web-Interface 9 Entwicklungsumgebung einrichten 10 NGW100 Update 10 Buildroot einrichten 12 NGW per NFS booten 13 Anwendungsbeispiele 14 Eigenes Paket in Buildroot einfügen 14 LEDs ansteuern 15 Linux Deamon in C 16 Webserver CGI Skript 17 Schnittstellen auf dem NGW Temperatursensorprojekt 19 Status: 19 Noch zu erledigen: 19 Bilder: 19 Fazit 21 Literatur: 22 Appendix A: Buildroot 23 Make Optionen 23 Weitere Make Optionen 24 Appendix B: U-boot 25 U-Boot help 25 Boot NGW Flash (Default) 26 Boot NFS 26 Boot SD Card 26 Appendix C: Paketkonifguration 26

3 Webif 26 httpd 27 busybox-syslogd 27 Build Jobs 27 Appendix D: Programmbeispiele 28 ledswitch.py 28 TempDeamon 35 Appendix D: Python2.6 Cross Kompilierung 43

4 Einführung Dieses Projekt wurde im Rahmen der Embedded Linux Vorlesung erstellt. Die Vorlesung ist in einen theoretischen und praktischen Teil aufeteilt. In dem praktischen Teil werden verschiedene Übungen auf einem Embedded Board durchgeführt. Prinzipiell steht es jedem frei mit welchem Board man arbeiten möchte. Ich habe mich jedoch für das NGW100 Baord von ATMEL entschieden, da es vergleichsweise günstig ist und auch viele Funktionen und Schnittstellen zum experimentieren bereitstellt. In diesem Dokument beschreibe ich meine Erfahrungen mit dem Board und welche schritte ich unternommen habe um die einzelnen Aufgabe zu bewerkstelligen. Weiterhin soll es künftigen Studenten einen leichteren Einstieg ermöglichen und Interessierten die Möglichkeit geben die Projekte nachzubauen. Vorbereitung Bevor ich mit dem Board loslegen konnte musste noch etwas Vorarbeit geleistet werden. Betriebssystem Als Basis habe ich mir zuerst eine virtuelle Maschine von mit einem debian linux heruntergeladen. Ich arbeite im allgemeinen sehr gerne mit virtuellen Maschinen, weil man so frei experimentieren kann ohne die produktiv Installation zu gefährden. Zum Ausführen der virtuellen Maschine benutze ich den kostenlosen VMware Player, den man unter bekommen kann. Anschließend habe ich die Zipdatei debian-lenny-vm-deutsch entpackt gestartet. Installation VMware Tools Sobald die virtuelle Maschine gestartet ist sollte man die VMwareTools nachinstallieren. Um dies anzustoßen wählt man im Menü des VMwarePlayers VM->install VMware Tools. Nun werden die passenden VMware Tools in das virtuelle CD-Rom Laufwerk geladen. Die Installation habe ich mit dem root user durchgeführt. Zuerst Kernelversion ermitteln. uname -r Anschließend habe ich folgende Tools installiert: * gcc * make * zip * unzip * psmisc apt-get -y install gcc make zip unzip psmisc Nun müssen die Kernel Header's und Kernel Sourcen geholt werden. apt-get -y install linux-headers linux-source oder

5 apt-get -y install linux-headers-$(uname -r) Danach sollte man die VMware Tools auf die Platte kopieren und entpacken. Da das virtuelle CD-Rom Laufwerk während der Installation benötigt wird, habe ich die VMware Tools wieder ausgeworfen. Anschließend mit folgenden Kommandos die Installation gestartet. cp -r "/media/vmware Tools/" /usr/src cd "/usr/src/vmware Tools" umount "media/vmware Tools" tar xfvz VMwareTools tar.gz cd vmware-tools-distrib./vmware-install.pl #Tools kopieren #Unmounten der VMware Tools oder #Entpacken der Tools #Installationskript starten Während der Insallation werden verschiedene Einstellungen vom Benutzer erfragt. Ich habe alle Defaultwerte übernommen [ENTER]. Zum Schluss der Installation habe ich das vmxnet Netzwerkmodul eingerichtet. /etc/init.d/networking stop rmmod pcnet32 rmmod vmxnet depmod -a modprobe vmxnet /etc/init.d/networking start Erweiterung der Hardware Konfiguration für VMware Nachdem die VMware Tools installiert waren, habe ich der virtuellen Maschine 4 CPUs und 2 GB Hauptspeicher zugewiesen. Damit soll vor allem die Kompilierzeit später stark verkürzt werden. Zudem habe ich noch eine virtuelle Festplatte erstellt, auf der alle projektspezifischen Daten gespeichert werden. Die Partition habe ich mit geparted eingerichtet und anschließend die Datei /etc/fstab so angepasst, damit sie auch automatisch gemountet wird. # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 / ext3 errors=remount-ro 0 1 /dev/sdb1 /data ext3 errors=remount-ro 0 1 /dev/sda5 none swap sw 0 0 /dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 Installation der Docutils Die Dokumentation des Projekts sollte als restructuredtext erstellt werden. Diese Form der Dokumentation ist sehr hilfreich, da man sich zunächst auf den Inhalt und nicht auf das Design konzentriert. Zudem können die Quelldateien in unterschiedliche Zielformate konvertiert werden. Die Tools sind in dem Python Paket docutils enthalten. Nach dem Entpacken kann man einfach in das Verzeichnis docutils-0.7 wechseln und folgendes eingeben: python setup.py install

6 Damit können nun die Tools für die Konvertierung einer restructuredtext-datei in verschiedene Zielformate benutzt werden. Um z.b. eine HTML-Datei zu erzeugen kann man folgendes eingeben: rst2html.py sourcefile.txt destinationfile.html Um jedoch auch PDF Dateien erzeugen zu können habe ich ein zusätzliches "rst2pdf" Paket gesucht. Es gibt zwar die Möglichkeit direkt LaTex Quellcode zu erzeugen mit dem rst2latex.py Skript, welche wiederum zur Erstellung einer PDF geeignet wären, aber ein direkter Weg ist mir lieber. Bei wurde ich dann fündig. Eine PDF-Anleitung gibt es auch. Dafür müssen jedoch erst diese Pakete installiert werden: python-setuptools python2.5-dev apt-get -y install python-setuptools python2.5-dev Anschließend die python-setuptools aktualisiern. easy_install -U setuptools Nun kann das rst2pdf-0.x.tar.gz entpackt und installiert werden. tar xfvz rst2pdf-0.16.tar.gz cd rst2pdf-0.16 python setup.py install Wenn die Installation abgeschlossen ist, kann man wie folgt eine PDF aus seiner restructuredtext-datei erzeugen. cat readme.txt rst2pdf -o readme.pdf oder rst2pdf.py mydocument.txt -o mydocument.pdf Damit ist die Vorbereitung abgeschlossen und die Arbeit mit dem NGW100 beginnt.

7 NGW100 Inbetriebnahme Nun ist die Vorbereitung erstmal abgeschlossen und wir wollen unser NGW100 Board zum ersten mal starten. Hinzufügen eines VMware Netzwerkadapters Damit die virtuelle Maschine ins Internet und auch mit unserem NGW100 kommunizieren kann, habe ich einen weiteren Netzwerkadapter hinzugefügt. Dies geht über VM-> Settings -> Add -> Network Adapter -> * Nun wählt man den Adapter Typ **Bridged* aus und setzt den Haken für Connect at power on. Nach kurzer Zeit sollte nun der Adapter eth1 in der virtuellen Maschine verfügbar sein und wir können die IP-Adresse konfigurieren. ifconfig eth netmask Möchte man die Konfiguration dauerhaft speichern, so muss man in /etc/network/interfaces folgende Zeilen hinzufügen. # The secondary network interface allow-hotplug eth1 auto eth1 iface eth1 inet static address netmask Verkabelung des NGW100 Zuerst habe ich das das NGW100 Board mit dem Rechner, wie in folgendem Schaubild gezeigt, verbunden und die Schnittstellen entsprechen konfiguriert.

8 Verbindung zur RS232-Schnittstelle Um eine Verbindung herzustellen benötigt man ein Terminal-Emulations-Tool. Ein sehr kleines und dennoch leistungsfähiges Tool ist picocom. Mit folgender Zeile kann es installiert werden. apt-get install picocom #muss erst installiert werden Anschließend startete ich den ersten Versuch eine Verbindung mit seriellen Schnittstelle zum NGW100 herzustellen. Hier gibt es einige nützliche Tastenkürzel: Dabei steht C-a für "STRG+a", C-x für "STRG+x", usw. picocom /dev/ttyusb0 -b Nun sollte man in der Konsole Zugriff auf sein NGW100 Linux haben. Wenn man den RESET-Taster drückt kann man den Bootvorgang verfolgen, oder wenn man schnell genug ist und die Leer-Taste auf der Tastatur betätigt, dann wird der Bootvorgang angehalten. Man hat dan Zugriff auf die U-Boot Einstellungen. Falls sich nichts tut, hilft es kurz den RESET-Taster nochmal zu drücken. U-Boot (Apr :33:49) U-Boot code: > 00010f98 data: d8 -> 0004e2e8 malloc: Using memory from 0x11f71000 to 0x11fb1000 DMA: Using memory from 0x11f6d000 to 0x11f71000 Flash: 8 MB at address 0x DRAM Configuration: Bank #0: MB In: serial Out: serial Err: serial Net: macb0, macb1

9 Press SPACE to abort autoboot in 1 seconds U-Boot> help Hilfreich ist es immer zuerst die help Funktion aufzurufen, die eine Liste von nützlichen Funktionen ausgibt. Diese ist auch im Anhang dokumentiert. Verbindung zum Web-Interface Wenn man das installierte Linux startet, hat man auch schon bereits Zugriff über ein Web-Interface. oder Da die Dokumentation nicht in Papierform mitgeliefert wird, ist es sinnvoll mal einen Blick in das Wiki auf dem NGW100 zu werfen. Zudem können bereits verschiedene Statusmeldungen über die Weboberfläche betrachtet werden. Für die Authentifizierung wird folgender Default Benutzer verwendet: Benutzer: Passwort: root roota

10 Entwicklungsumgebung einrichten Bei der Einrichtung der Entwicklungsumgebung habe ich mich stark an der Vorgehensweise von Andreas Badurczyk gehalten, da er die ersten Schritte sehr gut dokumentiert hat. Zudem zeigt er, wie man den Boot-Loader aktualisiert, was ich unbedingt machen musste. NGW100 Update Für die Entwicklungsdauer wollen wir das Linux Root Filesystem per NFS booten um aufwendige Kopierarbeiten des Filesystems zu vermeiden. Jedoch unterstützt der U-Boot Bootloader in der ausgelieferten Version diese Funktion noch nicht. Aus diesem Grund muss zunächst der Bootloader auf eine aktuelle Version gebracht werden. Es gibt verschiedene Methoden um dies umzusetzen. Eine ist die Aktualisierung mit Hilfe einer SD-Karte. Zu beachten ist hier aber, dass die Karte nicht größer als 512 MB sein sollte, da sie sonst nicht vom Bootloader erkannt wird. Zuerst muss die SD-Karte formatiert werden, falls sie noch nicht mit dem ext2 Filesystem formatiert ist. Daten vorher sichern!! Ermitteln der Partition der SD-Karte cat /proc/partitions major minor #blocks name sda sda sda sda sdb sdb sdc sdc sde -> sde1 Dateisystem auf der SD-Karte erstellen umount /dev/sde1 mkfs.ext2 /dev/sde1 mkdir /media/sdcard mount /dev/sde1 /media/sdcard Herunterladen eines aktuellen U-boots von wget cp flash-upgrade-atngw100-v uimg /media/sdcard umount /media/sdcard NGW100 mit der neuen Version flashen -> mit der Leer-Taste U-boot anhalten mmcinit ext2load mmc 0:1 0x /flash-upgrade-atngw100-v uimg bootm 0x Anschließen die Frage mit 'y' bestätigen.

11 Erst wenn der Vorgang abgeschlossen ist und die Meldung "Flash upgrade successful. Please press reset or cycle power." erscheint darf das NGW100 neu gestartet werden!!

12 Buildroot einrichten Acuh in diesem Schritt müssen erst einige Tools installiert werden. Folgende Zeilen kann man dazu verwenden. (evtl. muss der "\" entfernt werden, und alles in einer Zeile stehen) apt-get -y install gcc g++ sed bison flex patch gettext libtool texinfo autoconf \ automake libncurses-dev zlib1g-dev libzlcore-dev libacl1-dev liblzo2-dev \ nfs-kernel-server build-essential subversion Anschließend habe ich das buildroot herungergeladen. Die aktuelle stabile Version buildroot hat bei mir aber leider nicht funktioniert. Deshalb verwende ich die etwas ältere Version buildroot , die auch von anderen Studenten erfolgreich eingesetzt wurde. Eine Buildroot Dokumentation findet sich unter cd /data wget tar -jxvf buildroot tar.bz2 cd buildroot Bevor wir nun unser erstes Projekt kompilieren müssen wir noch die locale für en_us.utf-8 UTF-8 auf unserem Entwicklungsrechner aktivieren. Dafür entfernen wir das Kommentarzeichen # in der Datei /etc/locale.gen vor der entsprechenden Zeile und speichern die Änderung. Nun mit dem Befehl locale-gen können die locales wieder neu generiert werden. Anschließend können wir mit der Kompilierung des buildroots starten. Dieser Tipp stammt auch aus der Dokumentation von Andreas Badurczyk. Jetzt in das Verzeichnis von /data/buildroot /, im folgenden <buildroot>, wechseln und make help eingeben. Es erscheint eine Liste von möglichen make Optionen. Nachdem ich einen Überblick über die make Optionen gewonnen habe, startete ich den Kompiliervorgang wie folgt: make atngw100_defconfig make menuconfig make //alle defaults bestätigen //starten Der Kompiliervorgang brach ab und ich musste die "Copy kernel to /tftpboot" Option ausschalten. Zusätzlich habe ich das Paket webif und httpd hinzugefügt und auch gleich die Datei <buildroot>/output/target/etc/fstab angepasst. Somit war die Einrichtung von Buildroot erstmal abgeschlossen und das System konnte erfolgreich kompiliert werden. -> Kernel -> Destinations for linux kernel binaries [*] Copy kernel to root file system [ ] Copy kernel to /tftpboot () Copy kernel to <dir>... [*] Copy buildroot configuration to Linux file system #Änderung in der /etc/fstab des Zielsystems unter <buildroot>/output/target/etc/fstab. # /etc/fstab: static file system information. # # <file system> <mount pt> <type> <options> <dump> <pass> #/dev/mtdblock3 /usr jffs2 defaults 0 0 <- Zeile auskommnetiert

13 NGW per NFS booten Um das NGW100 nun per NFS starten booten zu können muss zuerst ein NFS-Server installiert werden, dann ein Verzeichnis mit dem root-filesystem exportiert und die nötigen Parameter im U-Boot eingestellt werden. Im Folgenden wird stichpunktartig beschrieben, wie dies funktioniert. NFS Server konfigurieren: apt-get install nfs-kernel-server echo "/data/nfs /16(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports exportfs r mkdir /tmp/nfs mount :/data/nfs /tmp/nfs #testen ob es gemountet weren kann umount /tmp/nfs #unmount Testverzeichnis rmdir /tmp/nfs #löschen Bootparameter sichern: #Auf dem NGW100 im U-Boot **printenv** #eingeben und die Ausgabe per copy und paste in eine Datei schreiben. U-Boot> printenv ethaddr=00:04:25:1c:53:00 bootdelay=1 eth1addr=00:04:25:1c:53:01 ethact=macb0 bootfile=uimage baudrate= bootcmd=fsload; bootm bootargs=console=ttys0 root=/dev/mtdblock1 rootfstype=jffs2 stdin=serial stdout=serial stderr=serial serverip= ipaddr= tftpip= Bootparameter für NFS setzen: #Mit dem U-Boot verbinden und folgendes eingeben set bootcmd 'nfs 0x :/data/nfs/boot/uImage; bootm' set bootargs 'root=/dev/nfs nfsroot= :/data/nfs/ ip= : :: ::eth1:off console=ttys0' set serverip set ipaddr saveenv Anschließend noch das komilierte root-fs kopieren und das neue System booten: cp -r <buildroot>/output/target/* <nfsroot> # cp -r /data/buildroot /output/target/* /data/nfs

14 Anwendungsbeispiele In diesem Abschnitt zeige ich, wie ich einige Aufgaben gelöst und umgesetzt habe, nachdem nun das System per NFS bootfähig ist. Eigenes Paket in Buildroot einfügen Bei dem Buildroot liegen alle Paketkonfigurationen in <buildroot>/package. Um nun ein eigenes Paket dort zu integrieren habe ich erst den Ordner <buildroot>/package/mypackage erstellt. In diesem Ordner sollen meine zukünftigen Pakete gespeichert werden. Benötigt wird mypackage.mk: mypackage-1.0.tar.gz - Paketdatei mit Versionsnummer mypackage.mk - Buildroot Makedatei Config.in - Datei zum Einbinden in die Pakethierarchie von Buildroot sayhello.c - Der eigentliche Code Makefile - um den Code zu kompilieren ############################################################# # # mypackage # ############################################################# MYPACKAGE_VERSION = 1.0 MYPACKAGE_SOURCE = mypackage-$(mypackage_version).tar.gz MYPACKAGE_SITE = MYPACKAGE_INSTALL_STAGING = NO #MYPACKAGE_INSTALL_TARGET = YES #MYPACKAGE_CONF_OPT = --enable-shared #MYPACKAGE_DEPENDENCIES = libglib2 host-pkg-config define MYPACKAGE_BUILD_CMDS $(MAKE) CC=$(TARGET_CC) LD=$(TARGET_LD) -C $(@D) all endef define MYPACKAGE_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 $(@D)/sayhello $(TARGET_DIR)/usr/bin endef $(eval $(call GENTARGETS,package,mypackage)) Config.in: config BR2_PACKAGE_MYPACKAGE bool "mypackage" help This is my first demo programm for NGW100. sayhello.c:

15 /* say hello program */ #include<stdio.h> main(int argc, char *argv[]) if(argc > 1) printf("\nhello %s\n",argv[1]); else printf("\nhello World\n"); Makefile: all: clean: $(CC) -c *.c $(CC) -o sayhello sayhello.o rm -f *.o rm -f *~ rm -f sayhello Wenn alle Dateien erstellt wurden, kann mit folgendem Befehl das Paket erzeugt werden und nach <buildroot>/dl kopiert werden. Alle Pakete, die Buildroot herunterlädt landen in diesem Verzeichnis. Wenn man sicherstellen will, dass man zu einem späteren Zeitpunkt genau die gleichen Pakete zum Kompilieren verwendet, sollte man einfach dieses Verzeichnis sichern und später wieder einspielen. tar czvf mypackage-1.0.tar.gz mypackage/ Zum Schluss muss die Config.in Datei in der <buildroot>/package/config.in an beliebiger Stelle eingetragen werden. Damit ich mir lange Suchen spare, habe ich den Eintrag ganz oben erstellt. menu "Package Selection for the target" menu "MyPackages" comment "These are my packages" source "package/mypackage/mypackage/config.in" endmenu... LEDs ansteuern Die LED auf dem NGW100 Board können sehr bequem über das Linux Filesystem gesteuert werden. Im Verzeichnis /sys/class/leds/ gibt es für jede LED einen Ordner. ~ # cd /sys/class/leds/ /sys/class/leds # ls a b sys /sys/class/leds #

16 Um z.b. die LED_A an zuschalten, schreibt man eine '1' in die Datei "/sys/class/leds/a/brightness" und eine '0' schaltet die LED wieder aus. Nützlich sind auch verschiedene trigger, die man auch über die Linux-Kernel Konfiguration noch erweitern kann. z.b. mmc Trigger der die LED leuchten lässt, wenn die SD Karte eingesteckt ist. Im Anhang ist noch ein Python Beispiel zur Ansteuerung der LEDs. Linux Deamon in C Weiterhin sollte ein ein Linux Deamon geschrieben werden, der von einem init Script beim Linux boot gestartet wird und im Hintergrund seine Arbeit verrichtet. Zudem soll er auf Linux Signale reagieren können und entsprechende Meldungen an den syslogd weitergeben, damit Ereignisse geloggt werden. Um einen Deamon zu ersellen geht man wie folgt vor: Fork den Elternprozess Dateirechte ändern Logdateien öffnen Neue Session ID erstellen Arbeitsverzeichnis wechseln Standard Ausgabedateien schließen Quelle: Damit der Deamon auch auf Signale von außen reagiert, muss man die Methode signal aufrufen und einen Handler (Funktion) übergeben, der bei entsprechendem Signal aufgerufen wird. signal(sighup,signal_handler); /* catch hangup signal */ signal(sigterm,signal_handler); /* catch kill signal */ Zum Schluss soll der Server auch bestimmte Ereignisse an den syslog-deamon übergeben. Dafür muss in buildroot syslogd aktiviert werden. Ich verwende den deamon aus der busybox. Es ist aber auch ein eigenständiger deamon verfügbar. Danach kann man in einem C-Programm wie folgt Meldungen an den syslog-deamon weitergeben. Die Nachrichten tauchen dann in /var/log/messages auf. # syslog - Funktion # LOG_INFO - Priorität für die Nachricht # die restlichen Parameter sind wie beim einem printf angeordnet # printf("%s started by user (ID: %d ) with PID: %d\n",deamon,getuid(), sid); syslog(log_info,"%s started by user (ID: %d ) with PID: %d\n","mydeamon",getuid(), getppid()); Jetzt fehlt noch ein Start-Skript, das den Server bei einem Neustart des NGW100 sofort startet. S99TempDeamon: #! /bin/sh # /etc/init.d/s99tempdeamon TEMPD=/tempdeamon/deamon/tempdeamon case "$1" in start) echo -n "Starting Tempdeamon: " $TEMPD ;;

17 stop) echo -n "Stopping Tempdeamon: " # only on tempdeamon is running killall $TEMPD ;; restart) echo -n "Restarting Tempdeamon: " killall $TEMPD $TEMPD ;; *) echo "Usage: /etc/init.d/s99tempdeamon start stop restart" exit 1 ;; esac exit 0 Dieses Skript wird in /etc/init.d unter dem Namen S99TempDeamon gespeichert und mit chmod 755 S99TempDeamon ausführbar gemacht. Wenn alles geklappt hat, kann man in der Prozessliste den tempdeamon finden. 326 root /usr/sbin/ntpd 330 root /usr/sbin/dropbear 336 nobody proftpd: (accepting connections) 339 root /tempdeamon/deamon/tempdeamon 341 root -/bin/sh 344 root ps -e Webserver CGI Skript Mit CGI (Common Gateway Interface) Skripten kann man relativ einfach dynamische Webseiten erzeugen und somit auch Daten zwischen einer Webseite und einem anderen Programm austauschen. In diesem Beispiel soll ein CGI Skript verwendet werden, um das bestehende ledswitch.py (Python Skript) anzusteuern um somit verschiedene LED per WebInterface steuern zu können. Dafür benutze ich, den bereits installierten, httpd. Dieser ist sehr einfach und klein gehalten. Sollte man höhere Ansprüche an einen Webserver haben, empfehle ich den lighttpd, der sehr viele Schnittstellen anbietet und leistungsstarker ist. Doch für dieses Beispiel reicht der httpd aus. Anpassen der /etc/httpd.conf: # Allow all trafic A: *.asp:text/html #Zugriff für webif Ordner /cgi-bin/webif:root:roota /cgi-bin/webif:admin:admin #Zugriff für den python Ordner /cgi-bin/python:admin:admin /cgi-bin/python:root:roota # MIME type compiled into httpd.svg:image/svg+xml

18 .png:image/png.gif:image/gif.jpg:image/jpg Nun können unter /www/cgi-bin/python ausführbare skripte hinterlegt werden. Meine Idee war es ein Python CGI Skript zu erstellen und die und über das ledswitch.py Skript die LED auf dem Board ein und auszuschalten. Dies war jedoch sehr langsam, weil bei jedem Aufruf der Python Interpreter erst gestartet werden muss. Eine bessere Umsetzung ist mir mit dem CherryPy Server gelungen, da der Interpreter schon geladen ist und nur noch die Methoden ausführen muss, geht es damit ziemlich schnell. Um CherryPy auf das Baord zu portieren muss auf dem Baord der Python Interpreter 2.6 installiert sein. Schnittstellen auf dem NGW100 Das NGW100 bietet verschiedene Schnittstellen um zusätzliche Hardware anzusprechen. Jedoch müssen diese erst im Linux Kernel aktiviert werden. Wenn man aber einen neueren Kernel ausprobieren möchte, so ist nun die Zeit dafür, da sonst die folgenden Einstellungen nochmal wiederholt werden müssen. Ich habe erst den Linux Kernel linux kompiliert und dann die Änderungen vorgenommen. Wie bei allen Kompilieraufgaben ist es ratsam zuerst die Default-Einstallungen zu verwenden und dann Anpassungen vorzunehmen. Ich habe versucht das AnyIO über die UART-Schnittstelle anzusprechen, was mir aber nicht gelungen ist. Um jedoch die UART Schnittstellen ansteuern zu können, müssen diese erste im Kernel eingerichtet werden. <buildroot>output/build/linux /arch/avr32/boards/atngw100/setup.c: void init setup_board(void) at32_map_usart(1, 0, 0); /* USART 1: /dev/ttys0, DB9 */ at32_map_usart(0, 1, 0); /* USART 0: /dev/ttys1 */ at32_map_usart(2, 2, 0); /* USART 2: /dev/ttys2 */ at32_map_usart(3, 3, 0); /* USART 3: /dev/ttys3 */ at32_setup_serial_console(0); static int init atngw100_init(void) unsigned i; /* * ATNGW100 uses 16-bit SDRAM interface, so we don't need to * reserve any pins for it. */ at32_add_device_usart(1); at32_add_device_usart(0); at32_add_device_usart(2); at32_add_device_usart(3); Nun muss die Datei <buildrootdir>/output/build/linux /arch/avr32/boot/images/uimage gelöscht werden und der Kernel neu kompiliert. Anschließend, wenn alles geklappt hat, kann man die neuen Gerätedateien unter /dev/tty* finden.

19 ~ # ls /dev/tty* /dev/tty /dev/ttys1 /dev/ttys3 /dev/ttys0 /dev/ttys2 /dev/ttygserial ~ # Temperatursensorprojekt Bei diesem Projekt geht es darum, einen One-Wire Temperatursensor DS1820 über die UART-Schnittstelle von dem Baord abzufragen. Dabei habe ich ich ganz an die Anleitung von "Lena" gehalten. Nachdem die Schaltung gelötet ist, habe ich erstmal versucht die Temperatur an einem normalen PC mit dem digitemp Programm abzufragen. Dieser Schritt hat aber länger gedauert als zuerst erwartet und ich habe viel Zeit benötigt, da sowohl der RS2-to-USB-Adapter als auch das digitemp Programm nicht immer funktioniert haben. An einem anderen Rechner ohne VMware und eingebauter RS232 Schnittstelle hat es aber dann doch noch mit der aktuellen Version geklappt. Das Cross Kompilieren von dem Programm habe ich aber aus Zeitgründen nicht mehr geschafft. Status: Temperatursensor gelötet und getestet Deamon erstellt, der automatisch gestartet wird und 2 weitere Threads startet. Einer holt die Temperatur (derzeit dummy Funktion), und der zweite Thread lauscht an einem TCP Port auf Remotezugriffe. Zudem loggt der Deamon ins syslog von Linux. Python Client erstellt, der die Temperatur per TCP abholen kann CherryPy Server eingerichet, der die Temperatur anzeigen kann Noch zu erledigen: Eine graphische Anzeige für die Temperaturkurve digitemp für das NGW100 Cross kompilieren und von dem Deamon ansteuern Bilder: TempSensor von oben:

20 TempSensor von unten: Eine Messung unter Ubuntu:

21 Versuch mit dem AnyIO: Fazit Die Arbeit mit dem Baord hat mir Spaß gemacht, und ich konnte sehr viel Neues über Linux und Kompilierung erfahren, was ich vorher nicht gewusst habe. Ich habe jedoch an vielen Stellen mehr Zeit investieren müssen als ursprünglich geplant, auch wenn das aus dem Dokument nicht unbedingt ersichtlich ist. Ich möchte aber auf jeden Fall mit dem Baord weiterarbeiten, sobald ich etwas mehr "Freizeit" habe und versuche noch einen Feuchtigkeitssensor in das Projekt einzubinden. Letztlich kann ich nun das Board als Allzweck-Helfer für verschiedene Aufgaben einsetzen um z.b. automatische Downloads in der Nacht erledigen oder s prüfen und sogar einen Status per LED anzeigen. Dies sind alles Aufgaben, die sich sehr leicht mit Python umsetzen lassen.

22 Literatur: Hier noch ein paar nützliche Links:

23 Appendix A: Buildroot Make Optionen Cleaning: --> clean - delete all files created by build distclean - delete all non-source files (including.config) Build: all - make world Configuration: --> menuconfig - interactive curses-based configurator xconfig - interactive Qt-based configurator oldconfig - resolve any unresolved symbols in.config randconfig - New config with random answer to all options defconfig - New config with default answer to all options allyesconfig - New config where all options are accepted with yes allnoconfig - New config where all options are answered with no randpackageconfig - New config with random answer to package options allyespackageconfig - New config where pkg options are accepted with yes allnopackageconfig - New config where package options are answered with no --> configured - make uclibc/busybox/linux26-config Miscellaneous: --> source - download all sources needed for offline-build source-check - check all packages for valid download URLs external-deps - list external packages used flush - flush configuration cache arm_toolchain_defconfig - Build for arm_toolchain at91rm9200df_defconfig - Build for at91rm9200df at91rm9200df_ext_bare_defconfig - Build for at91rm9200df_ext_bare at91rm9200df_ext_defconfig - Build for at91rm9200df_ext at91sam9260dfc_defconfig - Build for at91sam9260dfc at91sam9260dfc_ext_bare_defconfig - Build for at91sam9260dfc_ext_bare at91sam9260dfc_ext_defconfig - Build for at91sam9260dfc_ext at91sam9260pf_defconfig - Build for at91sam9260pf at91sam9261ek_defconfig - Build for at91sam9261ek at91sam9261ek_ext_bare_defconfig - Build for at91sam9261ek_ext_bare at91sam9261ek_ext_defconfig - Build for at91sam9261ek_ext at91sam9263ek_defconfig - Build for at91sam9263ek at91sam9263ek_ext_bare_defconfig - Build for at91sam9263ek_ext_bare at91sam9263ek_ext_defconfig - Build for at91sam9263ek_ext at91sam9g20dfc_defconfig - Build for at91sam9g20dfc at91sam9g20dfc_ext_bare_defconfig - Build for at91sam9g20dfc_ext_bare at91sam9g20dfc_ext_defconfig - Build for at91sam9g20dfc_ext atngw100-base_defconfig - Build for atngw100-base --> atngw100_defconfig - Build for atngw100 atstk1005_defconfig - Build for atstk1005 atstk100x_defconfig - Build for atstk100x i386_defconfig - Build for i386 i686_defconfig - Build for i686 integrator926_defconfig - Build for integrator926 integrator926_huge_defconfig - Build for integrator926_huge kb9202_defconfig - Build for kb9202 v100sc2_defconfig - Build for v100sc2 See docs/readme and docs/buildroot.html for further details

24 Weitere Make Optionen make linux26-menuconfig make busybox-menuconfig make uclibc-menuconfig // linux Kernel Konfiguration // busybox Konfiguration // uclibc Konfiguration

25 Appendix B: U-boot U-Boot help U-Boot> help? - alias for 'help' askenv - get environment variables from stdin base - print or set address offset bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BOOTP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation dhcp - boot image via network using DHCP/TFTP protocol echo - echo args to console erase - erase FLASH memory ext2load - load binary file from a Ext2 filesystem ext2ls - list files in a directory (default /) fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) flinfo - print FLASH memory information fsinfo - print information about filesystems fsload - load binary file from a filesystem image go - start application at address 'addr' help - print online help iminfo - print header information for application image imls - list all images found in flash itest - return true/false on integer compare loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range ls - list files in a directory (default /) md - memory display mm - memory modify (auto-incrementing) mmcinit - init mmc card mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) printenv - print environment variables protect - enable or disable FLASH write protection rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage setenv - set environment variables sf - SPI flash sub-system sleep - delay execution for some time sspi - SPI utility commands

26 tftpboot version - boot image via network using TFTP protocol - print monitor version Boot NGW Flash (Default) set baudrate set bootcmd 'fsload; bootm' set bootargs 'console=ttys0 root=/dev/mtdblock1 rootfstype=jffs2' set serverip set ipaddr set tftpip Boot NFS set bootcmd 'nfs 0x :/data/nfs/boot/uImage; bootm' set bootargs 'root=/dev/nfs nfsroot= :/data/nfs/ ip= : :: ::eth1:off console=ttys0' set serverip set ipaddr saveenv Boot SD Card set bootcmd 'mmcinit; ext2load mmc 0:1 0x /boot/uimage; bootm' set bootargs 'console=ttys0 root=/dev/mmcblk0p1 rootwait' set bootfile uimage set serverip set ipaddr saveenv Appendix C: Paketkonifguration Webif -> Package Selection for the target -> Networking -> webif - Status Console [ ] vtun - BEWARE: read package/vtun/readme.txt before use [*] webif - Status Console [*] instal index.html in /www which redirects to webif [*] install language support

27 httpd make busybox-menuconfig -> Network Utilities -> httpd [*] httpd [ ] Support 'Ranges:' header [ ] Use sendfile system call [ ] Enable -u <user> option [*] Enable Basic http Authentication [ ] Support MD5 crypted passwords for http Authentication [*] Support Common Gateway Interface (CGI) [ ] Support for running scripts through an interpreter [ ] Set REMOTE_PORT environment variable for CGI [*] Enable -e option (useful for CGIs written as shell scripts) [ ] Support for custom error pages [ ] Support for reverse proxy busybox-syslogd make busybox-menuconfig System Logging Utilities ---> [*] syslogd [*] Rotate message files [*] Remote Log support [ ] Support -D (drop dups) option [*] Circular Buffer support (1024) Circular buffer size in Kbytes (minimum 4KB) [*] logread (NEW) [ ] Double buffering (NEW) [*] klogd [*] logger Build Jobs make menuconfig -> Build options --> Number of jobs to run simultaneously -> 6

28 Appendix D: Programmbeispiele ledswitch.py #!/usr/bin/python import sys import os import pickle import time ######################################################### # Configuration Parameters ######################################################### BRIGHTNESS_LED_A = "/sys/class/leds/a/brightness" BRIGHTNESS_LED_B = "/sys/class/leds/b/brightness" BRIGHTNESS_LED_SYS = "/sys/class/leds/sys/brightness" TRIGGER_LED_A = "/sys/class/leds/a/trigger" TRIGGER_LED_B = "/sys/class/leds/b/trigger" TRIGGER_LED_SYS = "/sys/class/leds/sys/trigger" BACKUP_FILE = "/tmp/leds_backup.txt" ######################################################### TRIGGER_NONE = "none" TRIGGER_HEARTBEAT = "heartbeat" BRIGHTNESS_ON = "1" BRIGHTNESS_OFF = "0" DEFAULT_TRIGGER = TRIGGER_NONE DEFAULT_BRIGHTNESS = BRIGHTNESS_ON leda = "brightness_file":brightness_led_a,"trigger_file":trigger_led_a ledb = "brightness_file":brightness_led_b,"trigger_file":trigger_led_b ledsys = "brightness_file":brightness_led_sys,"trigger_file":trigger_led_sys leds = "leda": leda, "ledb":ledb, "ledsys":ledsys def set_led(dict): try: bfile = open(dict['brightness_file'], 'w') except IOError: print "Could not open brightness file: ", dict['brightness_file'] return try: tfile = open(dict['trigger_file'], "w") except IOError: print "Could not open trigger file: ", dict['trigger_file'] return

29 #it is better to turn the led off first bevor setting new values bfile.write(brightness_off) tfile.write(trigger_none) bfile.flush() tfile.flush() #now set the desired values bfile.write(dict.setdefault('brightness_value',default_brightness)) tfile.write(dict.setdefault('trigger_value',default_trigger)) bfile.flush() tfile.flush() tfile.close() bfile.close() def get_led(dict): try: dict['brightness_value'] = get_brightness(dict['brightness_file']) except IOError: print "Could not open brightness file: ", dict['brightness_file'] try: dict['trigger_value'] = get_trigger(dict['trigger_file']) except IOError: print "Could not open trigger file: ", dict['trigger_file'] return dict def change_led(led_dict, param = "switch"): dict = get_led(led_dict) tvalue = DEFAULT_TRIGGER bvalue = DEFAULT_BRIGHTNESS result = "" if(param == "on"): tvalue = TRIGGER_NONE bvalue = BRIGHTNESS_ON elif(param == "off"): tvalue = TRIGGER_NONE bvalue = BRIGHTNESS_OFF elif(param == "switch"): tvalue = TRIGGER_NONE if(dict['brightness_value'] == BRIGHTNESS_OFF): bvalue = BRIGHTNESS_ON else: bvalue = BRIGHTNESS_OFF elif(param == "heartbeat"): bvalue = BRIGHTNESS_OFF

30 tvalue = TRIGGER_HEARTBEAT else: print usage() return "nothing changed" dict['brightness_value']=bvalue dict['trigger_value']=tvalue set_led(dict) dict = get_led(dict) list = ["brightness:", dict["brightness_value"], "trigger:", dict["trigger_value"]] return " ".join(list) def call_method(value): if(value == 'turn_all_off'): turn_all_off() elif(value == "turn_all_heartbeat"): turn_all_heartbeat() elif(value == "backup_leds"): backup_leds() elif(value == "restore_leds"): restore_leds() elif(value == "chase"): chase() else: print usage() return "nothing changed" def get_leds_status(): leda['brightness_value'] = get_brightness(brightness_led_a) leda['trigger_value'] = get_trigger(trigger_led_a) ledb['brightness_value'] = get_brightness(brightness_led_b) ledb['trigger_value'] = get_trigger(trigger_led_b) ledsys['brightness_value'] = get_brightness(brightness_led_sys) ledsys['trigger_value'] = get_trigger(trigger_led_sys) return [leda,ledb,ledsys] def turn_all_off(): try: ba = open(brightness_led_a, 'w') bb = open(brightness_led_b, 'w') bsys = open(brightness_led_sys, 'w') except IOError: print "Could not open ALL brightness files: " try: ta = open(trigger_led_a, 'w') tb = open(trigger_led_b, 'w') tsys = open(trigger_led_sys, 'w') except IOError: print "Could not open ALL trigger files: "

31 ta.write(trigger_none) tb.write(trigger_none) tsys.write(trigger_none) ba.write(brightness_off) bb.write(brightness_off) bsys.write(brightness_off) ba.flush() bb.flush() bsys.flush() ta.flush() tb.flush() tsys.flush() ba.close() bb.close() bsys.close() ta.close() tb.close() tsys.close() def turn_all_heartbeat(): try: ba = open(brightness_led_a, 'w') bb = open(brightness_led_b, 'w') bsys = open(brightness_led_sys, 'w') except IOError: print "Could not open ALL brightness files: " try: ta = open(trigger_led_a, 'w') tb = open(trigger_led_b, 'w') tsys = open(trigger_led_sys, 'w') except IOError: print "Could not open ALL trigger files: " ta.write(trigger_heartbeat) tb.write(trigger_heartbeat) tsys.write(trigger_heartbeat) ba.write(brightness_off) bb.write(brightness_off) bsys.write(brightness_off) ba.flush() bb.flush() bsys.flush() ta.flush() tb.flush() tsys.flush()

32 ba.close() bb.close() bsys.close() ta.close() tb.close() tsys.close() def get_trigger(trigger_file): prev='' current='' list = [] collect = False file = open(trigger_file, 'r') text = file.read() for char in text: prev = current current = char if(prev == '['): collect = True if(current == ']'): collect = False if(collect): list.append(current) #close file if(file.closed!= True): file.close() return "".join(list) def get_brightness(brightness_file): file = open(brightness_file, 'r') text = file.read() val = str(text[0]) if(file.closed!= True): file.close() return val def backup_leds(): # write python dict to a file get_leds_status() leds = 'leda':leda, 'ledb': ledb, 'ledsys': ledsys output = open(backup_file, 'w') pickle.dump(leds, output) output.close()

33 def restore_leds(): try: file = open(backup_file, 'r') # read python dict back from the file leds = pickle.load(file) file.close() except IOError: print "Could not open BACKUP_FILE: %s " %BACKUP_FILE return #better to turn all les off first turn_all_off() leda = leds['leda'] ledb = leds['ledb'] ledsys = leds['ledsys'] try: ba = open(brightness_led_a, 'w') bb = open(brightness_led_b, 'w') bsys = open(brightness_led_sys, 'w') except IOError: print "Could not open ALL brightness files: " try: ta = open(trigger_led_a, 'w') tb = open(trigger_led_b, 'w') tsys = open(trigger_led_sys, 'w') except IOError: print "Could not open ALL trigger files: " ta.write(leda['trigger_value']) tb.write(ledb['trigger_value']) tsys.write(ledsys['trigger_value']) ba.write(leda['brightness_value']) bb.write(ledb['brightness_value']) bsys.write(ledsys['brightness_value']) ba.flush() bb.flush() bsys.flush() ta.flush() tb.flush() tsys.flush() ba.close() bb.close() bsys.close() ta.close() tb.close() tsys.close()

34 def chase(sec = 20, sleeptime = 0.1): list = get_leds_status() turn_all_off() try: ba = open(brightness_led_a, 'w') bb = open(brightness_led_b, 'w') bsys = open(brightness_led_sys, 'w') except IOError: print "Could not open ALL brightness files: " print "Seconds:",sec start = time.time() while(start + sec > time.time()): bsys.write(brightness_off) bb.write(brightness_on) bsys.flush() bb.flush() time.sleep(sleeptime) bb.write(brightness_off) ba.write(brightness_on) bb.flush() ba.flush() time.sleep(sleeptime) ba.write(brightness_off) bsys.write(brightness_on) ba.flush() bsys.flush() time.sleep(sleeptime) ba.close() bb.close() bsys.close() for each in list: set_led(each) def usage(): progname = str(sys.argv[0]).split(os.sep)[-1] ledname = "leda, ledb, ledsys" param1 = "on, off, switch, heartbeat, backup, restore" example1 = progname+" leda on" var1 = "progname + ledname + param" methods =""" turn_all_off turn_all_heartbeat

35 backup_leds restore_leds chase """ return """ usage: %s supported leds: %s parameters: %s example: %s methods: %s """ %(var1,ledname,param1,example1,methods) if name == ' main ': length = len(sys.argv) value = "" led = "" if(length == 2 ): value = sys.argv[1] call_method(value) elif(length == 3): led = sys.argv[1] value = sys.argv[2] print change_led(leds[led], value) else: print usage() TempDeamon Server: #include <unistd.h> /* Symbolic Constants */ #include <sys/types.h> /* Primitive System Data Types */ #include <errno.h> /* Errors */ #include <stdio.h> /* Input/Output */ #include <stdlib.h> /* General Utilities */ #include <pthread.h> /* POSIX Threads */ #include <string.h> /* String handling */ #include <time.h> /* String handling */ #include <getopt.h>

36 #include <syslog.h> #include <fcntl.h> #include <signal.h> #include <sys/socket.h> #include <netinet/in.h> /* Deamon erstellen: * Fork den Elternprocess * Dateirechte ändern * Logdateien öffnen * Neue Session ID erstellen * Arbeitsverzeichnis wechseln * Standard Ausgabedateien schließen */ //////////////////// //defines //////////////////// #define DEFAULT_INTERVAL 3 #define DEFAULT_LOGFLAG 1 #define RUNNING_DIR "/tempdeamon/" #define LGGING_TEMP_FILE "temp.log" #define LOCK_FILE "lock.log" #define DEAMON "TempDeamon" #define SOCKET_PORT 5555 #define REMOTE_FUNCTION_GET_TEMP_1 "gettemp1" #define REMOTE_FUNCTION_GET_TEMP_2 "gettemp2" #define REMOTE_FUNCTION_SHUTDOWN "shutdown" ////////////////// //globals ////////////////// FILE *outfile; pid_t pid, sid; int stopped = 0; typedef struct str_thdata int thread_no; char message[100]; int temp; int temp2; int socketport; thdata;

37 ///////////////////// //methods declaration ///////////////////// void get_temp_function ( void *ptr ); int socket_server(void *ptr); void signal_handler(int sig); void lockfile(); int getrand(void); //return random (0-100) void error(const char *msg); void reply(char message[], int length, char* buffer, int* socketfd); void resetbuffer(char buffer[], int size); ////////////////////////////// // main part, deamon creatoin ///////////////////////////// /* main */ int main(int argc, char **argv) static int ch, interval, logflag; interval = DEFAULT_INTERVAL; logflag = DEFAULT_LOGFLAG; while ((ch = getopt(argc, argv, "lp:"))!= -1) switch (ch) case 'l': logflag = 1; break; case 'p': interval = atoi(optarg); break; //Ausgabe starte deamon printf("%s, Try starting\n",deamon); syslog(log_info,"%s, Try starting \n",deamon); pid = fork(); if (pid < 0) //fork fehler exit(exit_failure); else if (pid > 0) // elternprozess beenden exit(exit_success);

38 //pid == 0 /* kindprozess (daemon) läuft weiter */ //Dateirechte neu setzen umask(0); // Neue Session ID für den Deamon erstellen sid = setsid(); if (sid < 0) exit(exit_failure); // Arbeitsverzeichnis wechseln if ((chdir(running_dir)) < 0) syslog(log_info, "Cannot access directory %s ", RUNNING_DIR); syslog(log_info, "stopped"); exit(exit_failure); //Nur eine Instanz erlauben lockfile(); if( (outfile = fopen(lgging_temp_file, "a")) == NULL) syslog(log_info, "Cannot open file %s ", LGGING_TEMP_FILE); exit(exit_failure); fprintf(outfile, "Temp1: %d\n", 1); fflush(outfile); signal(sigchld,sig_ign); /* ignore child */ signal(sigtstp,sig_ign); /* ignore tty signals */ signal(sigttou,sig_ign); signal(sigttin,sig_ign); signal(sighup,signal_handler); /* catch hangup signal */ signal(sigterm,signal_handler); /* catch kill signal */ //Ausgabe Deamon gestartet printf("%s started by user (ID: %d ) with PID: %d on TCP-PORT: %d \n",deamon,getuid(), sid, SOCKET_PORT);fflush(stdout); syslog(log_info,"%s started by user (ID: %d ) with PID: %d on TCP-PORT: %d\n",deamon,getuid(), sid, SOCKET_PORT); //Deamon ist nun erstellt //Thread vorbereiten //Thraed für gettemp() erstellen pthread_t tempthread, socketthread; /* thread variables */ thdata data; /* structs to be passed to threads */ /* initialize data to pass to thread 1 */ data.thread_no = 1; strcpy(data.message, "I am the Temp thread"); data.temp = 0; data.socketport = SOCKET_PORT; /* create threads */ pthread_create (&tempthread, NULL, (void *) &get_temp_function, (void *) &data); pthread_create (&socketthread, NULL, (void *) &socket_server, (void *) &data); sleep(1); // Standard Ausgabedateien schließen //close(stdin_fileno); //close(stdout_fileno); //close(stderr_fileno); while (!stopped) sleep(interval); //printf("temp1: %d\n", data.temp); fflush(stdout); /* Send data to file. */ //log temp to file if necessary //fprintf(outfile, "Temp1: %d\n", data.temp); fflush(outfile); fclose(outfile); exit(exit_success);

39 ////////////////////////////// // temp measurement - thread ///////////////////////////// /** * In diesem Thread wir die Temperatur in einer while Schleife * geholt und im data.temp abgespeichert. * **/ void get_temp_function ( void *ptr ) thdata *data; data = (thdata *) ptr; /* type cast to a pointer to thdata */ /* do the work */ while(1) data->temp = getrand(); //get random temp data sleep(1); pthread_exit(0); /* exit */ ////////////////////////////// // socket server - thread ///////////////////////////// int socket_server(void *ptr) int sockfd, newsockfd, portno, n; socklen_t clilen; char buffer[256]; char message[256]; int clinet_connected = 0; thdata *data; data = (thdata *) ptr; /* type cast to a pointer to thdata */ struct sockaddr_in serv_addr, cli_addr; //open socket sockfd = socket(af_inet, SOCK_STREAM, 0); if (sockfd < 0) error("error opening socket"); resetbuffer((char *) &serv_addr, sizeof(serv_addr)); //get port portno = data->socketport; //set server parameters serv_addr.sin_family = AF_INET;

40 serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); //bind socket if (bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) error("error on binding"); //socket server loop while(1) //listen mode listen(sockfd,5); clilen = sizeof(cli_addr); //create socket file descriptor //waits until client connects newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr,&clilen); //client connected //printf("client connected\n"); fflush(stdout); syslog(log_info,"%s: Remote client connected", DEAMON); if (newsockfd < 0) error("error on accept"); //reset buffer resetbuffer(buffer,256); resetbuffer(message,256); //read from client n = read(newsockfd,buffer,sizeof(buffer)); if (n < 0) error("error reading from socket"); //analyze command if ( strcmp ( buffer, REMOTE_FUNCTION_GET_TEMP_1 ) == 0) sprintf(message, "Temp1: %d\n", data->temp); if ( strcmp ( buffer, REMOTE_FUNCTION_GET_TEMP_2 ) == 0) sprintf(message, "Temp2: %d\n", data->temp2); else if ( strcmp ( buffer, REMOTE_FUNCTION_SHUTDOWN) == 0) strcpy(message, "you said shutdown\n"); reply(message, 255, buffer, &newsockfd);

41 close(newsockfd); //client disconnected //printf("client connection closed\n"); fflush(stdout); syslog(log_info,"%s: Remote client disconnected", DEAMON); close(sockfd); pthread_exit(0); /* exit */ ////////////////////////////// // helper functions ///////////////////////////// void signal_handler(int sig) switch(sig) case SIGHUP: syslog(log_info,"hangup signal catched"); break; case SIGTERM: syslog(log_info,"terminate signal catched"); syslog(log_info,"%s stopped with PID: %d\n",deamon,sid); stopped = 1; break; void lockfile() int lfp; char str[10]; lfp = open(lock_file,o_rdwr O_CREAT,0640); if (lfp<0) exit(1); /* can not open */ if (lockf(lfp,f_tlock,0)<0) read(lfp, str, sizeof(str)); //read pid from lockfile syslog(log_info,"%s with PID: %s is already started\n",deamon, str); exit(0); /* can not lock */ /* only first instance continues */ sprintf(str,"%d\n",getpid()); write(lfp,str,strlen(str)); /* record pid to lockfile */ int getrand(void) //return random (0-100) srand( (unsigned)time(null) );

42 int n = rand(); return n%100; void error(const char *msg) perror(msg); exit(1); void reply(char message[], int length, char* buffer, int* socketfd) int n, newsockfd; printf("here is the message: %s\n",buffer); newsockfd = *socketfd; //answer the client n = write(newsockfd,message,length); //client connection interrupted if (n < 0) error("error writing to socket"); /* Hack for bzero () */ void resetbuffer(char buffer[], int size) int i=0; for (i =0; i < size; i ++) buffer [ i ] = 0; Python Client: #!/usr/bin/python # import socket REMOTE_FUNCTION_GET_TEMP_1 = "gettemp1" REMOTE_FUNCTION_GET_TEMP_2 = "gettemp2" REMOTE_FUNCTION_SHUTDOWN = "shutdown" HOST_ADDRESS = ' ' HOST_PORT = 5555 def gettemp(method = REMOTE_FUNCTION_GET_TEMP_1, host= HOST_ADDRESS, port = HOST_PORT): s = socket.socket(socket.af_inet, socket.sock_stream) s.connect((host, port)) s.send(method) data = s.recv(1024) s.close()

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

Anleitung VM-Installation Ubuntu

Anleitung VM-Installation Ubuntu Anleitung VM-Installation Ubuntu [Bei weiteren Fragen wenden Sie sich bitte an vmwareadmin@uni-trier.de] Inhalt Installation Betriebssystem:... 2 1.Installation der VMware-Tools per Linux-Repository...

Mehr

[HowTo] NZBGet Geschrieben von Per - 02 Aug :41

[HowTo] NZBGet Geschrieben von Per - 02 Aug :41 [HowTo] NZBGet Geschrieben von Per - 02 Aug 2011 08:41 Ich habe die Installation von NZBGet mal zusammengefasst. Die ganze Anleitung ist nur durch Julius entstanden, ohne ihn wäre diese Anleitung zustande

Mehr

Die Überwachung lokaler Server Parameter durch den Local Check erfordert die Installation eines Monitoring Agents auf dem überwachten Server.

Die Überwachung lokaler Server Parameter durch den Local Check erfordert die Installation eines Monitoring Agents auf dem überwachten Server. 1 Local Monitor Die Überwachung lokaler Server Parameter durch den Local Check erfordert die Installation eines Monitoring Agents auf dem überwachten Server. ServerGuard24 unterstützt zwei Open Source

Mehr

Bios-Update Anleitung mit Q-Flash. Wichtige Hinweise!

Bios-Update Anleitung mit Q-Flash. Wichtige Hinweise! Bios-Update Anleitung mit Q-Flash. Ein Bios Update mit dem im Bios integrierten Tool Q-Flash ist die sicherste Methode. Wichtige Hinweise! 1.) Anwender, die RAID im Bios eingestellt haben, sollten die

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

PeakTech Zeitprogramm erstellen über Excel - Beispiel / Timed programs with Excel Example

PeakTech Zeitprogramm erstellen über Excel - Beispiel / Timed programs with Excel Example PeakTech 6180 Zeitprogramm erstellen über Excel - Beispiel / Timed programs with Excel Example 1. Excel Datei erstellen / Create Excel file Öffnen Sie Excel und erstellen eine xls-datei unter einem beliebigen

Mehr

Order Ansicht Inhalt

Order Ansicht Inhalt Order Ansicht Inhalt Order Ansicht... 1 Inhalt... 1 Scope... 2 Orderansicht... 3 Orderelemente... 4 P1_CHANG_CH1... 6 Function: fc_ins_order... 7 Plug In... 8 Quelle:... 8 Anleitung:... 8 Plug In Installation:...

Mehr

Aufgabenblatt 6 Musterlösung

Aufgabenblatt 6 Musterlösung Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 6 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2018/19 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist

Mehr

Network-Attached Storage mit FreeNAS

Network-Attached Storage mit FreeNAS Network-Attached Storage mit FreeNAS Diese Anleitung zeigt das Setup eines NAS-Servers mit FreeNAS. FreeNAS basiert auf dem OS FreeBSD und unterstützt CIFS (samba), FTP, NFS, RSYNC, SSH, lokale Benutzer-Authentifizierung

Mehr

IPCOP Version VPN von Blau auf Grün mit Zerina und OpenVPN

IPCOP Version VPN von Blau auf Grün mit Zerina und OpenVPN IPCOP Version 1.4.10 VPN von Blau auf Grün mit Zerina und OpenVPN Grundsätzliches Dieses Tutorial setzt eine Funktionierente Grundkonfiguration wie in dem Tutorial zur Installation des IPcop voraus (www.ipcop.org).

Mehr

Versuch 5: Linux embedded

Versuch 5: Linux embedded Ziel Installieren des Betriebssystems Raspian auf einem Raspberry mit anschließender Konfiguration und Installation weiterer Programme unter Linux. Greifen Sie auf diese Dienste von einer zweiten Arbeitsstation

Mehr

EMCO Installationsanleitung / Installation instructions

EMCO Installationsanleitung / Installation instructions EMCO Installationsanleitung / Installation instructions Installationsanleitung Installation instructions Digitalanzeige digital display C40, FB450 L, FB600 L, EM 14D/17D/20D Ausgabe / Edition B 2012-03

Mehr

In diesem Beispiel verwende ich einen Raspberry Pi 3 (wg. Ethernetanschluss) mit einem MMDVM Hat Klon.

In diesem Beispiel verwende ich einen Raspberry Pi 3 (wg. Ethernetanschluss) mit einem MMDVM Hat Klon. Pi-Star für lokale Benutzung einrichten In diesem Beispiel verwende ich einen Raspberry Pi 3 (wg. Ethernetanschluss) mit einem MMDVM Hat Klon. Lade das aktuelle Pi-Star Image herunter und schreibe es auf

Mehr

yasxtouch Firmware Update

yasxtouch Firmware Update Inhaltsverzeichnis /Content Inhalt Inhaltsverzeichnis /Content... 1 1. Funktionsweise / Functionality... 2 2. Speichern der Einstellungen / Backup Settings... 2 2.1 Anmelden am Serveradmin / Login Serveradmin...

Mehr

EleLa - Elektronik Lagerverwaltung. Hilfe. Installation auf einem Raspberry Pi

EleLa - Elektronik Lagerverwaltung. Hilfe. Installation auf einem Raspberry Pi EleLa - Elektronik Lagerverwaltung Hilfe Installation auf einem Raspberry Pi Diese Beschreibung ist für einen RaspberryPi 3 B+ getestet. Da sich die OpenSource gemeinde ständig verbessert kann das Vorgehen

Mehr

Aufgabenblatt 5 Musterlösung

Aufgabenblatt 5 Musterlösung Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 5 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2017/18 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist

Mehr

mjpg-streamer Installation

mjpg-streamer Installation mjpg-streamer Installation Installation des mjpg-streamer. 15. März 2016 https://www.doorpi.org/forum/thread/36-installation-des-mjpg-streamer/?postid=6271 &highlight=mjpg-streamer#post6271 sudo apt-get

Mehr

mit Winzip oder anderem Programm auf PC entpacken => xxx.img-datei mit Win32Diskimager die xxx.img-datei auf Micro-SD-Card >= 4GB schreiben

mit Winzip oder anderem Programm auf PC entpacken => xxx.img-datei mit Win32Diskimager die xxx.img-datei auf Micro-SD-Card >= 4GB schreiben Raspbian installieren Download hier: https://www.raspberrypi.org/downloads/raspbian/ Für Systeme mit Monitor wird DESKTOP für Serversysteme ohne Monitor (headless) wird LITE empfohlen (Putty erforderlich)

Mehr

Installationsanleitung

Installationsanleitung 1. C Installationsanleitung C-Programmierung mit Hilfe von Eclipse unter Windows XP mit dem GNU C-Compiler (GCC) 2. Inhaltsverzeichnis 1. Einleitung... 3 2. Cygwin... 3 2.1 Cygwin-Installation... 3 2.2

Mehr

APPMODULE A:SMB DOCUMENTATION. v Alto HiFi AG Gublenstrasse 1 CH-8733 Eschenbach tel +41 (0)

APPMODULE A:SMB DOCUMENTATION. v Alto HiFi AG Gublenstrasse 1 CH-8733 Eschenbach tel +41 (0) APPMODULE A:SMB DOCUMENTATION v1.2.00 Alto HiFi AG Gublenstrasse 1 CH-8733 Eschenbach tel +41 (0)55 254 90 90 altohifi.ch 1 Inhaltsverzeichnis 1. Funktion 3 2. Anwendung 3 3. Lizenzen 3 4. Konfiguration

Mehr

Installation von Zope, Plone, exam auf OSS

Installation von Zope, Plone, exam auf OSS Ein Projekt von: Bryjak, Dimitri (dimitribryjak@gmx.de) Grütter, Marcel (bazookamania@gmx.net) Sorge, Jan Frederik (info@frehde.de) Inhaltsverzeichnis Installation von Zope, Plone, exam auf OSS... 1 1.1

Mehr

bizhub Evolution SECURITY CUBE bizhub Evolution Installationsanleitung Version: 1.0

bizhub Evolution SECURITY CUBE bizhub Evolution Installationsanleitung Version: 1.0 bizhub Evolution SECURITY CUBE Installationsanleitung Version: 1.0 bizhub Evolution Spezifikationen 2 Inhaltsverzeichnis Spezifikationen... 3 Vorbereitung... 3 Import... 4 Registrierung... 9 Konfiguration...

Mehr

Quick Guide Home Network Mode

Quick Guide Home Network Mode Quick Guide Home Network Mode English > 1 German > 3 About the Home Network Mode EN Tivizen Nano & iplug normally work on their own created networks (whose SSID starts with tivizentv or iplug ) in which

Mehr

Schulfilter Plus Installationsanleitung Debian 8

Schulfilter Plus Installationsanleitung Debian 8 Schulfilter Plus Installationsanleitung Debian 8 1 Allgemein Inhaltsverzeichnis 1 Allgemein... 3 2 Konfiguration der Paketverwaltung... 3 2.1 Sicherung der Konfiguration... 3 2.2 Bereinigung des Systems...

Mehr

Netzwerktechnik Cisco CCNA

Netzwerktechnik Cisco CCNA 5 min Hyperterminal - Einstellungen Einstellung des Hyperterminals Eine Möglichkeit, den Router zu konfigurieren oder zu programmieren, ist eine direkte Verbindung dazu über einen PC. Der PC stellt dem

Mehr

Xen mit virtueller Maschine auf Debian installieren

Xen mit virtueller Maschine auf Debian installieren Xen mit virtueller Maschine auf Debian installieren Um Xen mit einer VM zu installieren, sollte man eine performante Hardware haben. Anforderung für Virtualisierung: ein DualCore mit VT (Virtualisierungs-Unterstützung)

Mehr

Einrichten des Raspberry Pi

Einrichten des Raspberry Pi Einrichten des Raspberry Pi RPi-PC Tel: +49 (0)491 6008 700 Fax: +49 (0)491 6008 99 700 Mail: info@ entwicklung.eq-3.de Version 1.0 Autor: eq-3 Entwicklung GmbH Erstelldatum: 14. Januar 2019 Letzte Aktualisierung:

Mehr

Virtueller Campus. Virtueller Campus Horw mit interaktiver Steuerung. HowTo: Server in Betrieb nehmen

Virtueller Campus. Virtueller Campus Horw mit interaktiver Steuerung. HowTo: Server in Betrieb nehmen Virtueller Campus Virtueller Campus Horw mit interaktiver Steuerung HowTo: Bachelor Diplomarbeit FS 2013 HowTo: Inhaltsverzeichnis 1. EINLEITUNG... 1 2. WONDERLAND.JAR AUF SERVER KOPIEREN... 1 3. NUTZUNG

Mehr

Bios update Anleitung mit Q-Flash im 2D Bios. Wichtige Hinweise!

Bios update Anleitung mit Q-Flash im 2D Bios. Wichtige Hinweise! Bios update Anleitung mit Q-Flash im 2D Bios. Wichtige Hinweise! 1.) Anwender, die RAID im Bios eingestellt haben, sollten die Stromversorgung zu den Platten trennen. Nach dem Bios update und "Load Optimized

Mehr

LCD Display 20x4 mit Buttons

LCD Display 20x4 mit Buttons Ausgabe 10.11.2017 Copyright by Joy-IT 1 Index 1. Anschluss des Displays 2. Installation des Systems 3. Verwendung & Beispiel-Code 4. Support Ausgabe 10.11.2017 Copyright by Joy-IT 2 Sehr geehrter Kunde,

Mehr

Kurzbeschreibung BNC2 - BACnet Gateway Erweiterung für den SNMP / WEB / MODBUS Manager CS121/CS141

Kurzbeschreibung BNC2 - BACnet Gateway Erweiterung für den SNMP / WEB / MODBUS Manager CS121/CS141 Version: 2016-06-15 Kurzbeschreibung BNC2 - BACnet Gateway Erweiterung für den SNMP / WEB / MODBUS Manager CS121/CS141 Installation des Gateways und Konfiguration des CS121/CS141 Konfiguration des CS121

Mehr

Konfigurieren von Multiplex Geräten (Sensoren, Empfänger, Souffleur) sowie Datensicherung von Multiplex Sendern unter Linux

Konfigurieren von Multiplex Geräten (Sensoren, Empfänger, Souffleur) sowie Datensicherung von Multiplex Sendern unter Linux Version: 03.03.2015 / 1 Konfigurieren von Multiplex Geräten (Sensoren, Empfänger, Souffleur) sowie Datensicherung von Multiplex Sendern unter Linux Einleitung Zur Konfiguration und Datensicherung von aktuellen

Mehr

VPN-Client Apple macos El Capitan (10.11)

VPN-Client Apple macos El Capitan (10.11) VPN-Client Apple macos El Capitan (10.11) Konfiguration und Installation des internen VPN-Clients und Cisco AnyConnect VPN-Clients Configuring and installing the internal VPN client and Cisco AnyConnect

Mehr

LK-Baseboard für Raspberry Pi B+ / Pi 2

LK-Baseboard für Raspberry Pi B+ / Pi 2 LK-Baseboard für Raspberry Pi B+ / Pi 2 Sehr geehrter Kunde, vielen Dank, dass Sie sich für unser Produkt entschieden haben. Im Folgenden haben wir aufgelistet, was bei der Inbetriebnahme zu beachten ist:

Mehr

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren Institut für Informatik Alina Barendt und Philipp Hagemeister Netzwerksicherheit Musterlösung Übungsblatt 4: Viren 1 Vorbereitung msg db "Virus" mov ah, 40h mov bx, 1 mov cx, $5 mov dx, msg int 21h ; Write

Mehr

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Java Tools JDK. IDEs.  Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation Java Tools JDK http://www.oracle.com/technetwork/java/javase/ Downloads IDEs Java SE 8 Java SE 8 Documentation Eclipse http://www.eclipse.org IntelliJ http://www.jetbrains.com/idea/ NetBeans https://netbeans.org/

Mehr

am besten erst den ganzen Abschnitt lesen, besonders das mit dem patch!

am besten erst den ganzen Abschnitt lesen, besonders das mit dem patch! Doorpi installieren am besten erst den ganzen Abschnitt lesen, besonders das mit dem patch! https://www.doorpi.org/forum/lexicon/entry/1-installation-doorpi-mittels-pypi-auf-einemraspberry-pi-raspbian/

Mehr

VPN-Client Apple macos El Capitan (10.11)

VPN-Client Apple macos El Capitan (10.11) VPN-Client Apple macos El Capitan (10.11) Konfiguration und Installation des internen VPN-Clients und Cisco AnyConnect VPN-Clients Configuring and installing the internal VPN client and Cisco AnyConnect

Mehr

Bedienungsanleitung / Manual : LED-Nixie

Bedienungsanleitung / Manual : LED-Nixie Bedienungsanleitung / Manual : LED-Nixie English please see below. Bei Neustart und gleichzeitig gedrückter Taste während der Versionsanzeige (halten bis Beep hörbar), erfolgt eine Zurücksetzung auf (Standard)

Mehr

USB -> Seriell Adapterkabel Benutzerhandbuch

USB -> Seriell Adapterkabel Benutzerhandbuch USB -> Seriell Adapterkabel Benutzerhandbuch 1. Produkt Eigenschaften 1 2. System Vorraussetzungen 1 3. Treiber Installation (Alle Windows Systeme) 1 4. Den COM Port ändern 2 5. Einstellen eines RS232

Mehr

I2C Serial 2.6 LCD Modul

I2C Serial 2.6 LCD Modul Ausgabe 08.09.2017 Copyright by Joy-IT 1 Index 1. Verwendung mit einem Arduino 1.1 Anschließen des Displays 1.2 Installation der Bibliothek 1.3 Beispiel-Code 2. Verwendung mit einem Raspberry Pi 2.1 Installation

Mehr

Installation and update of the Schiebel SmartTool2. Installation und Update des Schiebel SmartTool2

Installation and update of the Schiebel SmartTool2. Installation und Update des Schiebel SmartTool2 Installation and update of the Schiebel SmartTool2 Installation und Update des Schiebel SmartTool2 KD_Installation_SmartTool2_en_de_Customer_documentation 20181018.docx VA: 18.10.2018 Page 1 of 7 1 English

Mehr

Zugriff auf die Konsole Bootvorgang des Storage Systems Einrichtung Upgrades Zeitsynchronisation des Storage Systems

Zugriff auf die Konsole Bootvorgang des Storage Systems Einrichtung Upgrades Zeitsynchronisation des Storage Systems 3 Installation und Konfiguration Installation und Erstkonfiguration des Storage Systems. 3.1 Übersicht Themen des Kapitels Installation und Konfiguration Themen des Kapitels Zugriff auf die Konsole Bootvorgang

Mehr

Free MC Boot per PS1 Exploit installieren

Free MC Boot per PS1 Exploit installieren Free MC Boot per PS1 Exploit installieren Geschrieben von: am 23.11.2012 fürs PS3-Tools Forum 1.) Benötigte Hard & Software: PS2 Fat Konsole bis V10 / nicht für PS2 Slim geeignet!!! 8 MB Memory Card -

Mehr

C A L D E R A G R A P H I C S

C A L D E R A G R A P H I C S C A L D E R A G R A P H I C S Wie geht das? Drucken zu Caldera von Clients aus dem Netzwerk Caldera Graphics 2008 Caldera Graphics und alle Caldera Graphics Produkte, die in dieser Publikation genannt

Mehr

pwd mkdir Zeigt das aktuelle Verzeichnis an Beispiel: pwd

pwd mkdir Zeigt das aktuelle Verzeichnis an Beispiel: pwd ls Listet Dateien und Verzeichnisse auf ls (Listet die Dateien und Verzeichnisse in Spalten auf) ls -l (Listet die Datei und Verzeichnisse als ausführliche Liste auf) ls *.sh (Listet nur Datei auf, die

Mehr

I2C Serial 2.6 LCD Modul. Verwendung mit einem Arduino

I2C Serial 2.6 LCD Modul. Verwendung mit einem Arduino I2C Serial 2.6 LCD Modul Sehr geehrter Kunde, vielen Dank, dass Sie sich für unser Produktentschieden haben. Im Folgenden haben wir aufgelistet, was bei der Inbetriebnahme zu beachten ist: Verwendung mit

Mehr

How-To-Do. OPC-Server with MPI and ISO over TCP/IP Communication. Content. How-To-Do OPC-Server with MPI- und ISO over TCP/IP Communication

How-To-Do. OPC-Server with MPI and ISO over TCP/IP Communication. Content. How-To-Do OPC-Server with MPI- und ISO over TCP/IP Communication How-To-Do OPC-Server with MPI and ISO over TCP/IP Content OPC-Server with MPI and ISO over TCP/IP... 1 1 General... 2 1.1 Information... 2 1.2 Reference... 2 2 Procedure for the Setup of the OPC Server...

Mehr

RFID RC522. Ausgabe Copyright by Joy-IT 1

RFID RC522. Ausgabe Copyright by Joy-IT 1 3 RFID RC522 Ausgabe 09.06.2017 Copyright by Joy-IT 1 3 RFID RC522 Index 1. Verwendung mit einem Arduino 1.1 Anschließen des Moduls 1.2 Installation des Moduls 2. Verwendung mit einem Raspberry Pi 2.1

Mehr

Leitfaden für die Installation der freien Virtual Machine. C-MOR Videoüberwachung auf einem VMware ESX Server

Leitfaden für die Installation der freien Virtual Machine. C-MOR Videoüberwachung auf einem VMware ESX Server Diese Anleitung illustriert die Installation der Videoüberwachung C-MOR Virtuelle Maschine auf VMware ESX Server. Diese Anleitung bezieht sich auf die Version 4 mit 64-Bit C-MOR-Betriebssystem. Bitte laden

Mehr

mit Winzip oder anderem Programm auf PC entpacken => xxx.img-datei mit Win32Diskimager die xxx.img-datei auf Micro-SD-Card >= 4GB schreiben

mit Winzip oder anderem Programm auf PC entpacken => xxx.img-datei mit Win32Diskimager die xxx.img-datei auf Micro-SD-Card >= 4GB schreiben Raspbian installieren Download hier: https://www.raspberrypi.org/downloads/raspbian/ Für Systeme mit Monitor wird DESKTOP für Serversysteme ohne Monitor (headless) wird LITE empfohlen (Putty erforderlich)

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik

Mehr

Zusätzlich Tipps und Informationen

Zusätzlich Tipps und Informationen Zusätzlich Tipps und Informationen Sollten sie SQLite anstelle von MySQL nutzen wollen, können sie die überflüssigen Pakete mit folgenden Befehlen deinstallieren: sudo apt-get purge mysql-server mysql-client

Mehr

HowTo OpenVPN Client mit öffentlich erreichbaren Feste IP Adressen

HowTo OpenVPN Client mit öffentlich erreichbaren Feste IP Adressen HowTo OpenVPN Client mit öffentlich erreichbaren Feste IP Adressen Ziel Als Ziel der Installation wird es folgende Szenario mit IPFire implementiert. (Quelle : http://www.portunity.de/access/wiki/beispiel-szenarien_von_vpn-tunneln_auf_pptp-

Mehr

Konfiguration und Installation des Cisco-AnyConnect VPN-Clients. Configuring and installing the Cisco AnyConnect VPN client

Konfiguration und Installation des Cisco-AnyConnect VPN-Clients. Configuring and installing the Cisco AnyConnect VPN client VPN-Client Linux Konfiguration und Installation des Cisco-AnyConnect VPN-Clients Configuring and installing the Cisco AnyConnect VPN client 09.10.2018 kim.uni-hohenheim.de kim@uni-hohenheim.de Über den

Mehr

VPN für Linux (Ubuntu + Kubuntu)

VPN für Linux (Ubuntu + Kubuntu) VPN für Linux (Ubuntu + Kubuntu) Cisco AnyConnect auf Ubuntu 12 1. Öffnen Sie die Webseite https://sslvpn.ethz.ch in ihrem Browser und loggen Sie sich ein. 2. Warten Sie bis der WebLaunch den automatischen

Mehr

EXP500. Ausgabe Copyright by Joy-IT 1

EXP500. Ausgabe Copyright by Joy-IT 1 3 3 EXP500 Ausgabe 07.12.2016 Copyright by Joy-IT 1 Contents 1. Anschlüsse 2. Einführung 3. Basis Operationen 3.1 System Image-Datei Installation 3.2 Serielle Debug Umgebung installieren 4. Installieren

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

TECHNICAL SUPPORT BULLETIN TLS4/TLS4B Thema: Verwendung von Putty an der seriellen RS-232 oder an der Netzwerk Schnittstelle über Port

TECHNICAL SUPPORT BULLETIN TLS4/TLS4B Thema: Verwendung von Putty an der seriellen RS-232 oder an der Netzwerk Schnittstelle über Port TECHNICAL SUPPORT BULLETIN TLS4/TLS4B Thema: Verwendung von Putty an der seriellen RS-232 oder an der Netzwerk Schnittstelle über Port 10001. Kategorie: Konfiguration No. 16_005 Erstellt am: 12.02.2016

Mehr

Softwareupdate-Anleitung // Porty L 600 / Porty L 1200

Softwareupdate-Anleitung // Porty L 600 / Porty L 1200 Softwareupdate-Anleitung // Porty L 600 / Porty L 1200 1 Softwareupdate-Anleitung // Porty L 600 / Porty L 1200 HENSEL-VISIT GmbH & Co. KG Robert-Bunsen-Str. 3 D-97076 Würzburg-Lengfeld GERMANY Tel./Phone:

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

VMWare 3.0. Vmware Installation: - Install VMWARE. - c:\ Programme \ VMWARE. - CD Autorun disable / ja

VMWare 3.0. Vmware Installation: - Install VMWARE. - c:\ Programme \ VMWARE. - CD Autorun disable / ja Vmware Installation: - Install VMWARE - c:\ Programme \ VMWARE - CD Autorun disable / ja C:\hermann\kuchta\vmware.doc Seite 1 von 16 DAT 24.05.2003 - Digitale Signatur nicht vorhanden trotzdem installieren

Mehr

Projekt: Web-Server. Foliensatz 9: Projekt Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2014

Projekt: Web-Server. Foliensatz 9: Projekt Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2014 Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)

Mehr

JTAGMaps Quick Installation Guide

JTAGMaps Quick Installation Guide Index Index... 1 ENGLISH... 2 Introduction... 2 Requirements... 2 1. Installation... 3 2. Open JTAG Maps... 4 3. Request a free JTAG Maps license... 4 4. Pointing to the license file... 5 5. JTAG Maps

Mehr

Linux-Camp: Linux als Server am Beispiel LAMP

Linux-Camp: Linux als Server am Beispiel LAMP Linux-Camp: Linux als Server am Beispiel LAMP Linux, Apache, MySQL, PHP mit Ubuntu Version 8.04 Inhalt LAMP-Komponenten LAMP-Komponenten installieren, konfigurieren und prüfen Apache Webserver PHP5 MySQL

Mehr

Raspberry als Cloud Server (Next Cloud / Owncloud)

Raspberry als Cloud Server (Next Cloud / Owncloud) Raspberry als Cloud Server (Next Cloud / Owncloud) Grundeinrichtung Ein Hinweis vorab: Sollte man keinen Monitor haben um ihn an den Raspi anzuschließen, kann man ssh von einem belieben PC mit SD-Kartenleser

Mehr

QNAP NAS Software RAID Management

QNAP NAS Software RAID Management QNAP NAS Software RAID Management Troubleshooting für Situationen in denen eine Festplatte im RAID fehlt und das RAID im degraded Modus ist. QNAP nutzt das sogenannte mdadm Tool für das interne RAID Management.

Mehr

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016 to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you

Mehr

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer Allgemeines Shell Programmierung Unix Shell Scripts Unix Ein shell script ist eine Textdatei, welche eine Liste von Befehlen (Standard Unix Befehle) beinhaltet. Diese Datei kann durch Aufrufen ausgeführt

Mehr

Linux Tutorium. Linux Tutorium Systemkonfiguration. Linux Tutorium Systemkonfiguration Seite: 1

Linux Tutorium. Linux Tutorium Systemkonfiguration. Linux Tutorium Systemkonfiguration Seite: 1 Linux Tutorium Linux Tutorium Systemkonfiguration Linux Tutorium Systemkonfiguration Seite: 1 Der Bootvorgang Beim starten des Linux-Systems muss vor allem eins getan werden: laden und starten des Kernels.

Mehr

Automatisierte Installation der ESXi Hosts (z.b. für Disaster Recovery).

Automatisierte Installation der ESXi Hosts (z.b. für Disaster Recovery). 2 Automatisierte Installation Automatisierte Installation der ESXi Hosts (z.b. für Disaster Recovery). 2.1 Übersicht Themen des Kapitels Automatisierte Installation Themen des Kapitels Übersicht automatisierte

Mehr

REG-PE Kurzbetriebsanleitung

REG-PE Kurzbetriebsanleitung REG-PE Quick Guide - 1/11 - www.tele-data.de www..de REG-PE Kurzbetriebsanleitung Für Schnelleinstieg und Installation der Fernwirkkommunikationsbaugruppe REG-PE mit IEC61850 und IEC 60870-5-104 in Verbindung

Mehr

Übungsstunde: Informatik 1 D-MAVT

Übungsstunde: Informatik 1 D-MAVT Übungsstunde: Informatik 1 D-MAVT Daniel Bogado Duffner Übungsslides unter: n.ethz.ch/~bodaniel Bei Fragen: bodaniel@student.ethz.ch Daniel Bogado Duffner 25.04.2018 1 Ablauf Self-Assessment Pointer Iterators

Mehr

Schulfilter Plus Installationsanleitung Ubuntu 12.04

Schulfilter Plus Installationsanleitung Ubuntu 12.04 Schulfilter Plus Installationsanleitung Ubuntu 12.04 1 Allgemein Inhaltsverzeichnis 1 Allgemein... 3 2 Konfiguration der Paketverwaltung... 3 2.1 Sicherung der Konfiguration... 3 2.2 Bereinigung des Systems...

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

Dokumentation Gruppe 6 Betz, Escher. Subnetserver in bestehendem Netzwerk

Dokumentation Gruppe 6 Betz, Escher. Subnetserver in bestehendem Netzwerk Dokumentation Gruppe 6 Betz, Escher Subnetserver in bestehendem Netzwerk Installationsanleitung für Gruppe 6 (g6.loc) Server (rdf.loc) = gateway0406 192.168.99.117 Subserver (g6.loc) = pc13 192.168.6.1

Mehr

Installation. Schulfilter Plus Installationsanleitung Ubuntu und Ubuntu 16.04

Installation. Schulfilter Plus Installationsanleitung Ubuntu und Ubuntu 16.04 Installation Schulfilter Plus Installationsanleitung Ubuntu 14.04 und Ubuntu 16.04 1 Inhaltsverzeichnis 1 Installation... 3 1.1 Vor der Installation... 3 1.1.1 Empfohlene Betriebssysteme... 3 1.1.2 Generelle

Mehr

Informatik für Mathematiker und Physiker Woche 7. David Sommer

Informatik für Mathematiker und Physiker Woche 7. David Sommer Informatik für Mathematiker und Physiker Woche 7 David Sommer David Sommer 30. Oktober 2018 1 Heute: 1. Repetition Floats 2. References 3. Vectors 4. Characters David Sommer 30. Oktober 2018 2 Übungen

Mehr

1 LINUX-CHEATSHEET (symbolischer Name localhost ) ist der jeweils aktuelle

1 LINUX-CHEATSHEET (symbolischer Name localhost ) ist der jeweils aktuelle 1 LINUX-CHEATSHEET 1 27.07.2006 1 Linux-Cheatsheet 1.1 Netzwerk 1.1.1 Schichten "Kabelphysik" Binäre Daten Ethernet IP TCP HTTP, SSH,... 1.1.2 Lokale IP-Adressen 192.168.x.y 172.16.x.y-172.32.x.y 10.x.y.z

Mehr

Cameraserver mini. commissioning. Ihre Vision ist unsere Aufgabe

Cameraserver mini. commissioning. Ihre Vision ist unsere Aufgabe Cameraserver mini commissioning Page 1 Cameraserver - commissioning Contents 1. Plug IN... 3 2. Turn ON... 3 3. Network configuration... 4 4. Client-Installation... 6 4.1 Desktop Client... 6 4.2 Silverlight

Mehr

Technische Praxis der Computersysteme. Technische Praxis der Computersysteme

Technische Praxis der Computersysteme. Technische Praxis der Computersysteme Shell: Alternative zu grafischer Oberfläche. Weniger Abstraktion, dafür mehr Kontrolle Shell: Alternative zu grafischer Oberfläche. Weniger Abstraktion, dafür mehr Kontrolle Eingaben: Befehle & Parameter,

Mehr

Laufwerke unter Linux - Festplatten - - USB Sticks - September 2010 Oliver Werner Linuxgrundlagen 1

Laufwerke unter Linux - Festplatten - - USB Sticks - September 2010 Oliver Werner Linuxgrundlagen 1 Laufwerke unter Linux - Festplatten - - USB Sticks - September 2010 Oliver Werner Linuxgrundlagen 1 Wie wird auf Festplatten zugegriffen? Es gibt nur einen Verzeichnisbaum, siehe Verzeichnisse Es gibt

Mehr

JiveSoftware Jive Connector

JiveSoftware Jive Connector JiveSoftware Jive Connector Installation und Konfiguration Version 2017 Summer Release Status: 5. Oktober 2017 Copyright Mindbreeze GmbH, A-4020 Linz, 2017. Alle Rechte vorbehalten. Alle verwendeten Hard-

Mehr

Kommunikationsnetze. 2. Direkte TCP/IP-Verbindungen 2.1 Höhere Programmiersprachen

Kommunikationsnetze. 2. Direkte TCP/IP-Verbindungen 2.1 Höhere Programmiersprachen Kommunikationsnetze Gliederung 1. Socket-Programmierung unter C 2. Socket-Programmierung unter Java Gliederung Berkeley Sockets (Erste freie TCP/IP-Implementierung in Berkeley UNIX): SOCKET: Erzeugen eines

Mehr

Raspberry Workshop. User des Raspberry abmelden: Folgende befehle werden angenommen: Logout / Exit oder die Tastenkombination Ctl + D

Raspberry Workshop. User des Raspberry abmelden: Folgende befehle werden angenommen: Logout / Exit oder die Tastenkombination Ctl + D Raspberry Workshop Es gibt mehrere Betriebssysteme. Empfehlenswert ist Noobs Installation Installation ohne Tastatur und Bildschirm! In die Datei recovery.cmdline wird am Ende der Eintrag: silentinstall

Mehr

Installation. Schulfilter Plus Installationsanleitung Debian 8 (Jessie) und Debian 9 (Stretch)

Installation. Schulfilter Plus Installationsanleitung Debian 8 (Jessie) und Debian 9 (Stretch) Installation Schulfilter Plus Installationsanleitung Debian 8 (Jessie) und Debian 9 (Stretch) 1 Inhaltsverzeichnis 1 Installation... 3 1.1 Vor der Installation... 3 1.1.1 Empfohlene Betriebssysteme...

Mehr

Willkommen! Verdrahten des Panels mit dem Raspberry Pi:

Willkommen! Verdrahten des Panels mit dem Raspberry Pi: Willkommen! Und herzlichen Dank für den Kauf unseres AZ-Delivery U-64-LED-Panel für den Raspberry Pi oder Arduino. Auf den folgenden Seiten gehen wir mit dir gemeinsam die ersten Schritte von der Einrichtung

Mehr

UCON UCON Kurzanleitung Inbetriebnahme

UCON UCON Kurzanleitung Inbetriebnahme UCON UCON Kurzanleitung Inbetriebnahme copyright G&D 24/08/2005 Irrum und techn. Änderungen vorbehalten 1. Was Sie zur Installation benötigen - UCON - 1:1 belegtes CAT-x Patchkabel - Kaltgerätekabel -

Mehr

RFID RC522. Ausgabe Copyright by Joy-IT 1

RFID RC522. Ausgabe Copyright by Joy-IT 1 3 3 RFID RC522 Ausgabe 28.09.2016 Copyright by Joy-IT 1 3 RFID RC522 Index 1. Verwendung mit einem Arduino 1.1 Anschließen des Moduls 1.2 Installation des Moduls 2. Verwendung mit einem Raspberry Pi 2.1

Mehr

Verdrahten des GPS Empfängers mit dem Raspberry Pi:

Verdrahten des GPS Empfängers mit dem Raspberry Pi: Willkommen! Und herzlichen Dank für den Kauf unseres AZ-Delivery NEO-6M GPS Moduls für den Raspberry Pi, Arduino oder PC! Auf den folgenden Seiten gehen wir mit dir gemeinsam die ersten Schritte von der

Mehr

EX x RS-232 zu Ethernet / IP. Bedienungsanleitung. 7. Anschlüsse. 8. Technische Daten. Seriell 9 Pin D-SUB Stecker

EX x RS-232 zu Ethernet / IP. Bedienungsanleitung. 7. Anschlüsse. 8. Technische Daten. Seriell 9 Pin D-SUB Stecker 7. Anschlüsse Bedienungsanleitung Seriell 9 Pin D-SUB Stecker Pin Signal Pin Signal Pin Signal 1 DCD 4 DTR 7 RTS 2 RXD 5 GROUND 8 CTS 3 TXD 6 DSR 9 DB 9M EX-6034 8. Technische Daten Stromanschluss: 5V

Mehr

Dieses Modul benötigt eine funktionierende Installation von LibreOffice/OpenOffice und ein Java Runtime Environment.

Dieses Modul benötigt eine funktionierende Installation von LibreOffice/OpenOffice und ein Java Runtime Environment. Office-Import / SearchPlus Dieses Modul benötigt eine funktionierende Installation von LibreOffice/OpenOffice und ein Java Runtime Environment. LibreOffice/OpenOffice muss beim Systemstart als Dienst gestartet

Mehr

Einrichten der TSM-Backup-Software unter dem Betriebssystem Windows

Einrichten der TSM-Backup-Software unter dem Betriebssystem Windows Einrichten der TSM-Backup-Software unter dem Betriebssystem Windows TSM-Service 14.09.2016 1 Inhaltsverzeichnis 1. INSTALLATION 3 2. KONFIGURATION 9 3. EINRICHTUNG DER TSM-DIENSTE ZUR AUTOMATISCHEN SICHERUNG

Mehr

Configuring and installing the Cisco AnyConnect VPN client

Configuring and installing the Cisco AnyConnect VPN client VPN-Client Linux Konfiguration und Installation des Cisco-AnyConnect VPN-Clients Configuring and installing the Cisco AnyConnect VPN client 17. Juli 2017 kim.uni hohenheim.de kim@uni hohenheim.de Über

Mehr