IoWarrior24 an Fritzbox betreiben-Compilerproblem

fabian1991

Neuer User
Mitglied seit
30 Mrz 2012
Beiträge
25
Punkte für Reaktionen
0
Punkte
0
Hi,
ich hab mir jetzt freetz auf die Boy gezogen und bekomm auch ein mit toolchain kompiliertes "Hallo Welt" drauf zum laufen.
Erste hürde gemeistert.
Ich hab mir für den IO Warrior das Iowkit runtergeladen
mit ./configure
make
make install installiert und mit meinem normalen compiler kann ich nun mittels
gcc file.c -liowkit kompilieren
jedoch klappt das nun nicht mit dem toolchain compiler. der sagt dann
:cannot find -liowkit
collect2: ld returned 1 exit status.
so nun ist meine frage, wie ich das auf die Reihe bekomme. Hab auch nach der installation des iowkits nochmal make toolchain ausgeführt, jedoch ohne änderung des ergebnisses.
Grüße :)
 
Hey, danke für die Antwort,
allerdings bezweifel ich, dass ich die lib irgendwo für die Box finden werde.
Gibts da irgendwelche software, in die ich die lib reinwerfe und eine box-lib wieder rausbekomme?
Grüße
 
ich weiß nicht wie es rechtlich ist, ich würds ja mal irgendwo hochladen, da kannste es dir selber anschauen.
http://elmicro.com/de/iowarrior.html
hier kann man auf der rechten Seite auch das Linux Sdk runter laden. allerdings ist das ziemlich verschachtelt und unübersichtlcih.
Linux SDK->Kernel 2.6->iowkit 1.5->libiowkit1.5.0
allerdings weiß ich so wirklich nicht, wie unter Linux so eine lib datei aussieht-.-
unter /usr/lib gibts eine "libiowkit.so" und eine libiowkit.la und eine archiv libiowkit.a, libiowkit.so.1, libiowkit.so.1.0.5

wo genau wird im system festgelegt, dass -liowkit gegn die oben genannten dateien linkt?

Grüße
 
Die Dateien in /usr/lib nützen Dir alle nichts, weil diese für den Host passen, nicht für die Box.

Wenn Du die Datei libiowkit-1.5.0.tar.gz auspackst, oder irgendwo schon ausgepackt hast, kannst Du die passende Library so erstellen:
Code:
FREETZ_BASE=/freetz/dir
PATH="$FREEZ_BASE/toolchain/target/bin:$PATH"

make clean
./configure --host=mipsel-linux
make
FREETZ_BASE muss angepasst werden.
Das Ergebnis sind die Dateien in src/.libs/libiowkit.so* oder src/.libs/libiowkit.a, je nachdem, ob man eine dynamische oder statische Library verwenden will.
Das einfachste ist, Du kopierst die Datei src/.libs/libiowkit.a in das Verzeichnis, wo Dein Programm steht, und ersetzt -liowkit durch libiowkit.a.
 
