Cross-compiler/ toolchain installieren zum kompilieren eigener C-Programme

teletux

Neuer User
Mitglied seit
12 Mrz 2007
Beiträge
124
Punkte für Reaktionen
0
Punkte
16
Hallo,
gibts hier einen Link auf eine Anleitung für einen Laien unter Xbuntu 12.04 eine Cross-compiler/ toolchain für FB7330 (mips)
zu installieren?

google ich danach, dann stoße ich auf http://www.wehavemorefun.de/fritzbox/Cross-Compile_Toolchain, das
svn co http://svn.freetz.org/tags/15.2 ds26-15.2 habe ich auch instaliert, aber dann fängts an:

schon beim make menuconfig finde ich meine FB7330 nicht.
beim make precompiled kommen massig Fehlermeldungen und
sudo ln -s `pwd -L`/toolchain/target /usr/mipsel-linux-uclibc geht insleere, weil toolchain/target es gar nicht gibt

Ist jemand hier der mir helfen könnte?

danke schonmal
Eckard
 
Zuletzt bearbeitet:
Diese Anleitung ist aber schon seeeeehr alt ;-)

Versuche lieber mal:

Code:
# passende umask setzen
umask 022

# Freetz stable laden
svn co http://svn.freetz.org/branches/freetz-stable-2.0

# ins freetz Verzeichnis
cd freetz-stable-2.0

# Box wählen
make menuconfig

# Toolchain bauen
make toolchain

# .. und los
cat << 'EOF' > hello.c
#include<stdio.h>

int main() {
	printf("Hello World\n");
	return 0;
}

EOF

./toolchain/target/bin/mips-linux-gcc -static -o hello_mips hello.c

... kurzer Test
Code:
joerg@joerg-Ubuntu:/run/shm/freetz-stable-2.0$ file hello_mips 
hello_mips: ELF 32-bit MSB  executable, MIPS, MIPS32 rel2 version 1, statically linked, not stripped
joerg@joerg-Ubuntu:/run/shm/freetz-stable-2.0$ 
joerg@joerg-Ubuntu:/run/shm/freetz-stable-2.0$ qemu-mips hello_mips 
Hello World
joerg@joerg-Ubuntu:/run/shm/freetz-stable-2.0$ 
joerg@joerg-Ubuntu:/run/shm/freetz-stable-2.0$
 
  • Like
Reaktionen: Chatty
Danke!!!!!! Waoh! Funktioniert auf Anhieb!!
 
kleines Update: (wenn toolchain auf der Box)
Habe mir gestern den aktuellen freetz-master branch vom 13.08.19 gezogen und gerade eine target buildchain erstellt.
make toolchain funktionierte an sich tadellos - jedoch fehlten später ldd und ldconfig als binaries im archiv.
Tatsächlich fehlten sie dann ebenso in toolchain/build/mips_gcc-4.8.5_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin

Wer die beiden auf der Box haben will kann einfach make in source/toolchain-mips_gcc-4.8.5_uClibc-0.9.33.2-nptl/uClibc-0.9.33.2/utils aufrufen.

Zusatz:
Jo. loift. Die Buildchain sitzt in meiner Box auf einem Stick, welcher unter /mod/usr/local gemountet wird, um readonly Themen auf einer 7390 zu umgehen.
Nötig war an sich nur,
export PATH=$PATH:/mod/usr/local/bin export CPATH=/mod/usr/local/include configure's laufen damit auch, sollten aber mit diesen zwei direktiven versorgt werden:
./configure --prefix=/mod/usr/local --exec-prefix=/mod/usr/local

Edit: Ui. Die linux Quellen freetz/source/toolchain-mips_gcc-4.8.5_uClibc-0.9.33.2-nptl/linux-dev/2.6.28/include fehlten auch.
Den Ordner freetz/toolchain/target/include kann man aber einfach rüberziehen und gut.

cheers, Marcedo
 
Zuletzt bearbeitet:
Hallo Marcedo,
kannst du mir noch verraten wie Du die toolchain auf der Box gekriegt hast? Bei mir klappt das irgendwie nicht.
Vielen Dank
 
Hallo pepsuncho, klar gerne:
Ich hab den stick ext2 formatiert und danach darauf einen Ordner (local/usr/toolchains) erstellt. Darin habe ich dann die toolchain entpackt.
Nach dem einstecken in die Box hab ich im menü freetz-Einstellungen-rc.custom einen symbolischen Link gesetzt:
ln -s /var/mediapath/SanDisk-Ultra-01/usr/local/ /var/mod/usr
So weit ich grad noch weis - war der target-compiler dem Archiv im ordner target-utils.
Den Inhalt darin habe ich unter /var/mod/usr/local eingefügt.

viel Erfolg - Marcedo
 
