programme kompilieren für die fritz box

obelix76 schrieb:
Bin jetzt auch soweit, daß ich mit dem Crosscompiler vom DS-Mod (in Ermangelung eines Linux-Rechners mit dem FriBoLi/StinkyLinux Image) ein einfaches "hello world!" hinbekommen habe, was auch auf der Box läuft (*jubel*)
Yeah :) - kenn das ...

obelix76 schrieb:
3) wie im Beitrag vorher hier geschrieben, hab ich den Pfad zur Toolchain gesetzt (allerdings hab ich das mit den /.../pfad nicht hinbekommen, so daß ich den "kompletten" Weg zur Toolchain eingetragen hab.
Ja. War eigentlich auf maltes Beitrag bezogen. Er hatte sein Home-Dir nirgendwo gepostet ;).
Da kommt natürlich der komplette Pfad hin. Das mit den /.../ war schlecht gewählt, muss ich zugeben.

obelix76 schrieb:
und hier ereilt mich dann der Fehler, wo ich nicht weiter weiß:
...
Manche Programme benötigen Libraries. In dem Fall müsstest du vorher libpcap runterladen, x-compilen und installieren.
Damit die Lib auch in die richtigen Verzeichnisse gepackt wird, gebe ich dem ./configure folgende Parameter mit (Pfade ändern!):
Code:
./configure --exec-prefix=/home/maz/dsmod/toolchain/target --host=mipsel-linux --includedir=/home/maz/dsmod/toolchain/target/include --oldincludedir=/home/maz/dsmod/toolchain/target/include --prefix=/home/maz/dsmod/toolchain/target --build=i386-linux-gnu --with-kernel=/home/maz/dsmod/source/ref-8mb_26-04.40/kernel/linux/

Nach der Installation sollte pcap.h gefunden werden.
 
Manche Programme benötigen Libraries. In dem Fall müsstest du vorher libpcap runterladen, x-compilen und installieren.
ah - ic. irgendwas in der Richtung hatte ich befürchtet ;)

Damit die Lib auch in die richtigen Verzeichnisse gepackt wird, gebe ich dem ./configure folgende Parameter mit (Pfade ändern!):
Code:
./configure --exec-prefix=/home/maz/dsmod/toolchain/target --host=mipsel-linux --includedir=/home/maz/dsmod/toolchain/target/include --oldincludedir=/home/maz/dsmod/toolchain/target/include --prefix=/home/maz/dsmod/toolchain/target --build=i386-linux-gnu --with-kernel=/home/maz/dsmod/source/ref-8mb_26-04.40/kernel/linux/
Grundgütiger... was ein Bandwurm von Aufruf *g*

geht bei mir wieder schief das Ganze... Hab die Pfade auf meine Gegebenheiten angepaßt, configure für die libpcap läuft auch an - aber dann das:
Code:
configure: error: pcap type not determined when cross-compiling; use --with-pcap=...
und schon stehe ich wieder vollkommen ratlos da. Dr. Google brachte auch keine passende Medizin mit, wenn ich nach dieser Fehlermeldung suchen ließ. :(
das Help von ./configure --help ist auch nicht wirklich aussagekräftig zu dem Parameter. meint nur:
Code:
--with pcap=TYPE        use packet capture TYPE
was wills mir damit sagen? :confused: ich versteh da irgendwie nur Bahnhof. Geht wohl doch etwas sehr übermeinen Horizont das ganze ;)

Aber jetzt stehen dann eh Weihnachtsbesuche an, werd mich erst wieder Abend mit dem Problem befassen können. Vielleicht hat ja noch mal jemand einen schlauen Tip für mich ;)
(oder vielleicht eine fertige Binary vom iftop für ne Box mit 2.6er Kernel *gg* - löst dann aber immer noch nicht mein Problem, wie ich sowas im Zweifel mal selbst baue...)
 
@obelix76
Hast du mal im dsmod-Verzeichnis "make libpcap-precompiled" probiert?

MfG Oliver
 
jau, mit dem "make libpcap-precompiled" geht es durch.

Ich hab zwar nich den Hauch eines Schimmers, was da gemacht wird (oder besser: warum ;) - muß ja als Ziel im Makefile vom ds-mod mit drin sein, vermute ich mal?) - aber die libpcap scheint sich zu installieren.

Jetzt bricht zwar das configure vom iftop an einer anderen Stelle ab (ncurses fehlt ihm angeblich noch) - aber da hab ich mal versucht zu adaptieren und mache grad den gleichen Spaß mit dem precompiled für ncurses. ;)

