Compilierung eines Programms für die FB 7170

Helico

Neuer User
Mitglied seit
15 Okt 2010
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Hallo Leute,

ich hoffe ich hab das richtige Forum erwischt - bitte nicht böse sein sondern ggf. verschieben.... Danke!

Mein Titel ist sicher nicht ganz richtig aber ich versuche mal zu umschreiben, was ich gerne machen möchte...

An die USB-Schnittstelle der FB möchte ich eine Relaiskarte anschließen. Auf meinem Linux PC klappt das auch schon wunderbar ( ich kann vom PC aus per Knopfdruck die Kaffeemaschine einschalten !!)

Das Programm, dass die Karte "steuert" muss per make-Befehl noch compiliert werden - das auf dem PC compilierte Programm einfach auf die Fritz-Box zu schieben kann ich - aber es läuft nicht nicht, da es sich um einen anderen Kernel handelt oder so...

Kann mir einer Helfen, damit ich das Programm auch auf der FB ausführen kann? Hier ein paar Links:

Relaisprogramm: Beschreibung
Datei

Beispiel für eine "Dreambox", auf der es zu funktionieren scheint: Beispiel etwa in der Mitte der Seite

Ach ja ein paar Angaben zur Fritz-Box:

FRITZ!Box Fon WLAN 7170 Firmware-Version 29.04.76

uname -a: Linux fritz.fonwlan.box 2.6.13.1-ohio #1 Tue Jul 21 16:13:51 CEST 2009 mips unknown

BusyBox v1.8.2 (2009-04-22 13:54:57 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.


-------------------

Vielen Dank für eure Hilfe und ich hoffe, ich hab mich (wie häufig) nicht zu kompliziert ausgedrückt...

Ralf
 
Du brauchst einen Cross-Compiler. Bei Freetz gibt es eine fertige Download-Toolchain. Wenn Du die installiert hast, kannst Du damit Programme für die Box übersetzen. Das für den PC erstellte Programm wird auf der Box nicht laufen. Das hat nicht mit dem Kernel zu tun, sondern mit der CPU.

Hast Du überhaupt schon kontrolliert, ob die USB-Schnittstelle angesprochen werden kann? Wenn nicht, nützt Dir das Programm auch nichts.
 
Mit Freetz und dem Paket (Patch) aus dem Anhang kannst Du das Programm (binary) für die FritzBox compilieren. Ob es auf der Box auch benutzt werden kann, weiss ich nicht.
Code:
:~/myfreetz/freetz5991/freetz-trunk> file packages/target-mipsel_uClibc-0.9.29/relpro-0.1/root/usr/bin/relpro
packages/target-mipsel_uClibc-0.9.29/relpro-0.1/root/usr/bin/relpro: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), stripped
Code:
root@fritz:/var/mod/root# ldd /usr/bin/relpro
        libuClibc++.so.0 => /usr/lib/[COLOR="Red"]freetz[/COLOR]/libuClibc++.so.0 (0x2aabe000)
        libc.so.0 => /lib/libc.so.0 (0x2aaf6000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2abab000)
        ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)
Code:
root@fritz:/var/mod/root# relpro -h
 Hilfe vom Relaiskartenprogramm Version 1.3.5
 Folgende Optionen sind verfuegbar:
   -l   Hiermit kann man die Sprache einstellen. (bitte als erstes angeben)
         1 = Deutsch (default)
         2 = Englisch
   -d   Hier gibt man das Device an. (/dev/ttyS0)
   -r   Hier gibt man die Nummer der Relaiskarte an (1-255)
   -s   Setzen der Relais.
        Parameter: (Es muessen 8 Parameter sein!)
                "0" Relais ausschalten
                "1" Relais einschalten
                "x" Relais wird gelassen, wie es aktuell ist
                "r" Relais wird per Zufall geschalten
                "t" Relais toggeln (z.B. vorher "on" danach "off")
   -f   Schnell schalten von Relais. Parameter 1: Relais Nummer. 2: gleich wie bei -s
   -i   Initialisierung der Relaiskarten
   -g   Gibt den Aktuellen Status des angesprochenen Relais aus.
   -h   Gibt diese Hilfe aus.
   -v   Gibt die Versionsnummer des Programmes aus.

  Beispiel: (vorher=alle Relais aus)
        "Relaisprogramm.bin -d /dev/ttyS1 -r 1 -s 010r0xt1"
        (nachher:)  Die 1. Relaiskarte wird angesprochen
        "0" das Relais 4,6,8 wird ausgeschaltet
        "1" das Relais 1,7 wird eingeschaltet
        "t" das Relais 2 wird getoggelt und damit in diesem Fall eingeschalen
        "x" das Relais 3 wird so gelassen, wie es jetzt ist
        "r" das Relais 5 wird per Zufall geschaltet
                         (vorher an nachher aus und umgedreht)

COM Port: "/dev/ttyS0"
 

Anhänge

  • relpro.patch.txt
    58.7 KB · Aufrufe: 3
