Serielle Schnittstelle nutzen

iwow

Neuer User
Mitglied seit
13 Jan 2005
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich habe in dem ein oder anderen Beitrag gelesen, dass man ein Terminal an die interne serielle Schnittstelle anschliessen kann (z.B. für recovery). Kann man auch andere Hardware anschliessen und ganz normal auf /dev/ttyS0 zugreifen, wenn man (wie unter Linux üblich) die console für dieses Device ausschaltet.

Ich möchte gerne eine Kopplung zu meiner Heizungsregelung (EIB Bus) realisieren, um über die Fritz!Box z.B. die Tag- / Nachumschaltung vorzunehmen. Ca. 12 mal am Tag 50 Bytes auf den EIB Bus schicken sollte die Kiste verkraften.

Hat jemand schon Erfahrungen mit anderer Hardware als einem Terminal? Falls ja, gibt es was besonderes zu beachten.

Ich habe bereits eine Software, die für einen UNC20 geschrieben wurde (auch ein Linux Embedded System) die ich portieren müsste (ca. 90 K Executable). Auf welchem Linux Hostsystem kann man die Entwicklungsumgebung betreiben. Ich habe ein Gentoo System als VDR Server (digitaler Videorecorder) im Einsatz.

Danke.

Gruß Wolfgang
 
Hallo iwow,

Das Projekt ist machbar. Die Schnittstelle ist über einen Konverter wie eine
normale RS232 Verbindung zu gebrauchen.
=> http://www.wehavemorefun.de/fritzbox/Main_Page => Hardware => Serielle Konsole

Bisher habe ich die Schnittstelle nur für ein Terminal genutzt.
Für Firmwaremodifikationen und eine Buildanleitung kannst du ach auf der o.a.
Seite schauen.

Im Thread 6666 sind ein paar Skripte, mit denen du sehen kannst wie
man Programme einfach in das Image bekommt.

Die Umgebung ist eine ganz normale Linuxumgebung. Als Buildplattform sollte
dein VDR auch keine Probleme machen.

Viele Grüße,

Haveaniceday
 
Hallo Haveaniceday,

vielen Dank für die schnelle Antwort.

Werde zunächst mal versuchen, ein geeignetes Adapterkabel bei ebay zu finden und die Entwicklungsumgebung auf zu setzen. Ich möchte zunächst so wenig wie möglich an der FB ändern. Welches ist der einfachste Weg, Binaries auf die Box zu bekommen:
- telnet Demon freischalten und per tftp auf meinen Linux PC zugreifen?

Ich denke, es wird noch der ein oder andere Abend vergehen, bis ich wirklich ein geändertes Image brauche. Oder?

Gruß Wolfgang

:wink: Viele Grüße ein meine Heimatstadt Paderborn.
 
Ich habe ein altes Siemens Datenkabel recycled. Vielleicht findest du so eins
im Bekanntenkreis.

Telnetd aktivieren: http://www.ip-phone-forum.de/forum/viewtopic.php?t=6226
tftp ist richtig. Dazu must du einen tftp-Server aufsetzen.

Mit einem geänderten Image hättest du dagegen ( falls enthalten ) ftpput und ftpget bzw. einen ftpd für Fritz.

Viele Grüße aus deiner Heimatstadt :)

Haveaniceday
 
iwow schrieb:
Ich möchte gerne eine Kopplung zu meiner Heizungsregelung (EIB Bus) realisieren, um über die Fritz!Box z.B. die Tag- / Nachumschaltung vorzunehmen. Ca. 12 mal am Tag 50 Bytes auf den EIB Bus schicken sollte die Kiste verkraften.

Denk dran, dass die fbox keinen Hardware-Handschake hat. Du brauchst also eine EIB-Schnittstelle mit FT1.2 Protokoll (IIRC).

Gruß,
Enrik
 
Hallo Enrik,

ja, ich habe eine Schnittstelle mit FT 1.2 Protokoll.