Also Danke erst mal für den Tip, Oliver!

Update: make für iftop lief durch, es scheint auch auf der Fritz zu funktionieren (mit ./iftop -h kommt jedenfalls die Hilfe für das Tool), aber dann brichts mit der Fehlermeldung "Error opening terminal: xterm" ab. Jetzt muß ich noch rausfinden, wie ich das abstelle. Aber ich vermute mal, daß es irgendwas an den Einstellungen vom PuTTY ist und nicht vom Programm selbst.

Falls jemand das Binary vom iftop brauchen sollte (für 2.6er Kernel) und mit PuTTY probieren mag: ich hab die binary mal hier als Anhang hochgeladen.
 

Anhänge

  • iftop.zip
    76.1 KB · Aufrufe: 32
Zuletzt bearbeitet:
obelix76 schrieb:
Update: make für iftop lief durch, es scheint auch auf der Fritz zu funktionieren (mit ./iftop -h kommt jedenfalls die Hilfe für das Tool), aber dann brichts mit der Fehlermeldung "Error opening terminal: xterm" ab. Jetzt muß ich noch rausfinden, wie ich das abstelle

Er findet xterm nicht aus der ncurses. Hast du das terminfo Verzeichnis auf die Box kopiert (oder geflasht --> .../dsmod/root/usr/share/terminfo)?

Falls ja, kannst du den Pfad und das Terminal mit export definieren:
Code:
export TERMINFO=/var/media/ftp/usb/terminfo
export TERM=xterm
 
Hast du das terminfo Verzeichnis auf die Box kopiert (oder geflasht --> .../dsmod/root/usr/share/terminfo)?
*kratz*
ich glaub, ich oute mich hier grad als der abolute n00b ;) (hatte ich erwähnt, daß wenig Ahnung von Linux? :))

Also - ich hatte den DS-Mod quasi "out of the box" auf die Fritz geflasht. Sprich, den ganz normal in der virtuellen Maschine konfiguriert (make menuconfig), kompiliert (make) und dann rauf auf die Box. Bewußt von mir hab ich da nix weiter hinzukopiert oder in das Image eingebunden. Wüßte gar nicht wie *g* - deswegen ackere ich ja auch noch mit der .37 und nicht mit der .40 - weil ich keinen blassen habe, wie ich das dem script beibiegen soll. Bin ja schon einigermaßen glücklich, daß es so geht *g*)

Ich hab jetzt in den Untiefen des DS-Mods übrigens das besagte terminfo-Verzeichnis gefunden und auf die Box per wget gespült. (kann grad nicht die Firmware umflashen - da werd ich hier im hause öffentlich gegrillt und gezwölfteilt, wenn ich einfach am Tage das Internet ausmache ;))
Und siehe da, nachdem ich die beiden exports durchgespielt hab, funktionierts mit dem iftop. Danke! :groesste:

wieder was dazugelernt ;)
 
Hallo ich habe heute noch mal mein Glück versuchet um Nmap 4.5 auf einem Debian Testing zu kompilieren für die FRITZ!Box Fon WLAN 7170 mit AVM Firmware 29.04.49

NMAP SRC: http://download.insecure.org/nmap/dist/nmap-4.50.tar.bz2


Eingabe:

Code:
export PATH=$PATH:/home/yapp/ds/ds26-15.2/toolchain/target/bin