so, also ich protokollier mal alles, was ich gemacht habe:
Code:
fabian@fabian-laptop:~$ cd libiowkit-1.5.0/
fabian@fabian-laptop:~/libiowkit-1.5.0$ PATH="/home/fabian/freetz/toolchain/target/bin:$PATH"
fabian@fabian-laptop:~/libiowkit-1.5.0$ make clean
//blabla
fabian@fabian-laptop:~/libiowkit-1.5.0$ ./configure --host=mipsel-linux
//blabla
fabian@fabian-laptop:~/libiowkit-1.5.0$ make
//blabla
fabian@fabian-laptop:~/libiowkit-1.5.0$ cp ./src/.libs/libiowkit.a /home/fabian/libiowkit.a
fabian@fabian-laptop:~/libiowkit-1.5.0$ cd ..
fabian@fabian-laptop:~$ ./freetz/toolchain/target/bin/mips-linux-gcc iowkittest.c libiowkit.a
/home/fabian/freetz/toolchain/build/mips_gcc-4.5.3_uClibc-0.9.32.1/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.5.3/../../../../mips-linux-uclibc/bin/ld: libiowkit.a(iowkit.o): Relocations in generic ELF (EM: 3)
/home/fabian/freetz/toolchain/build/mips_gcc-4.5.3_uClibc-0.9.32.1/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.5.3/../../../../mips-linux-uclibc/bin/ld: libiowkit.a(iowkit.o): Relocations in generic ELF (EM: 3)
/home/fabian/freetz/toolchain/build/mips_gcc-4.5.3_uClibc-0.9.32.1/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.5.3/../../../../mips-linux-uclibc/bin/ld: libiowkit.a(iowkit.o): Relocations in generic ELF (EM: 3)
/home/fabian/freetz/toolchain/build/mips_gcc-4.5.3_uClibc-0.9.32.1/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.5.3/../../../../mips-linux-uclibc/bin/ld: libiowkit.a(iowkit.o): Relocations in generic ELF (EM: 3)
/home/fabian/freetz/toolchain/build/mips_gcc-4.5.3_uClibc-0.9.32.1/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.5.3/../../../../mips-linux-uclibc/bin/ld: libiowkit.a(iowkit.o): Relocations in generic ELF (EM: 3)
/home/fabian/freetz/toolchain/build/mips_gcc-4.5.3_uClibc-0.9.32.1/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.5.3/../../../../mips-linux-uclibc/bin/ld: libiowkit.a(iowkit.o): Relocations in generic ELF (EM: 3)
libiowkit.a: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
(blabla=endete ohne Fehler)


so, was mach ich falsch?! war ich im falschen src/.libs?!
Grüße
 
hm^^ das heißt bei mir nicht mipsel-linux sondern mips-linux. manchmal sollte man halt selber mitdenken^^
so compilieren erfogreich. jetzt mal schauen ob es geht^^
 
es geht :)
allerdings sagt mir das programm im Moment nur "failed to open device".
ich schätz mal das liegt daran , dass die USB-Rules noch nciht in der Box eingetragen sind, oder?
Wenn ich nun allerdings die rule nach /etc/udev/rules.d kopieren will, sagt der mir "Read only file system"
auf ein chmod reagiert er auch nur mit Read only file system.
daran haperts noch.
sry wegn offtopic, aber wegen jedem problemchen nen Thread zu erstellen, würde den Rahmen sprengen :)
Grüße
 
Ja, auf den neueren Boxen ist es mips-linux. Ich hatte nichts gefunden, welche Box Du verwendest.

Irgendwann wurde in Freetz etwas diskutiert, um eigene udev Regeln zu erstellen. Es kann aber sein, dass das nur im Trunk ist, vielleicht auch nur in einem Ticket.

Du kannst Dateien beim Erstellen mit ins Image nehmen, ein späteres Ändern geht nicht. Das Einfachste ist aber, zunächst das Gerät mit mknod anzulegen.
 
jo ich hab die Trunk und hab die Option gefunden.
ich hab in udev_first folgendes reinegschrieben:
KERNEL=="iowarrior*", NAME="usb/iowarrior%n", GROUP="users", MODE="666"
danach reboot
immernoch failed to open device
cat /etc/udev/rules.d/00-custom.rules(oder wie das heißt) hat mir auch gezeigt, dass die rule drin steht.

und ubuntu hab ich das selbe auch mal probiert. die fertige regel gelöscht
->failed to open device und dann
vi 00-custom.rules
zeugs reingeschrieben und zack, geht wieder.
fritzbox(im übrigen eine 7390) sträubt sich weiterhin. ich schau mir mal an was mknod ist. :)
grüße
 
ich hab mal folgendes versucht:
mknod -m 666 iowarrior0 c 180 208
cat iowarrior0 sagt:
cat: can't open 'iowarrior0':No such device
a.out sagt immernoch failed to open....

Ich versteh das mit dem usb-gedöhns eh nich so ganz^^
das usb-gerät meldet sich mit seinem namen(in meinem falle iowarrior24) am betriebssystem an und wenn das betriebssystem eine rule dafür hat, wird es entsprechend der rule in /dev/usb angelegt?

Was mir grad aufgefallen ist:
wenn ich in /dev ein ls mache, steht unter anderem folgendes da:
usb
usb1
usb2
usbdev1.1_ep00
usbdev1.1_ep81
usbdev2.1_ep00
usbdev2.1_ep81

schließe ich den warrior an, kommt noch
usbdev2.4_ep00 hinzu

lösche ich die selbst angelegte regel, fällt das wieder weg.
cat sagt mir auch hier bei usbdev2.4....
No such device or address.
Grüße
 
ich hab grad mal testweise auf nem live ubuntu, also frisch und ohne modifikationen meine datei ausgeführt, sie sagte failed to open device, dann habe ich die rules nach /etc/udev/rules.d kopiert, neu eingesteckt und schwupps schon ging es. also da musste ich nix mit kernel treiber machen. möglich dass sich das in der fritzbox anders verhält?!
laut dem hersteller werden ab kernel 2.6 keine treiber mehr benötigt, kA wie das ging, aber ich hatte mir das mal anzeigen lassen und da stand in der fritzbox ne 2.6 vorn^^
grüße

//edit:
möglich, dass es nicht am treiber liegt, sondern an der Software?
die dynamische bibliothek hab ich nämlich garnicht mit drauf kopiert, sondern vergessen^^
allerdings spuckt mit ubuntu ohne dynamische bibliothek die fehlermeldung aus, dass sie fehlt, fritzbox tat nix dergleichen, hat das Programm ausgeführt und tat so, als wäre nix angeschlossen.
Aber bevor ich jetzt anfange hier mehrspurig nach Fehlern zu suchen:
wie kann ich feststellen, ob das gerät korrekt erkannt wurde? also ohne eigene software.
Nochmals liebste Grüße :)
 
Zuletzt bearbeitet:
...
die dynamische bibliothek hab ich nämlich garnicht mit drauf kopiert, sondern vergessen^^
allerdings spuckt mit ubuntu ohne dynamische bibliothek die fehlermeldung aus, dass sie fehlt, fritzbox tat nix dergleichen, hat das Programm ausgeführt ...
Wenn Du ldd im Freetz-Image (d. h. auf der Box hast), kannst Du feststellen ob das Programm (binary), Zugang zu den libraries hat.
 
die dynamische bibliothek hab ich nämlich garnicht mit drauf kopiert, sondern vergessen^^
Ich hatte oben auch die statische Library und nicht die dynamische empfohlen.
Wenn eine dynamische Library fehlt, lautet die Meldung nicht "failed to open device", also ist das nicht das Problem.

Selbst wenn Linux 2.6 schon das benötigte Modul enthält, heißt das nicht, dass es auch schon auf der Box vorhanden ist.
In dem Archiv gibt es Dateien iowarrior-module-2.6.tar.gz und iowarrior-module-2.6.20.tar.gz, und darin iowarrior-module-2.6.20/iowarrior-2.6.20/iowarrior.c.
Wenn Du das Gerät beim Ububtu ansteckst, müsste ein passendes Module dazu geladen werden. Was sagt "lsmod" auf dem Ubuntu? Was sagt "lsusb"?
 
Also zum kompilieren, egal ob für die Box, Ubuntu oder Windows, benötigt man immer eine statische.
Wenn ich nun die binary im Windows ausführen will, brauch ich ne .dll sonst gibts ne fehlermeldung. Unter Ubuntu muss auch eine...kA wie die hieß^^ nach /usr/lib, sonst gibts ne Fehlermeldung und in der Box gehts ohne dyn und da kommt auch keine Fehlermeldung. das hat mich halt stutzig gemacht.
ich forsche hier grad auf fast neuland, deswegen bin ich mit librarys nicht so bewandt und wusste halt nicht, wie sich das auswirkt und ob das Fehlen evtl ignoriert wird und dann halt iowkitopendevice im Programm ein NULL gibt. nicht weils nicht gefunden wurde, sondern weil halt die dyn. lib fehlt und er da iwie rumspinnt..
lsusb sagt u.A.:
Bus 002 Device 002: ID 07c0:1501 Code Mercenaries Hard- und Software GmbH IO-Warrior 24
lsmod:
Code:
fabian@fabian-laptop:~$ lsmod
Module                  Size  Used by
usbhid                 36110  0 
hid                    67288  1 usbhid
iowarrior               8921  0 
aes_i586                7268  0 
aes_generic            26863  1 aes_i586
rfcomm                 33453  4 
sco                     7949  2 
binfmt_misc             6587  1 
ppdev                   5259  0 
bridge                 45646  0 
stp                     1655  1 bridge
bnep                    9436  2 
l2cap                  30656  16 rfcomm,bnep
snd_hda_codec_idt      52074  1 
fbcon                  35102  71 
tileblit                1999  1 fbcon
font                    7557  1 fbcon
bitblit                 4707  1 fbcon
softcursor              1189  1 bitblit
vga16fb                11385  0 
vgastate                8961  1 vga16fb
joydev                  8740  0 
snd_hda_intel          22069  2 
snd_hda_codec          74297  2 snd_hda_codec_idt,snd_hda_intel
snd_hwdep               5412  1 snd_hda_codec
snd_pcm_oss            35308  0 
snd_mixer_oss          13746  1 snd_pcm_oss
snd_pcm                70694  3 snd_hda_intel,snd_hda_codec,snd_pcm_oss
snd_seq_dummy           1338  0 
snd_seq_oss            26722  0 
snd_seq_midi            4557  0 
arc4                    1153  2 
snd_rawmidi            19056  1 snd_seq_midi
snd_seq_midi_event      6003  2 snd_seq_oss,snd_seq_midi
snd_seq                47263  6 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_seq_midi_event
snd_timer              19130  2 snd_pcm,snd_seq
b43                   163556  0 
snd_seq_device          5700  5 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq
i915                  289683  3 
mac80211              205434  1 b43
drm_kms_helper         29329  1 i915
uvcvideo               57438  0 
cfg80211              126528  2 b43,mac80211
snd                    54244  16 snd_hda_codec_idt,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_seq_oss,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
intel_agp              24375  2 i915
videodev               34457  1 uvcvideo
v4l1_compat            13251  2 uvcvideo,videodev
btusb                  11053  2 
bluetooth              49892  9 rfcomm,sco,bnep,l2cap,btusb
psmouse                63677  0 
serio_raw               3978  0 
led_class               2864  1 b43
drm                   163779  4 i915,drm_kms_helper
i2c_algo_bit            5028  1 i915
soundcore               6620  1 snd
snd_page_alloc          7076  2 snd_hda_intel,snd_pcm
agpgart                31724  2 intel_agp,drm
video                  17375  1 i915
output                  1871  1 video
lp                      7028  0 
parport                32635  2 ppdev,lp
ssb                    38934  1 b43
sky2                   40807  0


Grüße

ldd auf ubuntu sagt:
fabian@fabian-laptop:~$ ldd a.out
linux-gate.so.1 => (0x0064d000)
libiowkit.so.1 => /usr/lib/libiowkit.so.1 (0x005fe000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00988000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x001cc000)
/lib/ld-linux.so.2 (0x00550000)


ldd auf fritzbox sagt:
root@fritz:/var/media/ftp# ldd a.out
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2aabe000)
libc.so.0 => /lib/libc.so.0 (0x2aadc000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)

da fehlt genau das libiowkit.so.1

brauchts das plötzlich nich mehr oder was ist hier los?^^
ich schau mal durch was da noch in den archiven an treibern zu finden ist