Vielen Dank an sf3978,

scheinbar bin ich doch nicht so gut, wie ich dachte, weil ich mit deinen Befehlen nix anfangen kann :(

Scheinbar bist du Profi und hast schon freetz installiert - könntest du das mal für mich Cross-Compilieren? Wäre total genial...

Gruß Ralf
 
... - könntest du das mal für mich Cross-Compilieren? Wäre total genial...
Das Problem ist, dass es dynamisch gelinkt ist. Das binary nutzt dir nichts. Du brauchst Freetz wegen der library und zum installieren (flashen) auf deine Box.
Wie Ralf sagt, wenn Du es benutzen kannst.
 
Im Zweifelsfall kann man das Programm so ändern, daß es keine C++ Library verwendet.

Aber wie schon mehrfach erwähnt, nützt einem das Programm nichts ohne Kernel-Unterstützung, daher sehe ich keine Sinn darin, sich mit dem Programm weiter zu befassen, solange der Rest nicht geklärt ist.
 
....

ok das Problem ist erkannt - es geht wahrscheinlich nicht...

lsusb auf der FB ohne Karte:

# lsusb
BUS=001
DEV=001
VID=0000
PID=0000
CLS=09
SCL=00
SPEED='full'
VER='1.1'
ISOC=0
INUM=1
ICLS1=09
ISCL1=00



und MIT KARTE

# lsusb
BUS=001
DEV=001
VID=0000
PID=0000
CLS=09
SCL=00
SPEED='full'
VER='1.1'
ISOC=0
INUM=1
ICLS1=09
ISCL1=00

BUS=001
DEV=003
VID=0403
PID=6001
CLS=00
SCL=00
SPEED='full'
VER='2.0'
ISOC=0
INUM=1
ICLS1=255
ISCL1=255


die fünftletzte Zeile scheint das Geheimnis zu lösen: Version 1.1 gegen 2.0

ich glaub das klappt nicht...
 
Der reine Unterschied bei der USB-Version ist vermutlich eher kein Problem, da normalerweise eine Abwärtskompatibilität von 2.0 auf 1.1 gegeben ist.
 
Ach ja, .... mir steht der KOpf irgendwo... Was müsste ich nun machen (?)

ich verschiebe das Projekt glaub ich auf später?! Dann geh ich euch nicht so auf die Nerven.

Also: lsusb "sieht" die Karte - allerdings nicht ganz richtig.. - denn am PC gibt lsusb folgendes aus:

Bus 004 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC


------------------- @ RalfFriedl -----------
Wie kann ich denn sonst noch feststellen dass die FB die Karte erkennt?

------------
mit dem flashen hab ich so meine Probleme: ich wollte das machen, wie bei TechChannel und das binary per wget auf die FB laden. Dazu hab ich 2-3 unabhängige Server, auf die ich das Prg legen könnte...
 
Im Anhang ein neuer Patch mit Ergänzungen und Quellcode, zum (Mit-)Compilieren der binaries "lesen" und "schreiben":
Code:
:~/myfreetz/freetz6007/freetz-trunk> file packages/target-mipsel_uClibc-0.9.29/relpro-0.1/root/usr/bin/lesen
packages/target-mipsel_uClibc-0.9.29/relpro-0.1/root/usr/bin/[COLOR="Red"]lesen[/COLOR]: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), stripped
Code:
:~/myfreetz/freetz6007/freetz-trunk> file packages/target-mipsel_uClibc-0.9.29/relpro-0.1/root/usr/bin/schreiben
packages/target-mipsel_uClibc-0.9.29/relpro-0.1/root/usr/bin/[COLOR="Red"]schreiben[/COLOR]: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), stripped
 

Anhänge

  • relpro_lesen_schreiben.patch.txt
    64.3 KB · Aufrufe: 2
  • relpro_lesen_schreiben_231010.patch.txt
    63.9 KB · Aufrufe: 0
Zuletzt bearbeitet:
Wie kann ich denn sonst noch feststellen dass die FB die Karte erkennt?

Es kommt darauf an, was genau Du mit "erkennen" meinst.
Die Box erkennt schon, daß ein USB-Gerät angeschlossen ist.
Sie weiß aber vermutlich nichts damit anzufangen. Die Frage ist also zunächst, welches Kernel-Modul ist notwendig, um diese Karte zu nutzen, danach, gibt es dieses Kernel-Modul auch für den auf der Box verwendeten Kernel.

Schau also mal im syslog Deines PC-Linux nach, welches Modul für die Karte zuständig ist.

Außerdem kannst Du am PC-Linux dieses Kommando ausführen:
Code:
grep '0403.*6001' /lib/modules/$(uname -r)/modules.usbmap
 
manoman..


ok ich bin wohl doch ein riesen dummie; aber ich hoffe, dass das an der erkältung liegt.
Wie kann ich die syslog - testen;

grep '0403.*6001' /lib/modules/$(uname -r)/modules.usbmap

gibt bei mir nix, weil ich die datei nicht habe; habe Suse 11.3

