- Mitglied seit
- 24 Apr 2012
- Beiträge
- 21
- Punkte für Reaktionen
- 0
- Punkte
- 1
Hallo Zusammen,
ich bin Neuling, was das Cross-Compilieren von Software für Fritzboxen angeht. Im Prinzip bin ich zu fast jedem der unten aufgeführten Schritte bis zu meinem Problem an Feedback interessiert.
Mein erstes Ziel ist folgendes: Ich möchte das aktuelle Ruby 1.9.3 auf dem USB Stick an meiner Fritzbox installieren.
Bei der Fritzbox handelt es sich um eine 7270 v3 mit Version 05.21. Die offizielle AVM Firmware möchte ich behalten, also kein Freetz-Image bauen und aufspielen.
Ich habe mir also eine Virtualbox VM mit dem aktuellen Debian Linux installiert. Ruby 1.9.3 habe ich per rvm problemlos installieren können. Dann habe ich nach Anleitung http://freetz.org/wiki/help/howtos/common/install die Dependencies für Freetz installiert und Freetz in Version freetz-1.2_rc2.tar.bz2 heruntergeladen und ausgepackt.
Mit make menuconfig habe ich meine Box ausgewählt, dann unter Advanced Options folgendes ausgewählt: Unter den Shared Libraries die, die Ruby wahrscheinlich benötigt und noch ein paar interessante Libraries mehr. Dann unter Toolchain: "selbst bauen", uclibc 0.9.32 (da die Fritzbox diese auch einsetzt) und den Target-Compiler auf gcc 4.6.1 und "build binutils and gcc for target".
Frage hier: Habe ich bei make-menuconfig die Einstellungen (in Bezug auf meine Box und mein Vorhaben) so korrekt vorgenommen, wenn ich nur "eigene" Software - also kein Freetz-Image - bauen möchte?
Übrigens: "Build static toolchain" in Menuconfig auszuwählen funktioniert nicht: make toolchain bricht dann ab, schon beim konfigurieren. Wofür möchte man eigentlich eine statische Toolchain bauen? Das verstehe ich nicht ganz - Erklärung wäre herzlich willkommen
.
Ich baue die Toolchain dann mit "make toolchain" und danach die Libraries mit "make libs". HelloWorld kompiliert und läuft fein auf der FB.
Dann entpacke ich Ruby 1.9.3 in ein Verzeichnis und konfiguriere es mit folgendem Befehl:
export PATH=/home/pfanni/src/freetz-1.2_rc2/toolchain/target/bin:$PATH
./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux --disable-rpath CC="mipsel-linux-gcc" LDFLAGS=-static CFLAGS="-Os -pipe -march=4kc -Wa,--trap" --prefix=/home/pfanni/src/ruby/fertig --exec_prefix=/home/pfanni/src/ruby/fertig
Frage: Sind das für mein Vorhaben sinnvolle Options und Variablen? Habe ich für die 7270 v3 korrekte CFLAGS gewählt? Ich sehe im Freetz-Ruby Packet ist noch "--enable-shared" dabei. Was meint Ihr? Das ich Ruby statisch kompilieren muss/sollte, ist richtig, oder?
Beim "make" dann bricht das ganze schon beim ersten Versuch zu Linken mit folgendem Fehler ab.
pfanni@debian:~/src/ruby-1.9.3-p194$ make
CC = mipsel-linux-gcc
LD = ld
LDSHARED = mipsel-linux-gcc -shared
CFLAGS = -Os -pipe -march=4kc -Wa,--trap
XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT
CPPFLAGS = -I. -I.ext/include/mipsel-linux -I./include -I.
DLDFLAGS =
SOLIBS =
config.status: creating mipsel-linux-fake.rb
rbconfig.rb updated
generating enc.mk
compiling dln.c
compiling encoding.c
compiling version.c
compiling array.c
compiling bignum.c
compiling class.c
compiling compar.c
compiling complex.c
compiling dir.c
compiling dln_find.c
compiling enum.c
compiling enumerator.c
compiling error.c
compiling eval.c
compiling load.c
compiling proc.c
compiling file.c
compiling gc.c
compiling hash.c
compiling inits.c
compiling io.c
compiling marshal.c
compiling math.c
compiling node.c
compiling numeric.c
compiling object.c
compiling pack.c
compiling parse.c
compiling process.c
compiling random.c
compiling range.c
compiling rational.c
compiling re.c
compiling regcomp.c
compiling regenc.c
compiling regerror.c
compiling regexec.c
compiling regparse.c
compiling regsyntax.c
compiling ruby.c
compiling safe.c
compiling signal.c
compiling sprintf.c
compiling st.c
compiling strftime.c
compiling string.c
compiling struct.c
compiling time.c
compiling transcode.c
compiling util.c
compiling variable.c
compiling compile.c
compiling debug.c
compiling iseq.c
compiling vm.c
compiling vm_dump.c
compiling thread.c
compiling cont.c
compiling ./enc/ascii.c
compiling ./enc/us_ascii.c
compiling ./enc/unicode.c
compiling ./enc/utf_8.c
compiling newline.c
compiling ./missing/memcmp.c
compiling ./missing/isnan.c
compiling ./missing/finite.c
compiling ./missing/isinf.c
compiling ./missing/setproctitle.c
compiling addr2line.c
generating prelude.c
compiling prelude.c
compiling dmyext.c
linking static-library libruby-static.a
generating encdb.h
encdb.h unchanged
making enc
make[1]: Entering directory `/home/pfanni/src/ruby-1.9.3-p194'
compiling ./enc/encdb.c
linking encoding encdb.so
/home/pfanni/src/freetz-1.2_rc2/toolchain/build/mipsel_gcc-4.6.1_uClibc-0.9.32/mipsel-linux-uclibc/lib/gcc/mipsel-linux-uclibc/4.6.1/../../../../mipsel-linux-uclibc/bin/ld: /home/pfanni/src/freetz-1.2_rc2/toolchain/build/mipsel_gcc-4.6.1_uClibc-0.9.32/mipsel-linux-uclibc/lib/gcc/mipsel-linux-uclibc/4.6.1/crtbeginT.o: relocation R_MIPS_HI16 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/home/pfanni/src/freetz-1.2_rc2/toolchain/build/mipsel_gcc-4.6.1_uClibc-0.9.32/mipsel-linux-uclibc/lib/gcc/mipsel-linux-uclibc/4.6.1/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[1]: *** [.ext/mipsel-linux/enc/encdb.so] Fehler 1
make[1]: Leaving directory `/home/pfanni/src/ruby-1.9.3-p194'
make: *** [enc] Fehler 2
Ich bin komplett ratlos. Muss ich andere Einstellungen in menuconfig vornehmen? Eine Datei manuell anpassen? Sind die freetz-Libraries falsch kompiliert? Was übersehe ich und wie bekomme ich Ruby für die Box richtig kompiliert.
Ich würde mich sehr über Hilfe freuen!
Bitte sagt bescheid, wenn Ihr weitere Infos benötigt!
Vielen Dank!
Gruss, Pfanni
ich bin Neuling, was das Cross-Compilieren von Software für Fritzboxen angeht. Im Prinzip bin ich zu fast jedem der unten aufgeführten Schritte bis zu meinem Problem an Feedback interessiert.
Mein erstes Ziel ist folgendes: Ich möchte das aktuelle Ruby 1.9.3 auf dem USB Stick an meiner Fritzbox installieren.
Bei der Fritzbox handelt es sich um eine 7270 v3 mit Version 05.21. Die offizielle AVM Firmware möchte ich behalten, also kein Freetz-Image bauen und aufspielen.
Ich habe mir also eine Virtualbox VM mit dem aktuellen Debian Linux installiert. Ruby 1.9.3 habe ich per rvm problemlos installieren können. Dann habe ich nach Anleitung http://freetz.org/wiki/help/howtos/common/install die Dependencies für Freetz installiert und Freetz in Version freetz-1.2_rc2.tar.bz2 heruntergeladen und ausgepackt.
Mit make menuconfig habe ich meine Box ausgewählt, dann unter Advanced Options folgendes ausgewählt: Unter den Shared Libraries die, die Ruby wahrscheinlich benötigt und noch ein paar interessante Libraries mehr. Dann unter Toolchain: "selbst bauen", uclibc 0.9.32 (da die Fritzbox diese auch einsetzt) und den Target-Compiler auf gcc 4.6.1 und "build binutils and gcc for target".
Frage hier: Habe ich bei make-menuconfig die Einstellungen (in Bezug auf meine Box und mein Vorhaben) so korrekt vorgenommen, wenn ich nur "eigene" Software - also kein Freetz-Image - bauen möchte?
Übrigens: "Build static toolchain" in Menuconfig auszuwählen funktioniert nicht: make toolchain bricht dann ab, schon beim konfigurieren. Wofür möchte man eigentlich eine statische Toolchain bauen? Das verstehe ich nicht ganz - Erklärung wäre herzlich willkommen
Ich baue die Toolchain dann mit "make toolchain" und danach die Libraries mit "make libs". HelloWorld kompiliert und läuft fein auf der FB.
Dann entpacke ich Ruby 1.9.3 in ein Verzeichnis und konfiguriere es mit folgendem Befehl:
export PATH=/home/pfanni/src/freetz-1.2_rc2/toolchain/target/bin:$PATH
./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux --disable-rpath CC="mipsel-linux-gcc" LDFLAGS=-static CFLAGS="-Os -pipe -march=4kc -Wa,--trap" --prefix=/home/pfanni/src/ruby/fertig --exec_prefix=/home/pfanni/src/ruby/fertig
Frage: Sind das für mein Vorhaben sinnvolle Options und Variablen? Habe ich für die 7270 v3 korrekte CFLAGS gewählt? Ich sehe im Freetz-Ruby Packet ist noch "--enable-shared" dabei. Was meint Ihr? Das ich Ruby statisch kompilieren muss/sollte, ist richtig, oder?
Beim "make" dann bricht das ganze schon beim ersten Versuch zu Linken mit folgendem Fehler ab.
pfanni@debian:~/src/ruby-1.9.3-p194$ make
CC = mipsel-linux-gcc
LD = ld
LDSHARED = mipsel-linux-gcc -shared
CFLAGS = -Os -pipe -march=4kc -Wa,--trap
XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT
CPPFLAGS = -I. -I.ext/include/mipsel-linux -I./include -I.
DLDFLAGS =
SOLIBS =
config.status: creating mipsel-linux-fake.rb
rbconfig.rb updated
generating enc.mk
compiling dln.c
compiling encoding.c
compiling version.c
compiling array.c
compiling bignum.c
compiling class.c
compiling compar.c
compiling complex.c
compiling dir.c
compiling dln_find.c
compiling enum.c
compiling enumerator.c
compiling error.c
compiling eval.c
compiling load.c
compiling proc.c
compiling file.c
compiling gc.c
compiling hash.c
compiling inits.c
compiling io.c
compiling marshal.c
compiling math.c
compiling node.c
compiling numeric.c
compiling object.c
compiling pack.c
compiling parse.c
compiling process.c
compiling random.c
compiling range.c
compiling rational.c
compiling re.c
compiling regcomp.c
compiling regenc.c
compiling regerror.c
compiling regexec.c
compiling regparse.c
compiling regsyntax.c
compiling ruby.c
compiling safe.c
compiling signal.c
compiling sprintf.c
compiling st.c
compiling strftime.c
compiling string.c
compiling struct.c
compiling time.c
compiling transcode.c
compiling util.c
compiling variable.c
compiling compile.c
compiling debug.c
compiling iseq.c
compiling vm.c
compiling vm_dump.c
compiling thread.c
compiling cont.c
compiling ./enc/ascii.c
compiling ./enc/us_ascii.c
compiling ./enc/unicode.c
compiling ./enc/utf_8.c
compiling newline.c
compiling ./missing/memcmp.c
compiling ./missing/isnan.c
compiling ./missing/finite.c
compiling ./missing/isinf.c
compiling ./missing/setproctitle.c
compiling addr2line.c
generating prelude.c
compiling prelude.c
compiling dmyext.c
linking static-library libruby-static.a
generating encdb.h
encdb.h unchanged
making enc
make[1]: Entering directory `/home/pfanni/src/ruby-1.9.3-p194'
compiling ./enc/encdb.c
linking encoding encdb.so
/home/pfanni/src/freetz-1.2_rc2/toolchain/build/mipsel_gcc-4.6.1_uClibc-0.9.32/mipsel-linux-uclibc/lib/gcc/mipsel-linux-uclibc/4.6.1/../../../../mipsel-linux-uclibc/bin/ld: /home/pfanni/src/freetz-1.2_rc2/toolchain/build/mipsel_gcc-4.6.1_uClibc-0.9.32/mipsel-linux-uclibc/lib/gcc/mipsel-linux-uclibc/4.6.1/crtbeginT.o: relocation R_MIPS_HI16 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/home/pfanni/src/freetz-1.2_rc2/toolchain/build/mipsel_gcc-4.6.1_uClibc-0.9.32/mipsel-linux-uclibc/lib/gcc/mipsel-linux-uclibc/4.6.1/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[1]: *** [.ext/mipsel-linux/enc/encdb.so] Fehler 1
make[1]: Leaving directory `/home/pfanni/src/ruby-1.9.3-p194'
make: *** [enc] Fehler 2
Ich bin komplett ratlos. Muss ich andere Einstellungen in menuconfig vornehmen? Eine Datei manuell anpassen? Sind die freetz-Libraries falsch kompiliert? Was übersehe ich und wie bekomme ich Ruby für die Box richtig kompiliert.
Ich würde mich sehr über Hilfe freuen!
Bitte sagt bescheid, wenn Ihr weitere Infos benötigt!
Vielen Dank!
Gruss, Pfanni
Anhänge
Zuletzt bearbeitet: