Vorstellung und Frage zum Comport

Elfine

Neuer User
Mitglied seit
17 Jan 2008
Beiträge
77
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,
ich habe dieses Thema "Linux auf der Fritzbox" erst gestern gefunden und muss sagen das ich alles sehr interessant finde. Wie ihr sicherlich bemerkt habt habe ich im Moment jede Menge Freizeit da ich ein paar Tage frei habe.

Ich habe mich gestern bereits ein wenig eingelesen und habe damit begonnen eine Linuxumgebung mit Crosscompiler usw. aufzubauen, was auch wunderbar geklappt hat. So habe ich bereits mein erstes Image mit einigen Modifikationen erstellt, welches ich leider noch nicht testen kann weil ich keine Fritzbox besitze. Ebay sei dank habe ich das Problem der "Fritzlosigkeit" auch gerade gelöst.

Nun aber zu dem was ich so vor habe:

Ich will die Fritzbox nicht als Router nutzen sondern als Spielzeug. Im Grunde genommen ist die Fritzbox ja nichts anderes als ein kleiner PDA ohne Monitor (wenn ich den Vergleich mal anstellen darf).

Ich würde gerne nur das nötigste im Image haben (Telnet, FTP usw.) und alles andere rauswerfen. Dann würde ich gerne über die Com-Schnittstelle ein kleines Relaismodul oder einen IR-Sender ansteuern. Also wahlweise Fernseher oder andere Geräte steuern bzw. andere Geräte.

So wie ich im WIKI gelesen habe kann man "Debug" Comport mittels MAX232 realisieren. Das wäre so weit auch kein Problem. Nur frage ich mich ob die Baudrate irgendwo einstellbar ist? Laut WIKI liegt die, so glaube ich, bei 38500Baud, was etwas zu viel für meine kleinen Steuerungsmodule sein könnte. Auch ein anderes Problem ergibt sich da noch zusätzlich. Über den Comport werden ja die Debugmeldungen ausgegeben. Ich habe schon in /etc/init.d die Configdateien abgesucht, wurde aber nicht fündig. Kann man die Debugmeldungen auch ausschalten?

Ich hätte da sonst noch die Idee bei der initalisierung den "Debugport" auf die USB-Schnittstelle oder einen virtuellen Port zu legen und so TTS0 frei zu haben.

Auch habe ich ein Bootlog einer Fritzbox gesehen. Wenn ich mir die Ausgaben so anschaue dann müsste die Initalisierung des Comports ja bereits im Bootloader geschehen oder?

Fragen über Fragen ich weiss :( Aber habt Mitleid mit mir ich bin noch neu in der Materie ;)

Ich habe jetzt doch etwas gefunden aber ich bin mir nicht ganz sicher

/etc/profile

Code:
####################################################################
if [ "$CONFIG_PRODUKT" = "Fritz_Box_Profi" ] ; then
    if [ -e $CONFIG_ENVIRONMENT_PATH/environment ] ; then
        PS1='CPU1 #'
    else
        PS1='CPU2 #'
    fi
fi

####################################################################
echo "ermittle die aktuelle TTY"                                                
tty=`ls -l /proc/$$/fd/0`                                                       
tty=${tty##*-> }                                                                 

####################################################################
#
#  Terminal init
#
#########################################################################
echo "tty is \"$tty\""
case $tty in
    /dev/pts/0)
        stty erase ^H                                                                   
        getcons $tty                                                               
        echo "Console Ausgaben auf dieses Terminal umgelenkt"
        ;;
    /dev/pts/*)
        stty erase ^H                                                                   
        echo "weitere telnet Verbindung aufgebaut"
        ;;
    /dev/tts/*)
        stty -F /dev/tts/0  rows 50 cols 132 
        echo -e "\033[50;132q\c"    # Steuersequenz für CapiTerm: 50 Zeile, 132 Spalten
        echo "Serielles Terminal"
        ;;
    /dev/ttyS0)
        stty -F /dev/ttyS0  rows 50 cols 132 
        echo -e "\033[50;132q\c"    # Steuersequenz für CapiTerm: 50 Zeile, 132 Spalten
        echo "Serielles Terminal"
        ;;
    *)
        echo "unbekanntes Terminal"
        ;;
esac
Ist das nicht die initialisierung?

Dann müsste ich ja nur an dieser Stelle eine Umleitung machen:

echo "ermittle die aktuelle TTY"
tty=`ls -l /proc/$$/fd/0`
tty=${tty##*-> }

und schon wäre der Comport nutzbar.

Bin ich da auf der richtigen Spur?
 
Zuletzt bearbeitet von einem Moderator:
Wenn Du Ergänzungen zum ersten Beitrag hast, solltest Du den Beitrag ändern statt einen zweiten direkt dahinter zu schreiben (siehe Forenregeln).

Wenn Du eine komplett eigene Firmware haben willst, könnte openwrt interessant sein. Die Fritz-Spezifische Hardware ist dann aber nicht nutzbar, und evtl. ist dann ein Linksys besser geeignet, weil billiger. Wenn Du aber schon eine Fritz bestellt hast (welche?), dann hat sich das erstmal erledigt.

Die einfachste Lösung ist der Einsatz eines USB->Seriell Adapters mit unterstütztem Chipsatz, da sollte die Suchfunktion helfen. Ein Adapter ist vermutlich billiger und auf jeden Fall schneller als eine Schaltung mit Pegelwandlern zu machen.

Eine Änderung an der von Dir beschriebenen Stelle in /etc/profile wird Dich nicht weiter bringen. Die Ausgabe beim Start wirst Du nie komplett unterdrücken können, bzw. allenfalls mit sehr umfangreichen und riskanten Änderungen, an Stellen wo es zum Teil auch keine Quelltexte gibt. Da ist ein USB Adapter vermutlich sinnvoller.
 
Entschuldigung für den Zweifachpost und danke für die Meldung.

Ich habe auch schon nach das Forum durchsucht und habe auch deine Beiträge zum Thema USB->R232 gelesen. Die Adapter sind zwar recht billig aber leider ist mein Spielzeug eine Fritzbox SL. Die hat soviel ich weiss so einen USB (B) Port. An einen einfachen Adapter ist da nicht zu denken :( Ich bin mir nicht einmal sicher ob da überhaupt etwas dran funktionieren würde. Im Forum stand da soetwas.

Edit: Ich denke ich weiss jetzt wie ich das mache ;) Wenn ich es schaffe nach dem Booten die Comconsole abzuschalten dann reicht das. Während des bootens setze ich eine LED auf High. Zwei Transistoren schalten dann die RX/TX weg und nach dem Booten geht die LED auf low wenn die Com-Console aus ist.

Edit: Wie dem auch sei, ich habe jetzt so einiges gefunden. Wenn doch nur meine 8 Euro Fritzbox endlich hier wäre :(
 
Zuletzt bearbeitet:
Die kleinen Boxen habe auch wenig RAM und wenig Flash, aber wenn Du die anderen Funktionen weglassen kannst, wird es wohl reichen.

Was Du brauchst ist
Code:
stty -F /dev/ttyS0 9600
Damit wird die Geschwindigkeit auf 9600 eingestellt, sonst entsprechend andere Werte.
Mit einem normalen System ist die Datei /var/flash/debug.cfg die passende Stelle, um das auszuführen.

Außerdem brauchst Du noch etwas, um die Meldungen der Konsole abzuschalten. Man kann irgendwie zumindest den Log-Level einstellen, aber das habe ich gerade nicht zur Hand.
 
Oh man. Ich muss noch viel lernen :(

Eine kleine Zeile. Ich war schon dabei setserial durch den crosscompiler zu jagen.


Edit: Überall sind die Ausgaben auf Verbose gestellt aber ich schaue mir das mal an wenn der Router hier ist. Wenn der Bootloader eine Configdatei hat dann muss ich anscheinend in der nur die Console auf off setzen oder NULL je nach dem was mich erwartet. Na schauen wir mal ;)
 
Zuletzt bearbeitet:
Der Bootloader ist eine ausführbare Binärdatei und belegt eine 64-KB-Partition im Flash-Speicher. Er hat keine Konfigurationsdatei und es gibt auch keinen Quelltext dafür außerhalb AVM. Er liest schon einige Werte aus bestimmten Speicherstellen, aber mir ist keine Einstellung bekannt, um die serielle Konsole bzw. die Ausgaben darauf komplett auszuschalten.

Sobald Du allerdings eine Terminal-Sitzung geöffnet hast, kannst Du /dev/console dorthin umleiten mit setconsole. Ob man eine Terminal-Sitzung irgendwie emulieren und die Konsole automatisiert dorthin umleiten kann, weiß ich nicht. Es müßte eine Gerätedatei erzeugt werden, in die setconsole schreiben könnte, ohne daß der Fehler
Code:
$ setconsole /dev/null
setconsole: TIOCCONS: Inappropriate ioctl for device
erscheint.
 
Da habe ich diesen Thread nur kurz verlassen und schon habe ich eine Antwort verpasst.

Nachdem ich nun mein Netzwerkproblem gelöst habe, es endlich geschafft habe Character Devices zu erstellen und auch gelernt habe wie man ein diff erstellt und den Patch "einschleusst" habe ich nun endlich die kleine RS232 (max232) Schaltung fertig bekommen und habe nun auch ein Comterminal.

Die Idee mit Setconsole ist gut. Ich dachte mir da ja die Ausgaben beim aufrufen von Telnet umgeleitet werden und auf der Box auch ein Telnetclient vorhanden ist sollte man doch auch per Script telnet 127.0.0.1 aufrufen können. Die Logausgaben müssten dann ja auch umgeleitet werden.

Auf jeden Fall gibt es viel zu testen und es tut mir sehr leid dass es so lange bei mir dauert aber ich hatte vorher noch so viele Probleme zu lösen und habe gerade erst mein Comterminal fertiggestellt.

Edit on:
Die Ausgaben durch den Bootloader wird man ja, wie so oft erwähnt, nie weg bekommen :(
Ich habe mir daher eine Hardwarelösung ausgedacht.

Der Router wird neu gestartet, allen LEDs leuchten kurz, danach nur die Powerled alle anderen sind dunkel.

Die InfoLED kann man über das Webterminal einstellen. (Wann sie leuchten soll) Zur Not habe ich noch die DSL LED die bei mir immer dunkel ist, da die Box per Lan ins Internet geht.

Nun werden die Power und die Info-LEDs ausgelötet. An deren Stelle folgt eine kleine Digitalschaltung. Es reicht ein AND mit LED an Eingang 1 und LED2 mit Negierung an Eingang2. Nur wenn die PowerLED aus und die DSL Lampe an ist hat man nun High am Ausgang. Den Ausgang übergibt man an einen Schalter (soetwas wie das CMos4066 in TTL) und dort werden nun die zwei Seriellen Leitungen eingeschaltet.

Die Box bootet, die serielle Konsole ist aus. Am Ende des Bootens wird die Baudrate umgeändert und die Ausgabe umgeleitet. Nun wird die PowerLED ausgeschaltet und die InfoLED eingeschaltet.

Dazu reicht ja ein Echo auf das LED Device.

Edit off

//Bootlog entfernt ;)
 
Zuletzt bearbeitet:
Hat es denn nun jemand geschafft, den seriellen Port von der Konsole zu befreien? Wenn ja, dann wäre eine ausführliche Doku für's Wiki nett...
 
Die nächsten Tests kann ich erst am Wochenende machen aber per Hardwarelösung funktioniert es. Zuerst den Seriellen Port physikalisch per schaltung trennen, dann per Telnet die Console umleiten und die serielle Schnittstelle wieder einschalten.
 
Jetzt müsste man noch das Telnet loswerden. Es müsste doch machbar sein, den Source von Busybox soweit zu zerlegen, bis man den nötigen Basiscode für ein "Fake Telnet" isoliert hat.
 
Telnet ist nur eine Möglichkeit. Ganz weg bekommt man die Meldungen am Anfang leider nicht.

Hier im Board waren immer einige die sagten dass man evtl. bei den Environmentvariablen des Bootloaders etwas ändern könnte aber keiner wollte es testen.

Ich habe das mal gemacht. Ändert man die Variable bootserport auf null, ttyS1 oder tty1 dann ändert das überhaupt nichts. Die Logausgabe ist immer noch genauso. Das einzige was dort interessant ist, ist die Einstellung der Baudrate. Benutzt das spätere Modul am Comport 9600 dann stellt man die Variable auf 9600.

Beim initialisieren des Bootloaders ist die Baudrate dann bei 384000 danach liegt sie bei den gewählten 9600.

Normalerweise kenne ich das von Linux-Bootloadern dass die ein Configfile haben in dem man die Ausgabe einstellen kann. Bei "Hardware" wird das häufig über eine versteckte "Debugvariable" gemacht. Debug=1 und es gibt Ausgaben, Debug=0 gelich es kommt nichts. Doch wo die evtl. liegt das weiss ich nicht. Ich habe nicht einemal im Sourcecode zum ADAM etwas gefunden.


Meine Schaltung benötigt allerdings nicht nur TX / RX vom Comport sondern auch noch andere Pins. So wie es aussieht liegt der Comport direkt am Combi-Mipsprozessor.

Leider ist es nicht möglich eine Pinbelegung davon zu bekommen. Weder bei Texas Instruments als auch bei AVM. Auch ein Nachfragen bei anderen Herstellern die den Prozessor verwenden brachte nichts.

Man könnte zwar einiges umprogrammieren über die GPIOs, für die man auch Dokumentationen bekommt, doch leider ist mein C++ nicht gut genug um das dann anzupassen.

Für mich bedeutet das ich baue alles wieder zusammen und mache mich nach einer Box bei Ebay auf die Suche die einen "vollwertigen" USB Port besitzt und nehme einen USB-->RS232 Adapter. Laut Reichelt.de stehen da alle Pins des RS232 zur Verfügung ;)


Wenn noch jemand eine Fritzbox loswerden will weil Wlan nicht mehr geht oder das Netzwerk spinnt, ich hätte Interesse ;)

Und für eine Pinbelegung vom Mipsprozessor würde ich töten ;)
 
Ist der Ti-Chipsatz nicht ARM-basierend? :) Aber mal im Ernst, der Chip ist eh aufgeklebt, da kommt man nur sehr schwer dran :) Aber eine frei RS232 Schnittstelle wäre sicher was wert... Ich fürchte nur mehr als RxD und TxD wirst Du auch nicht bekommen, einzige Möglichkeit:
Fehlende Steuerleitungen durch Mikrocontroller emulieren (AVR PIC)
Und was die USB<->Seriell-Wandler angeht: Wenn das Sende- und Empfangsprotokoll zeitlich sehr genau sein muss, hast Du damit keine Chance!
 
Zuletzt bearbeitet:
Ich konnte das Problem lösen indem ich eine USB-Box mit Hostcontroller + Adapter genommen habe. Das reicht allemal für meine Anwendungen. "Die Anwendungen" laufen auch schon. Im Grunde arbeitet die Box nun als Kartenserver für meine Receiver und zudem steurt die per LIRC dir Programmierungen des alten Festplattenrecorders.

Die Fritzbox Fon muss aber auch nicht verstauben. Leider wird "dieses Project" länger dauern als erwartet. Mein C++ ist nicht so gut. Zumindest 25% sind schon fertig. Wenn alles fertig ist wann wird die kleine Fritzbox die Elektronik des Hauses steuern. Über Webkonsole kann man dann sagen wann die Jalousien auf und zu gehen. Auch das Licht lässt sich darüber steuern. Wenn ich fertig bin kann ich aber von überall in der Welt aus meine Jalousien hoch und runter fahren ;)
 
Sehr praktisch, dann blendet Dich das Sonnenlicht nicht so stark im Wohnzimmer, wenn Du im Urlaub bist. ;-)
 
@RalfFriedl

Hast natürlich recht die MCs sind MIPS basierend, hab da was durcheinander geworfen!!!

Was die Sache mit dem USB<->Seriell-Wandler angeht:
Bei Standard Telnet gibt es da sicher keine Probleme aber hast Du mal versucht
über ser2net einen SAT-Receiver zu flashen? :) Ich hab es auch schon beim AVR STK500 gemerkt mit Prolific dauert das Flashen wesentlich länger.

Gruss Manuel
 
Was die Sache mit dem USB<->Seriell-Wandler angeht:
Bei Standard Telnet gibt es da sicher keine Probleme aber hast Du mal versucht
über ser2net einen SAT-Receiver zu flashen? :) Ich hab es auch schon beim AVR STK500 gemerkt mit Prolific dauert das Flashen wesentlich länger.

Etwas OT, aber dennoch ist bie mir kein merklicher Unterschied festzustellen. Und einige Sekunden - wenn überhaupt - gehören ja wohl eher in den Bereich irrelevant, vor allem be iden einzustellenden Comportgeschwindigkeiten (9600, oder? )
 
Wer eigene Modifikationen plant der sollte daran denken das Webinterface mit einem Passwort zu versehen. Ich habe zum testen den Port weitergeleitet und nach Aussen hin offen gelassen.

Als ich heute nach Hause kam fuhren die elektrischen Rollos immer rauf und runter. Erst dachte ich es gibt ein Programmierproblem aber am Ende war es nur jemand der nach offenen Ports gescannt hat und dabei meinen entdeckte.

Auf der Webkonsole hat der sich dann ausgetobt.

Ich habe die Weiterleitung erst einmal ausgeschaltet. Es reicht ja wenn die Rollos Morgends um 6:30 hoch fahren und um 22:00 wieder nach unten bewegt werden.
 
das ist ja toll... Nimm doch dropbear wenigstens dazu oder stunnel. Wer sein WebIF frei gibt ist selbst schuld.
Ich wette:
a) Es war einer von denen, dem du stolz gezeigt hast, wie du deine Rollos weltweit steuern kannst
b) Vermutlich haben sie einen Script gebastelt, um deine Stromrechnung hoch zu treiben. Obwohl, bei der Auflistung deiner Hardware wird sie sowieso nicht niedrig sein...

MfG
 
Kostenlos!

Neueste Beiträge

Statistik des Forums

Themen
248,873
Beiträge
2,303,515
Mitglieder
378,533
Neuestes Mitglied
PatrickSt91