Hallo und danke für die schnelle Antwort. Ich habe noch eine Bitte. Kannst du mir deine .config Datei für freetz make schicken? Ich bin mir nicht sicher was man alles auswähle muss um die toolchain richtig zu bauen.
 
Zuletzt bearbeitet:
  • Love
Reaktionen: Micha0815
Hallo, ich habe doch noch eine Frage. Im wiki steht etwas von:
build freetz image and copy some necessary libs to the addon package and re-build the image
Falls Du dich noch daran errinerst, muss ich die Image-Datei dann auf meine FritzBox einspielen (und die addon/own-files-0.1/root rüberkopieren) und danach weiter machen oder nicht? Ich wolle ja mit make toolchain nur die toolchain bauen.
 
Hoi, hatte ich zwar auch mit dem own-files mod gemacht - find das aber auch umständlich. Hab deswegen eben nochmal geschaut, obs man das auch einfacher realisieren kann. Resultat - jo. wenn man folgende Umgebung in freetz-.profile definiert,
läuft der compiler auch. (zumindest in meinem einfachen test grad eben)

.profile
Code:
export PATH=$PATH:/mod/usr/local/bin
export CPATH=/mod/usr/local/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mod/usr/local/lib

Ich empfehl zudem wie oben beschrieben, folgendes zu tun:
  1. Nach make toolchain nochmals make in source/toolchain-mips_gcc-4.8.5_uClibc-0.9.33.2-nptl/uClibc-0.9.33.2/utils aufrufen.
    Aus diesem Vz dann ldd und ldconfig nach stick/usr/local/bin schieben.
  2. Die linux header aus dem Ordner
    freetz/toolchain/target/include
    nach stick/usr/local/include koperen
...hmm finde, der wiki Eintrag sollte wirklich mal aktualisiert werden....

viele Grüße, Marcedo
 
Zuletzt bearbeitet:
Hi Marcedo,

ich habe alles nach wiki und deine Instruktionen gemacht und bekomme beim ausführen von z.B. /mod/usr/local/bin/mips-linux-gcc folgende Fehlermeldung: /mod/usr/local/bin/mips-linux-gcc: line 1: syntax error: unexpected "(".
Und wenn ich ldd /mod/usr/local/bin/mips-linux-gcc ausführe, steht /mod/usr/local/bin/mips-linux-gcc: not an ELF file.
Mit dem selben config-Datei erstellte *.image leuft problemlos auf meinem FritzBox.
Hast du eine Idee voran es liegen kann, dass freetz es nicht als executable erkennt?

viele Grüße
Petar
 
Hey Petar,
na zumindest ne Ahnung :) In dem Archiv befinden sich eigentlich 2 Compiler.
  1. Ein cross-compiler
    Seine Dateien sind in dem Archiv unter archiv/bin , archiv/bin-ccache und archiv/lib hinterlegt.
    Seine execs haben das prefix mips-linux-gcc und sind nicht für die Ausführung
    auf der Box, sondern als download toolchain geplant.
  2. Ein target-compiler
    Der befindet sich im Archiv in dem Verzeichnis target-utils.und funktioniert auf der Box.
    archiv/target-utils/lib habe ich nach stick/usr/local/lib und
    allles in archiv/target-utils/usr nach stick/usr/local
    kopiert.
Nur Mut - und mit ein wenig Kaffee - wird scho alles wieder gut
- und den mach ich mir jetzt mal.
viele Grüße,
Marcedo
 
Zuletzt bearbeitet:
HI noch mal,
zu 1. Ordner "archiv" habe ich nicht!
zu 2. Ich habe diese Befehle verwendet (aus wiki)
tar -cf ~/compiler.tar -C toolchain/target/target-utils/usr . tar -cf ~/libsincs.tar -C toolchain/target/ bin lib include share
Das sollte doch richtig sein, oder? Welches Archiv meinst du genau?
Danke
 
Hallo Petar,
{archiv} steht einfach als synonym für das gepackte tar Archiv von make toolchain.
Hab grad bemerkt, das ich die .config auf dem google drive nochmal bereinigt hatte.
Bitte stelle also sicher, das folgende premissen in make menuconfig erfüllt sind:
  1. Hauptmenü - "Level of Usercompetence" "Expert"
  2. Toolchains - "Build own Toolchains" "Build own Toolchains"
  3. Toolchains - "build binutils and gcc for target"
dann sollte dein tar archiv den target compiler enthalten.

vlg,
Marcedo
 
Ok. Ich wusste überhaupt nicht, dass diese Archive erstellt wurden (und in den Ordner "dl" gespeichert). Vielleicht das ist auch der Sinn von make toolchain :). Steht aber auch nicht in der wiki. Ich habe bis jetzt immer selber die Archivs erstellt und dann auf dem Box entpackt. Danke für den Tipp. Ich werde es jetzt damit versuchen.
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,831
Beiträge
2,219,105
Mitglieder
371,532
Neuestes Mitglied
cabajo
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.