Kennst du dich näher mit dem EIB Protokoll aus?

Ich habe vor, das LEIBnix Programm von

http://www.dehof.de/eib/ auf der FB zu betreiben.

Brauche ich eigendlich für die Entwicklung von eigen Programme unbedingt ein OpenEmbedded Buildsystem, so wie auf http://www.wehavemorefun.de/fritzbox/Main_Page
beschrieben? Ich kenne mich zwar sehr gut mit Linux aus, im Embedded Bereich mache ich gerade erst meine Erfahrungen. Wenn ich OpenEmbedded aufgesetzt habe, brauche ich dann trotzdem noch Dateien von http://www.akk.org/~enrik/fbox/ ? Thread 6666 werde ich mir in den nächsten Tagen noch mal in Ruhe anschauen.

Gruß

iwow
 
LC Display

wäre es vielleicht möglich, ein LC Display an der seriellen Schnittstelle ans Laufen zu kriegen ?
 
@ol@fson,

Die Antwort ist wie im anderen Thread:
..
Machbar ist das bestimmt. Man muss nur eine entsprechende Anwendung schreiben und dann testen.. ;-)
..

@iwow,

für das "crosskompilieren" brauchst du einen Crosskompiler und dieser benötigt ein paar Libraries um die Programme dagegen zu linken.
Mit dem Buildroot von Enrik ( siehe http://www.akk.org/~enrik/fbox/ ) sollte dieses sehr einfach zu erstellen sein. ( Unter Linux )

Haveaniceday
 
@haveaniceday

danke für die Hinweise. Laut Readme sollte es ja wirklich einfach sein, ein BuildSystem zu erstellen. Leider fällt bei mir der Compilevorgang von uClibc mit unten stehende Fehlermeldung.

Irgend welche Ideen?

Beim ersten Make habe ich bei der Frage

Link ldconfig statically (UCLIBC_STATIC_LDCONFIG) [Y/n/?] (NEW)

n (für now) eingegeben. War das korrekt?

iwow


make[3]: Entering directory `/home/eib/buildroot/toolchain_build_mipsel/uClibc/ldso/ldso'
/home/eib/buildroot/build_mipsel/staging_dir/bin/mipsel-linux-uclibc-gcc -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -Os -funit-at-a-time -mno-split-addresses -mips32 -mtune=mips32 -fPIC -DUCLIBC_RUNTIME_PREFIX=\"/\" -fno-builtin -nostdinc -D_LIBC -I../../ldso/include -I. -I../../include -isystem /home/eib/buildroot/build_mipsel/staging_dir/lib/gcc/mipsel-linux-uclibc/3.4.2/include -I../libdl -c ldso.c -o ldso.o
In file included from ../../ldso/include/ldso.h:26,
from ldso.c:32:
../../ldso/include/dl-syscall.h: In function `_dl_exit':
../../ldso/include/dl-syscall.h:63: error: `__NR_exit' undeclared (first use in this function)
../../ldso/include/dl-syscall.h:63: error: (Each undeclared identifier is reported only once
../../ldso/include/dl-syscall.h:63: error: for each function it appears in.)
../../ldso/include/dl-syscall.h: In function `_dl_close':
../../ldso/include/dl-syscall.h:66: error: `__NR_close' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_open':
../../ldso/include/dl-syscall.h:69: error: `__NR_open' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_write':
../../ldso/include/dl-syscall.h:72: error: `__NR_write' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_read':
../../ldso/include/dl-syscall.h:76: error: `__NR_read' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_mprotect':
../../ldso/include/dl-syscall.h:80: error: `__NR_mprotect' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_stat':
../../ldso/include/dl-syscall.h:83: error: `__NR_stat' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_munmap':
../../ldso/include/dl-syscall.h:86: error: `__NR_munmap' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_getuid':
../../ldso/include/dl-syscall.h:89: error: `__NR_getuid' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_geteuid':
../../ldso/include/dl-syscall.h:92: error: `__NR_geteuid' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_getgid':
../../ldso/include/dl-syscall.h:95: error: `__NR_getgid' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_getegid':
../../ldso/include/dl-syscall.h:98: error: `__NR_getegid' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_getpid':
../../ldso/include/dl-syscall.h:101: error: `__NR_getpid' undeclared (first use in this function)
../../ldso/include/dl-syscall.h: In function `_dl_readlink':
../../ldso/include/dl-syscall.h:104: error: `__NR_readlink' undeclared (first use in this function)
ldso.c: In function `_dl_malloc':
ldso.c:925: warning: implicit declaration of function `_dl_mmap'
ldso.c:926: warning: assignment makes pointer from integer without a cast
In file included from ldso.c:944:
dl-elf.c: In function `_dl_load_elf_shared_library':
dl-elf.c:468: warning: assignment makes pointer from integer without a cast
dl-elf.c: In function `_dl_dprintf':
dl-elf.c:793: warning: assignment makes pointer from integer without a cast
make[3]: *** [ldso.o] Error 1
make[3]: Leaving directory `/home/eib/buildroot/toolchain_build_mipsel/uClibc/ldso/ldso'
make[2]: *** [ldso] Error 2
make[2]: Leaving directory `/home/eib/buildroot/toolchain_build_mipsel/uClibc/ldso'
make[1]: *** [_dir_ldso] Error 2
make[1]: Leaving directory `/home/eib/buildroot/toolchain_build_mipsel/uClibc'
make: *** [/home/eib/buildroot/toolchain_build_mipsel/uClibc/lib/libc.a] Error 2
 
Ich tippe auch darauf dass der snapshot "schlecht" ist.
Habe mal irgendwo in den Releasenotes gelesen, dass auch größere
API-Änderungen für das nächste uClibc-Release vorgesehen ist.
Achtung: Die Snapshots verschwinden nach < 30 (?) Tagen.

Für nachste Woche habe ich mir vorgenommen ein Buildroot mit uClibc ( von AVM )
zu erstellen.
Unter ftp://ftp.avm.de/develper/opensrc/ sind die von AVM genutzten Sourcen.
Sonst hätte ich noch eine "uClibc-20041130.tar.bz2". ( PN mit Emailadresse an mich, 1,6 MB)

Viele Grüße,

Haveniceday
 
Hallo,

ich habe mittlerweile meine kleine Applikation für die Fritz!Box übersetzt bekommen (Danke an enrik für die schöne buildroot Umgebung). Das Programm (+ zwei Shared Libraries) habe ich mittels tftp nach /var/tmp übertragen und auch erfolgreich starten können. Nun möchte ich mein Programm (+ Libraries) in ein Image bekommen, dass ich dann mit der Update Funktion ins Flash laden kann.

Welche Wege führen zu diesem Ziel?

Liefert auch die buildroot Umgebung hierfür Tools oder ist es besser, auf mod52 von haveaniceday zurückzureifen und entsprechend anzupassen. Mir liegt viel daran, dass nur meine zusätzlichen Programme ins Image kommen. Alles andere soll (zunächst) unangetastet bleiben.

Grüße aus dem (nicht mehr so) närrischen Aachen :kasper:

iwow
 
Schau dir mal im buildroot/target/fritz Verzeichnis die Datei fritzroot.mk an.
Du kopierst jetzt deine Dateien in ein Verzeichnis und schreibst in die fritzroot.mk, dass er die Dateien von dort nach build_mipsel/tmproot/lib (für die libs) usw. kopiert.

Da kommt aber kein fertiges Image für die Update-Funktion raus.
Das musst du über ftp flashen...

MfG Oliver
 
Also ich sehe noch als Problem, dass sowohl Adam2, als auch der Kernel und einige Prozesse ihre Ausgaben auf die serielle Schnittstelle schreiben. (Einige Prozesse haben fd 0-2 auf ttyS0.) Wenn man da irgendwas anschliesst, könnte das doch sehr verwirrend sein... Oder kann man das irgendwie einstellen (z.B. durch eine env-Variable)?

Außerdem startet ja noch irgendwer eine Shell, wenn man Enter auf der ttyS0 drückt.

Trotzdem kann man ja z.B. mit cat Daten auf das device schreiben. Wie kann das eigtl. gehen, wenn es jemand anderes schon geöffnet hat?

Grüße!
 
Die Shell kommt über:
more /etc/inittab
...
# Start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
....

Dem Kernel kann man bestimmt sagen nicht "ttyS0" als Console zu nehmen.
Weiss aber nicht direkt wie. Auf jeden Fall könnte man dieses fest "einkompilieren".

Enrik könnte das vielleicht sagen wie es ab "kernel start" einfacher geht.

Adam2 wird man kaum stumm kriegen.

Haveaniceday
 
Hallo,

dass sowohl Adam2 wie auch der Kernel auf die Serielle Schnittstelle schreiben habe ich nicht berücksichtigt.

Bevor ich mich also weiter mit "EIB auf der FB" beschöftige muss ich also die serielle Schnittstelle frei bekommen.

Die Linux Konsole von der Schnittstelle weg zu bekommen dürfte wohl nur duch neu übersetzen des Kernels gehen. Hat jemand hier eine Idee, wo ich da nachschauen muss (enrik???). Die "anderen Linux Programme" sollten dann doch wohl auch still sein (oder hat jemand schon mal auf der Fritzbox ein Programm gesehen, dass die Ausgabe von "out und error" auf ttys0 umlenkt.

Bei Adam2 glaube ich fündig geworden zu sein.

Laut /proc/avalanche/env gibt es 3 Adam2 Variablen, die etwas mit der seriellen Schnittstelle zu tun haben.

modetty0 38400,n,8,1,hw
modetty1 38400,n,8,1,hw
bootserport tty0

Ich stelle jetzt einfach mal die dreiste Vermutung auf, dass die FB 2 Serielle Schnittstellen hat, von der aber nur eine über enrik's Beschreibung nutzbar ist.

Wenn ich also bootserport auf ttys1 setze, würde ich vermuten, dass Adam2 auf ttys0 schweigt.

Da ich noch kein Kabel an die FB gelötet habe (ebay Lieferung steht noch aus), hat ja vielleicht ein Freiwilliger die Zeit und Mut, das ganze schon mal auszuprobieren. Ansonsten werde ich sobald das Kabel da ist das ganze mal versuchen.

Wie schätzt Ihr die Gefahr ein, dass Adam2 dann gar nicht mehr geht, weil z.B. doch keine 2. serielle Schnittstelle vorhanden ist was wohl der absolute Tot von Adam2 / FB sein dürfte)

iwow
 
In der .config vom Kernel gibt's unter den Character Devices die Option "CONFIG_SERIAL_CONSOLE=y".
Hört sich für mich sehr nach der gesuchten Zeile an.

Mit dem adam ist das natürlich ein Risiko.
Theoretisch müsste er ja noch über telnet und ftp erreichbar sein, man weiß aber nicht wie er sich bei abschalten der ser.Kons. verhält?

MfG Oliver
 
Hallo,

ich versuche ebenfalls die FBOX EIB Fähig zu machen,

bist Du schon weitergekommen?
 
naja eigentlich wenn wenige ausgaben über /dev/ttyS0 geschikt werden dann solte eigentlich die hardware die du ansteuerst dieses als fehlerhafte daten ansehen und ignoriren aber reinteoretisch köntest für dein programm einen eigenden benutzer zuweisen und dann /dev/ttyS0 so chmod én das nur er drauf schreiben kann.
 
*Therad hochschieb*

GIbts denn schon was neues? Ich wollt die Woche mal nen kleinen ATMega an die Serielle haengen und gucken was passiert.
Wo stellt man die Baudrate,Bits,Stopbit etc ein?

Gruss

Mode
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.