[
Code:
./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux

Ausgabe:
Code:
checking for lua/lua.h... no
checking for lua version >= 501... configure: error: cannont run test programm while cross compiling

Eingabe:

Code:
./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux --without-liblua

Ausgabe:
Code:
checking if --disable-protochain option is specified... enabled
configure: error: pcap type not determined when cross-compiling; use --with-pcap=...
configure: error: /bin/sh '.configure' failed for libpcap

Eingebe:

Code:
./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux --without-liblua --without-pcap

Ausgabe:
Code:
Configuration complete. Type make (or gmake on some BSD machines) to compile.

Eingabe:

Code:
make --debug

Ausgabe:

Code:
<gekürzt>

Die Datei >>all<< existiert nicht. 
Die Datei >>pcap_build<< existiert nicht. 
Das Target >>pcap_build<< muss neu erzeugt werden. 
compiling libpcap

<gekürzt>

Die Datei >>all<< existiert nicht. 
Die Datei >>pcap-no.o<< existiert nicht. 
Das Target >>pcap-no.o<< muss neu erzeugt werden.
make[1]: entering directory 'root/nmap-4.50/libpcap'
make[1]: *** Keine Regel vorhanden, um das Target >>pcap-no.o<<,
benötigt von >>libpcap.a>>, zu erstellen. Schluss. 
make[1]: Leaving directory '/root/nmap-4.50/libpcap'
make *** [pcap_build] Fehler 2
 
Zuletzt bearbeitet:
[Edit frank_m24: Sinnfreies Fullquote von deinem eigenen Beitrag gelöscht. Lest noch mal die Forumregeln.]

UPDATE:

Ich habe grade "make libpcap-precompiled" ausgeführt und nun macht das config script von nmap wieder Probleme:

Eingebe:

Code:
../configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux

Ausgabe:

Code:
checking for pcap_datalink in -lpcap... yes
checking if libpcap version is recent enough... configure: error: cannon run test programm while cross compiling
See 'config.log' for more details.

Aus dem log werde ich leider nicht schlau.

Hat wer einen Tip?

config.log:
http://nopaste.biz/26053
 
Zuletzt bearbeitet:
Hier die grobe Vorgehensweise:
  1. binutils kompilieren. Du wirst einige Patches brauchen. Nimm am besten die Version 2.16.91.0.6 mit diesen Patches
  2. Nun brauchst du einen initialen gcc Compiler, mit dem du die uClibc kompilierst. Ich verwende hier den selben Compiler wie für den Kernel, da sich die uClibc nicht mit dem neuen gcc 4.x Compiler übersetzen läßt. Diesen Compiler erzeuge ich mit dem crosstool (gcc-3.3.2-glibc-2.3.2)
  3. Bevor du die uClibc konfigurieren kannst, brauchst du die konfigurierten Kernel Sourcen. Diese findest du im Open Source Paket von AVM
  4. Ist der Kernel konfiguriert, können die uClibc Sourcen konfiguriert werden. Die Sourcen sind auch im Open Source Paket von AVM. Such dir die passende Config Datei für die uClibc aus dem Open Source Paket und kopiere sie nach .config ins uClibc Source Verzeichnis. Den Pfad zu den Kernel Sourcen in der .config anpassen und in der Rules.mak CROSS entsprechend dem erstellten crosstool Compiler setzen. Nun folgt etwas Pfad Magic und make pregen install_dev all install_dev install_runtime (wobei ich mir glaube install_dev sparen könnte, da ich ja den crosstool Compiler als initial gcc verwende) mit jeweils korrekt gesetzten Prefixen (das schaust du dir am besten hier an)
  5. Nun kann man daran gehen, den 2ten finalen Cross Compiler zu erstellen, nämlich der, welcher gegen die eben erstellte uClibc kompiliert: Verwende zum Beispiel gcc 4.1.0 mit diesen Patches. Genaueres dann aber auch hier.

Alternativ kannst du es auch an den Makefiles im ds-mod unter ./toolchain/make/ nachvollziehen.

Wäre möglich hier eine detailiertere Beschreibung anzugeben?
Ich habe soweit einiges erledigt und endlich tinyproxy für MIPS kompiliert.
Leider bekomme ich nach dem kompieren der binary Datei auf die FB, folgende Fehlermeldung:
Code:
./tinyproxy: can't load library 'libresolv.so.0'

Mir ist noch ein Rätsel, zu welchem Zeit ich angeben soll, dass ich die uclibc mit drin einkompiliert werden soll??

Ich bin so vorgegangen:
Code:
export PATH=/home/chris/data/ds26-15.2/toolchain/target/bin:$PATH

Code:
CFLAGS="-static -O2 -pipe" LDFLAGS="-static -O2" ./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux
dann
Code:
make

Beim Compilieren meldet er ganz brav "mipsel-linux-gcc -DHAVE_CONFIG_H ... -static ...usw" Zeile für Zeile für einige ".c" Files.

Nur dass ich jetzt echt nicht verstehe, warum die Libs nicht mitkompiliert werden?!?!...ich sagte ja doch in den CFLAGS es soll statisch compilieren...

Was mache ich falsch?

EDIT:
Sowohl der ./configure als auch der make Vorgang endet fehlerfrei.
Die entstandene binäre Datei ./src/tinyproxy läuft dann logischerweise nicht auf diesem i386 Linux sondern nur auf die FB mit der oben angegebenen Fehlermeldung.
 
Zuletzt bearbeitet:
Im Prinzip bis Du schon fast fertig. Du muß nur noch die fehlende Datei libresolv.so.0, die sich vermutlich irgendwo auf Deinem Linux-System befindet, auch auf die Box kopieren.

Falls libresolv.so.0 ein Link auf eine andere Datei sein sollte, muß diese natürlich auch mit kopiert werden.
 
Im Prinzip bis Du schon fast fertig. Du muß nur noch die fehlende Datei libresolv.so.0, die sich vermutlich irgendwo auf Deinem Linux-System befindet, auch auf die Box kopieren.

Falls libresolv.so.0 ein Link auf eine andere Datei sein sollte, muß diese natürlich auch mit kopiert werden.

servus,

auf meiner FB ist kein libresolv.so.0 vorhanden:
Code:
find / -name "libresolv*"
liefert nichts.
in "/lib" ist auch nichts was mit "libresolv" anfängt.

sonst habe ich auf meinem linux system (i386) folgendes da:
Code:
chris@KanotixVM:~/tmp/tinyproxy/tinyproxy-1.7.0$ find / -iname "libresolv*" -print 2>/dev/null
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-3.4.5-glibc-2.3.6/mipsel-unknown-linux-gnu/mipsel-unknown-linux-gnu/lib/libresolv.so.2
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-3.4.5-glibc-2.3.6/mipsel-unknown-linux-gnu/mipsel-unknown-linux-gnu/lib/libresolv-2.3.6.so
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-3.4.5-glibc-2.3.6/mipsel-unknown-linux-gnu/mipsel-unknown-linux-gnu/lib/libresolv.so
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-3.4.5-glibc-2.3.6/mipsel-unknown-linux-gnu/mipsel-unknown-linux-gnu/lib/libresolv.a
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv-0.9.28.so
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv.so.0
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv.a
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv.so
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv_pic.a
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv-0.9.28.so
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv.so.0
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv.a
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv.so
/home/chris/tmp/ds26-15.2/toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc/lib/libresolv_pic.a
/home/chris/tmp/ds26-15.2/root/lib/libresolv-0.9.28.so
/home/chris/tmp/ds26-15.2/root/lib/libresolv.so.0
/home/chris/tmp/ds26-15.2/build/original/filesystem/lib/libresolv-0.9.28.so
/home/chris/tmp/ds26-15.2/build/original/filesystem/lib/libresolv.so.0
/home/chris/tmp/ds26-15.2/build/modified/filesystem/lib/libresolv-0.9.28.so
/home/chris/tmp/ds26-15.2/build/modified/filesystem/lib/libresolv.so.0
/home/chris/tmp/ds26-15.2/source/crosstool-0.43/build/mipsel-unknown-linux-gnu/gcc-3.4.5-glibc-2.3.6/glibc-2.3.6/abilist/libresolv.abilist
/home/chris/tmp/ds26-15.2/source/crosstool-0.43/build/mipsel-unknown-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc-headers/libresolv.map
/home/chris/tmp/ds26-15.2/source/crosstool-0.43/build/mipsel-unknown-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/libresolv.map
/home/chris/tmp/ds26-15.2/source/crosstool-0.43/build/mipsel-unknown-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/resolv/libresolv.so.2
/home/chris/tmp/ds26-15.2/source/crosstool-0.43/build/mipsel-unknown-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/resolv/libresolv_pic.a
/home/chris/tmp/ds26-15.2/source/crosstool-0.43/build/mipsel-unknown-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/resolv/libresolv.so
/home/chris/tmp/ds26-15.2/source/crosstool-0.43/build/mipsel-unknown-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/resolv/libresolv.a
/home/chris/tmp/ds26-15.2/source/toolchain/uClibc-0.9.28/libresolv
/home/chris/tmp/ds26-15.2/source/toolchain/uClibc-0.9.28/libresolv/libresolv.a
/home/chris/tmp/ds26-15.2/source/toolchain/uClibc-0.9.28/libresolv/libresolv-0.9.28.so
/home/chris/tmp/ds26-15.2/source/toolchain/uClibc-0.9.28/lib/libresolv.a
/home/chris/tmp/ds26-15.2/source/toolchain/uClibc-0.9.28/lib/libresolv-0.9.28.so
/home/chris/tmp/ds26-15.2/source/toolchain/uClibc-0.9.28/lib/libresolv.so
/home/chris/tmp/ds26-15.2/source/toolchain/uClibc-0.9.28/lib/libresolv.so.0
/home/chris/tmp/avm/GPL/uclibc/uClibc-0.9.28/libresolv
/lib/libresolv-2.3.6.so
/lib/libresolv.so.2
/lib/tls/libresolv-2.3.6.so
/lib/tls/libresolv.so.2
/usr/lib/libresolv.a
/usr/lib/libresolv.so

welche ist nun die richtige?
und wo muss diese auf die FB kopiert werden? ich denke ich kann in "/lib" auf der FB nicht schreiben...oder?
 
Auf der Box ist die Library nicht, sonst käme ja keine Fehlermeldung.

Die Dateien in /lib und /usr/lib im Hostsystem sind uninteressant, sinde gehörten ja zum Hostsystem und nicht zur Box.

Wenn Du ds-mod/Freetz verwendest, schau mal ins menuconfig bei "shared libraries"/"libresolv".

Andererseits hast Du schon die Dateien in build/modified/filesystem/lib/libresolv*, das heißt, daß diese auch im Image und somit auf der Box vorhanden sein sollten.
 
Auf der Box ist die Library nicht, sonst käme ja keine Fehlermeldung.

natürlich. ich dachte aber eben dass wenn ich in configure explizit sage, es soll die libs statisch reinziehen, tut er es auch...dachte ich...

Wenn Du ds-mod/Freetz verwendest, schau mal ins menuconfig bei "shared libraries"/"libresolv".

unter "advanced options"->"shared libraries" hab ich direkt kein libresolv. wohl aber unter "advanced options"->"shared libraries"->"uClibc"->"libresolv-0.9.28.so" und ist auch markiert.
ein "make libs" war natürlich von mir auch ausgeführt worden.

Andererseits hast Du schon die Dateien in build/modified/filesystem/lib/libresolv*, das heißt, daß diese auch im Image und somit auf der Box vorhanden sein sollten.

eben! daher meine frage:
nehme ich diese 2 files her?
build/original/filesystem/lib/libresolv-0.9.28.so
build/original/filesystem/lib/libresolv.so.0

wohin kopiere ich dann diese 2 files auf der FB?
(hinweis: ich benutze originales image von AVM, also kein freetz ds-mod.)
 
Das mit dem statischen Linken hat wohl nicht funktioniert, sonst köme die Meldung nicht.

Wenn Du die original Firmware hast, dann ist es klar, daß diese Dateien nicht auf der Box sind. Die Dateien unter build/original/filesystem/lib sind genau die, die in einem freetz Image schon auf der Box wären. Die Dateien muß Du in irgend ein beschreibbares Verzeichnis kopieren, so wie Du es mit dem ausführbaren Programm schon getan hast. Dann mußt Du noch dafür sorgen, daß die Dateien auch gefunden werden:
Code:
LD_LIBRARY_PATH=/pfad/zu/libs ./tinyproxy
Pfadnamen natürlich entsprechend anpassen.
 
Das mit dem statischen Linken hat wohl nicht funktioniert, sonst köme die Meldung nicht.

Eine Idee wie man das vielleicht zum Erfolg führen kann? :D

Die Dateien muß Du in irgend ein beschreibbares Verzeichnis kopieren, so wie Du es mit dem ausführbaren Programm schon getan hast. Dann mußt Du noch dafür sorgen, daß die Dateien auch gefunden werden:
Code:
LD_LIBRARY_PATH=/pfad/zu/libs ./tinyproxy
Pfadnamen natürlich entsprechend anpassen.

Optimal! Hab ich gemacht! Hab sogar mit "export" den LD_LIBRARY_PATH gesetzt damit ich nicht immer das mit angeben muss.

Der Aufruf
Code:
./tinyproxy
gibt dann folgendes aus:
Code:
Could not open configuration fille "/usr/local/etc/tinyproxy.conf"
Kein Problem, dann gebe ich ihm die Config Datei:
Code:
./tinyproxy -c tinyproxy.conf
Ergebnis: lauter " --accepting rule at line ... ("bla bla...") " Zeilen, die an sich die Zeilen meiner tinyproxy.conf sind und irgendwie nur ausgelesen und nicht interpretiert werden. Kann sein dass ich irgendwas beim Compilieren doch falsch gemacht habe?....
 
Zu tinyproxy selbst kann ich Dir nichts sagen. Der einzige Tip, den ich habe ist, daß vielleicht die Zeilenenden im Windows-Format sind (CR-LF) statt Linux Format (nur LF).

Und natürlich der Hinweis auf die Dokumentation.
 
Vielleicht könnte mal jemand eine Hello World Anleitung für die Fritz schreiben als Tutorial =)
 
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.