-----------------------Sorry Jungs und Mädls...
 
Wie kann ich die syslog - testen;
Mit "less /var/log/messages" und ans Ende der Datei gehen. Oder mit "tail -f /var/log/messages".

gibt bei mir nix, weil ich die datei nicht habe; habe Suse 11.3
D. h. Du bekommst so eine Ausgabe:
Code:
grep: /lib/modules/2.6.*.*-0.1-***/modules.usbmap: [COLOR="Red"]No such file or directory[/COLOR]
Hast Du die Karte an deinem PC in Benutzung, während der Abfrage?
 
Dateien im verzeichnis /lib/modules/2.6.31.14-0.1-desktop/
Code:
modules.alias        modules.alias.bin    modules.builtin      modules.builtin.bin  modules.dep          modules.dep.bin      modules.order        modules.symbols      modules.symbols.bin

wobei nur in modules.alias was über usb ist...

grep '0403.*6001' /lib/modules/2.6.31.14-0.1-desktop/modules.*


Code:
/lib/modules/2.6.31.14-0.1-desktop/modules.alias:alias usb:v0403p6001d*dc*dsc*dp*ic*isc*ip* ftdi_sio


die Messages / warn in /var/log ergibt:


IPSTAR:/var/log # grep ttyUSB0 *

Code:
messages:Oct 17 20:27:28 IPSTAR kernel: [31907.015028] ftdi_sio ttyUSB0: ftdi_submit_read_urb - failed submitting read urb, error -22
warn:Oct 17 20:27:28 IPSTAR kernel: [31907.015028] ftdi_sio ttyUSB0: ftdi_submit_read_urb - failed submitting read urb, error -22


lsusb

Code:
Bus 004 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC



Der Befehl um Relais 8 ein bzw auszuschalten lautet:

Code:
IPSTAR:~ # /usr/bin/Relaisprogramm.bin -d /dev/ttyUSB0 -r 0 -s 00000001
COM Port: "/dev/ttyUSB0"
OK
IPSTAR:~ # /usr/bin/Relaisprogramm.bin -d /dev/ttyUSB0 -r 0 -s 00000000
COM Port: "/dev/ttyUSB0"
OK

dabei gibt die messages nix an;
 
Dann hat sich wohl etwas an den Modulen geändert, ich hatte auf einem älteren Suse-System nachgeschaut.

Das Kernel-Modul ist also ftdi_sio. Wenn ich mich richtig erinnere, kam das schon mal vor. Hat jemand das auf der Box zum Laufen gebracht? Braucht man dafür Freetz, oder reicht es, einige Module zur Standard-Firmware dazu zu laden?
 
ok ok...

freetz ist installiert und ich hab einen Standard-image compilieren können... (ohne Fehlermeldungen)...

Code:
STEP 1: UNPACK                                                                                                                                           
unpacking firmware image                                                                                                                                 
splitting kernel image                                                                                                                                   
unpacking filesystem image                                                                                                                               
unpacking var.tar                                                                                                                                        
done.                                                                                                                                                    

STEP 2: MODIFY
applying symlinks, deleting additional webinterfaces
applying patches                                    
installing mod base                                 
replacing busybox                                   
installing modules                                  
installing packages                                 
invoking custom script                              
stripping leftover unstripped binaries              
done.                                               

STEP 3: PACK
packing var.tar
creating filesystem image
merging kernel image     
packing 7170_04.80freetz-1.1.3.de_20101018-121813.image
Image files can be found in the ./images/ subfolder    
done.                                                  

FINISHED


Sorry, aber ich kann mit
Code:
Mit Freetz und dem Paket (Patch) aus dem Anhang kannst Du das Programm (binary) für die FritzBox compilieren

nix anfangen: Wie "spiele" ich den patch ein; wie bekomme ich dann das binary - ich bin echt ein NOOP
 
... 7170_04.80freetz-1.1.3.de_20101018-121813
...
... nix anfangen: Wie "spiele" ich den patch ein; wie bekomme ich dann das binary - ich bin echt ein NOOP

Das Paket ist für den trunk. Ich glaube nicht, dass es it Freetz-1.1.3 funktioniert. Kannst aber mal probieren.

Den Patch spielst Du wie folgt, aus dem Wurzelverzeichnis, ein:
patch -p0 < relpro_lesen_schreiben.patch.txt

Die binaries (relpro, lesen, schreiben) kannst Du mit dem Freetz-Image auf deine Box flashen.
 
ok jetzt bin ich langsam warm geworden.. und hab die howtos verstanden....


doch leider klappt weder Freetz_1.1 noch 1.1.2 .. da immer versucht eine andere firmware runterzuladen (gut, das hab ich manuell in der .config geändert) doch dann bricht make immer ab mit nem fehler...

also es klappt nur mit der freetz-1.1.3/

Da werde ich jetzt mal das Image mounten und mir das relprog herausholen um das zu testen.. weil für ein flashen bin ich zu aufgeregt und das ist mir zu heiß
 
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.