programme kompilieren für die fritz box

samidar

Neuer User
Mitglied seit
14 Apr 2006
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
hallo,

ich bin grade dabei zu erforschen wie man Programme für die Fritz Box kompilieren kann und vllt helft ihr mir noch folgende Erklärung zu erweitern, denn so richtig funktionieren tut das alles noch nicht bei mir :( .

um ein programm für eine andere Plattform zu kompilieren brauch ich diese sachen:

binutils (Assembler Linker (für die Zielplattform) etc...
-erhält man durch kompilieren und durch den parameter --target=mipsel-linux

gcc (der Compiler der mein C programm für die Zielplattform-Assemblerdatei erstellt)
-erhält man durch kompilieren der gcc sourden durch den obigen parameter --target=mipsel-linux bei ./configure

nun wenn das alles so funktiert müsst ich jetzt mittels mipsel-linux-gcc hallo_welt.c ein funktionstüchtiges Programm schreiben können.
Doch wie schaut es mit den Bibliotheken aus.. woher weiß gcc welche er benutzen soll und was sind bibliotheken?
 
Am einfachsten wird es sein, wenn du eine fertige Toolchain verwendest (z.B. im danisahne mod "make toolchain")

Du benötigst eine c Library und diese ist in diesem Fall die uClibc. Diese muss genauso konfiguriert sein, wie die auf der Fritzbox. Sourcen und Konfiguration dieser uClibc findest du im Open Source Paket von AVM.

Mfg,
danisahne
 
ich möchte eigentlich weniger Programme komplieren.
für mich wäre hier eher der Weg das Ziel und beim eingeben von "make toolchain" habe ich nicht wirklich etwas gelernt...
 
Alles ins Detail hier zu beschreiben ist mir jetzt zu viel, da es ein bisschen mehr braucht, als du wahrscheinlich denkst. Am besten du suchst dir eines der zahlreichen Cross Compiler Howtos und wendest es auf die Fritzbox an.

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.

Mfg,
danisahne
 
ich bedanke mich vielmals für deine ausführliche antwort

doch folgendes hab ich noch nicht verstanden:

warum kann ich die uClic nicht mit "meinem" gcc (gcc 3.3 **) kompilieren, oder ist dies möglich, nur du kannst dies nicht nutzen, weil du gcc 4 hast?

und wozu werden die Kernel-sourcen für den kompiliervorgang der uClib gebraucht?
 
samidar schrieb:
warum kann ich die uClic nicht mit "meinem" gcc (gcc 3.3 **) kompilieren, oder ist dies möglich, nur du kannst dies nicht nutzen, weil du gcc 4 hast?
Du solltest sie nicht mit "deinem" Compiler übersetzen, da sie cross kompiliert werden muss. Normalerweise erstellt man sich den initial gcc aus den selben Sourcen wie den finale gcc (in diesem Fall 4.1.0). Das geht hier aber nicht, da die uClibc etwas älter ist. Die uClibc können wir nicht upgraden, wenn wir wollen, dass die Programme von AVM weiterhin laufen sollen. Da wir im Mod für den Kernel eh schon einen älteren Compiler brauchen, nehm ich für die uClibc diesen.
samidar schrieb:
und wozu werden die Kernel-sourcen für den kompiliervorgang der uClib gebraucht?
Welche Informationen er genau aus den Sourcen zieht weiß ich auch nicht. Du brauchst aber für einen Cross Compiler immer mindestens die Kernel Header des Zielsystems.

Mfg,
danisahne
 
wenn ich nur programme erstellen möchte und nicht einen kernel kompilieren will, könnte ich doch auch die schon kompilierte uClibc von der fritz box auf meinen rechner kompieren ...

und wie kompiliere ich den finalen gcc gegen die uClibc?
 
Ich bin jetzt auch nicht so der Cross Compiler Profi (baue meine Toolchain nach Vorbild des buildroot Projekts), aber nehme stark an, dass die uClibc Runtimes alleine nicht ausreichen werden.

EDIT: Kannst du Makefiles lesen? Das ist in dem Fall wirklich die schnellste Quelle auf deine Fragen. So hab ichs auch gemacht. Online kannst du das z.B. im OpenWRT SVN Repository nachschlagen.
 
noch kann ich keine makefiles lesen....aber lese grade ein wenig was drüber..

habe gelesen dass man die header dateien der bibliothek braucht um programme für eine bibliothek zu programmeiren....vlt kann das jemand bestätigen,
 
Ja.
Das sind die Dateien unter "include/".

MfG Oliver
 
Hallo, gibt es einen Weg Programme für die FB (ohne Mod) zu kompilieren? Wie erstelle ich so einen Cross-Copiler? Gibt es eine fertige entwicklungs Umgebung?
 
Hallo, gibt es einen Weg Programme für die FB zu kompilieren?
Offensichtlich, sonst gäbe es keine AVM Firmware und keine Mods dazu.
Wie erstelle ich so einen Cross-Copiler? Gibt es eine fertige entwicklungs Umgebung?
Willst Du überhaupt selbst einen Cross-Compiler erstelle, oder willst Du nur einen fertigen haben?

In beiden Fällen ist der ds-mod eine Antwort.

Du kannst entweder den fertigen Cross-Compiler des ds-mod verwenden (nennt sich Download-Toolchain) oder die Toolchain selbst erstellen oder auch die Einzelheiten anschauen, wie es gemacht wird.
Das Ganze nennt sich Toolchain, weil es nicht nur den Compiler gibt, sondern auch Linker und einige andere Programme.

In beiden Fällen kannst Du die ds-mod Toolchain auch dazu verwenden, eigene Programme zu erstellen, auch ohne die ds-mod Firmware auf der Box zu installieren.
 
Okey zu beginn möchte ich einen fertigen haben. Ich habe mir die DS-Mod ds26-15.2 runtergeldaen. Was muß ich in "make menuconfig" einstellen um Programme für meine FB ohne mod zu erstellen?



FRITZ!Box Fon WLAN 7170 (UI), Firmware-Version 29.04.40
 
Hi.
Du musst deine Box einstellen, die Änderungen abspeichern und dann make eingeben. Zuerst werden die Sourcen runtergeladen, dann die Toolchain und danach dauert es etwas...
Der gcc ist dann in toolchain/target/bin/mipsel-linux-gcc. Weißt du wie du dem configure-Skript sagst, dass es cross-compilen soll (--host und --build)? Und dann die "mipsel"-CFlags nicht vergessen.

MfG Oliver
 
Das mit den Flags habe ich nicht ganz verstanden allso falls ich eine einfache .c datei kompilieren möchte gebe ich ein


./toolchain/target/bin/mipsel-linux-gcc mein_code.c


Was mache ich wen es eine .configure ode rmake datei gibt?

Das mit dem Runterladen des toolchain versuche ich am WE da habe ich eine bessere Leitung zur verfügung.
 
Hallo ich habe nun "make toolchain" und "make precompiled" ausgefüht. War "make precompiled" überhaupt nötig? Wohin muß ich die header Daten kopieren? Wie lautet der Pfad zums include Verzeichnis des Compilers? Ist
" ./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux " der richtige Befehl? Gruß Simon
 
Hi.
"make precompiled" sollte nicht nötig sein. Die Header-Dateien installierst du am besten mit "make install DESTDIR=...ds26-15.2/toolchain/target".
Im selben Pfad ist auch das include-Verzeichnis.

MfG Oliver
 
Allso

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

ist erfolgreich durchgelaufen. Bei make kommt es immer zu einem Fehler

"keine Regel vorhanden um das Target >>pcap-included.o<< benötigt von >>libcap.a<< zu erstellen."

Hast du einen Tip? "make DESTDIR=...ds26-15.2/toolchain/target" geht auch micht. Was muß ich den bei make install angeben damit er die fertigen Daten in einen Ordner meiner Wahl kopiert? Muß ich diesen Ordnung dann auf die Box kopieren oder muß ich noch etwas machen?
 
Hast du das bin-Verzeichnis der Toolchain in der PATH Environment Variable?
Code:
export PATH=$PATH:/.../ds26-15.2/toolchain/target/bin

Ansonsten wäre hier die Ausgabe der Fehlermeldung hilfreich (und auch was du gerade kompilierst ;)).
 
hallo,

ich hänge mich hier mal an, weil ich an einer ähnlichen Stelle festhänge.

Ich möchte gern meiner 7170 ein Progrämmchen namens "iftop" spendieren. 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*). Aber beim iftop verzweifel ich grad an einem Problem (für die Linux-Spezis hier ist es wahrscheinlich banal :))