edit2:
iowarrior.c selber zu kompilieren, vorzugsweise mit mips-linux-gcc war schier unmöglich, da sämtliche header-dateien fehlen, außer module.h, die war in /lib/module/.../linux enthalten. jede davon benötigte wieder welche, deswegen hätte ich am online suchen, runterladen und in den entsprechenden pfad schieben ein paar stunden benötigt.
ich bin grad wieder am windows rechner, deswegen weiß ich nicht mehr, wie die dateien heißen, aber u.a. war im driver ordner vom iowarrior ein script enthalten, dass die geräte mit mknod erstellt. dieses und die fertigcompilierte(was schon da war) iowarrior.o hab ich auf die box kopiert, ausführbar gemacht und das script ausgeführt. es kam keine Rückmeldung, auch keine Fehlermeldung. allerdings waren in /dev keine iowarriors erstellt.
insmod (oder so?!) iowarrior.o
ebenfalls keine Meldung, auch keine Fehlermeldung, aber geht immer noch nix.
ich stoß grad echt an meine Grenzen.
Mein kleines Projekt, was ich eigentlich so nebenbei mcahen wollte, entwickelt sich langsam zu meiner Hauptaufgabe :)
Grüße
 
Zuletzt bearbeitet:
Das Programm unter Ubuntu würde auch keine dynamische Library benötigen, wenn Du bei Übersetzten nicht -liowkit sondern libiowkit.a (ggf. /usr/lib/libiowkit.a) angeben würdest. Wenn eine dynamische Library nicht gefunden wird, kommt eine andere Meldung, die Du ja bei Ubuntu gesehen hast.

Wie Du oben bei lsmod siehst, ist ein Modul iowarrior geladen. Wenn das bei Ubuntu dabei ist, dann ist das sehr praktisch, es gehört aber nicht zur Standard-Ausrüstung auf der Box. Wenn es aber im normalen Kernel drin ist, kannst Du versuchen, es mit "make kernel-menuconfig" zu finden und zu aktivieren. Dann wird es mit "make kernel" automatisch erstellt. Du musst es dann nur noch von Hand auf die Box bringen und laden.

Die Datei iowarrior.c selber zu kompilieren ist zwar möglich, und die benötigten Include-Dateien sollten alle im Build-System enthalten sein, aber es ist weitaus einfacher, wenn das Modul bereits im Kernel enthalten ist und wie oben beschrieben erstellt werden kann.
 
aah, wieder was gelernt mit den libs.

ich nehme mal an, das make kernel-menuconfig ist auf freetz bezogen?
habs ausgeführt, anschließend unter device-drivers bei IC2 support ein sternchen gesetzt.
allerdings steht überall [ ]option und bei i2c support < >.
ein make kernel sagte mir, dass für das ziel nix zu tun sei(aber ich hab doch grad was verändert?!)
sollte ich es mal mit nem normalen make versuchen, dass die neue Firmware erstellt wird und der treiber dann dabei ist?
Grüße

edit// unter ubuntu hab ich grad in /usr/src/linux-headers-2.6.32-38 mittels cat .config |grep IOWARRIOR folgenden eintrag gefunden:
CONFIG_USB_IOWARRIOR=m

(m heißt ja modul?!).
ich hab nun via modinfo iowarrior den pfad zum modul gefunden.
die iowarrior.ko hab ich auf die box kopiert und wollte sie mit insmod iowarrior.ko

insmod: cant insert iowarrior.ko' :invalid module format-.-

liegt evtl daran, dass ich auf der Box die version 2.6.28.10 hab und aufm ubuntu 2.6.32-40generic?

(werden die .ko dateien nur erstellt, wenn das system sie mal benötigt hat? Sind recht wenige in dem Ordner im Ubuntu).

In /freetz/source/kernel/ref-iks-16mb-7390_05.20/linux-2.6.28.10/drivers/usb/misc gibts die datei iowarrior.c
hilft das was?
Grüße
 
Zuletzt bearbeitet:
Du brauchst das Kernel-Modul für die Fritzbox. Das muss natürlich für die CPU und den Kernel passen sein.
Ein Modul vom Ubuntu (wie du es scheinbar versucht hast) passt weder von der CPU noch von der Kernel Version.
Du musst also für deine Box, wie Ralf geschrieben hat, mit freetz das passende Kernelmodul bauen (vermutlich, indem du auch dort "CONFIG_USB_IOWARRIOR" auf "m" setzt) und das dann auf die Box bringen.
 
Zuletzt bearbeitet:
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.