Inhaltsverzeichnis Einführung Vorbereitung NGW100 Inbetriebnahme Entwicklungsumgebung einrichten Anwendungsbeispiele Schnittstellen auf dem NGW100
|
|
- Catharina Glöckner
- vor 6 Jahren
- Abrufe
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 Inhaltsverzeichnis Wieso das Ganze? Nachteile Pogoplug/Debian Vorteile Pogoplug/Debian Wieso diese
MehrAnleitung 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 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
MehrDie Ü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
MehrBios-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
Mehr1. 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)
MehrPeakTech 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
MehrOrder 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:...
MehrAufgabenblatt 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
MehrNetwork-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
MehrIPCOP 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).
MehrVersuch 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
MehrEMCO 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
MehrIn 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
Mehryasxtouch 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...
MehrEleLa - 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
MehrAufgabenblatt 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
Mehrmjpg-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
Mehrmit 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)
MehrInstallationsanleitung
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
MehrAPPMODULE 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
MehrInstallation 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
Mehrbizhub 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...
MehrQuick 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
MehrSchulfilter 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...
MehrNetzwerktechnik 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
MehrXen 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)
MehrEinrichten 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:
MehrVirtueller 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
MehrBios 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
MehrLCD 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,
MehrKurzbeschreibung 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
MehrKonfigurieren 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
MehrVPN-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
MehrLK-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:
MehrNetzwerksicherheit 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
MehrJava 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/
Mehram 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/
MehrVPN-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
MehrBedienungsanleitung / 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)
MehrUSB -> 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
MehrI2C 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
MehrInstallation 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
MehrZugriff 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
MehrFree 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 -
MehrC 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
Mehrpwd 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
MehrI2C 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
MehrHow-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...
MehrRFID 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
MehrLeitfaden 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
Mehrmit 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)
MehrInformatik - Ü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
MehrZusä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
MehrHowTo 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-
MehrKonfiguration 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
MehrVPN 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
MehrEXP500. 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
MehrEinfü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
MehrTECHNICAL 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
MehrSoftwareupdate-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:
MehrSwitching. Ü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
MehrVMWare 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
MehrProjekt: 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)
MehrJTAGMaps 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
MehrLinux-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
MehrRaspberry 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
MehrQNAP 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.
MehrIntroduction 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
MehrAllgemeines. 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
MehrLinux 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.
MehrAutomatisierte 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
MehrREG-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 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
MehrSchulfilter 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...
MehrFirmware. 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
MehrDokumentation 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
MehrInstallation. 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
MehrInformatik 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
Mehr1 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
MehrCameraserver 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
MehrTechnische 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,
MehrLaufwerke 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
MehrJiveSoftware 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-
MehrKommunikationsnetze. 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
MehrRaspberry 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
MehrInstallation. 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...
MehrWillkommen! 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
MehrUCON 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 -
MehrRFID 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
MehrVerdrahten 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
MehrEX 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
MehrDieses 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
MehrEinrichten 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
MehrConfiguring 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