meine Vorgehensweise:
1) Sourcen runterladen (http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz)
2) tar.gz nach ~/Desktop/ds26-15.2/zeugs/ entpackt, wobei dort dann ein neuer Ordner iftop-0.17 entstand
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. Auf alle Fälle ist der "neue" gcc aus jedem Verzeichnis erreichbar jetzt.
4) dann verzweige ich mich in das Unterverzeichnis von den iftop-Sourcen. Dort geistert ein configure-Script rum, welches ich wie folgt aufrufe (auch aus dem Thread hier abgekuckt):
./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux

und hier ereilt mich dann der Fehler, wo ich nicht weiter weiß: das configure-Script prüft jetzt erstmal diverse Sachen gegen (so versteh ich das jedenfalls) und folgende drei Zeilen wirft er mir aus, eh das configure abbricht (der rest davor geht mit ok durch):

Code:
checking where to find pcap.h... no idea
configure: error: can't find pcap.h
 You're not going to get very far without libpcap

da steh ich nu da und weiß nicht weiter. Ist irgendwas in meinem Ablauf falsch (hab noch nie wirklich was crosscompiled, geschweige denn mehr als rudimentäre Linuxkenntnisse)? Wenn mir hier jemand helfen könnte, wäre das phänomenal! :)
 

Statistik des Forums

Themen
244,897
Beiträge
2,220,473
Mitglieder
371,635
Neuestes Mitglied
Bigpapi
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.