Erfahrungsbericht: Cross-Compiler für die HorstBox Standard bauen

kai.moritz

Neuer User
Mitglied seit
3 Jan 2008
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Puhh... das war (ist) ganz schön anstrengend!

Ich habe hier den ganzen Tag damit verbracht, verschiedene Versionen des gcc und der binutils als Cross-Compiler für mips zu übersetzen. Die meiste Zeit hat es Build-Fehler geregnet. So daß ich jetzt erst mal glücklich bin, daß ich eine Kombination von Versionen und Build-Parametern herausgefunden (= durch Zufall getroffen) habe, mit der ich erst mal einen lauffähigen gcc zustandegebracht habe.

Jetzt kann ich kompilieren:
gcc -c hello.c -o hello.o
:)

Und ich scheine auch die richtige Architektur erwischt zu haben:
hello.o: ELF 32-bit MSB relocatable, MIPS, MIPS-I version 1 (SYSV), ...
Zum Vergleich das busybox Binary von horst:
busybox: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), ...

Leider kann ich noch nicht linken:
gcc hello.c -o hello
/usr/local/horstbox/lib/gcc/mips-unknown-linux-gnu/3.4.6/../../../../mips-unknown-linux-gnu/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status
:(

Das liegt daran, daß ich noch keine mips-Version der glibc gebaut habe...
Das will ich mir aber eigentlich auch sparen, indem ich mir per apt-cross die Bibliotheken für mips fertig kompiliert herunterlade! Leider komme ich zurzeit noch nicht mit dem Tool klar...


Hier ein kleines Kochrezept, für das, was ich bisher geschafft habe:

tar -xjvf binutils-2.15.tar.bz2
mkdir build
mkdir build/binutils
cd build/binutils
../../binutils-2.15/configure \
--prefix=/usr/local/horstbox \
--target=mips-unknown-linux-gnu
make all install

cd ../..

tar -xjvf gcc-core-3.4.6.tar.bz2
mkdir build/gcc
cd build/gcc
CC=gcc-3.4 ../../gcc-3.4.6/configure \
--target=mips-unknown-linux-gnu \
--prefix=/usr/local/horstbox \
--disable-multilib --without-headers \
--disable-nls --enable-threads=no \
--enable-symvers=gnu \
--enable-__cxa_atexit \
--enable-languages=c \
--disable-shared \
--with-newlib
make all install


Keine Ahnung, was die ganzen anderen Schalter (außer --target und --prefix) bedeuten, das muß ich noch erforschen. Ich habe sie erstmal einfach von crosstools-0.43 übernommen...

Eigentlich wollte ich gcc-2.95.3 benutzen, aber wie gesagt habe ich lange gebraucht, bis ich überhaupt einen Build vollständig zuendebringen konnte.
Ich könnte mir aber vorstellen, daß es eigentlich nicht an den Versionen lag, sondern an fehlenden Build-Parametern...
Wenn mir da jemand Tipps geben kann bin ich immer glücklich ;)

Ich werde mich demnächst nochmal an gcc-2.95.3 versuchen (weil in der Kernel-Doku von 2.4.31 steht, man solle den Kernel besser nicht mit einem neueren gcc übersetzen, wenn man sich Ärger ersparen will) und an einer passenden glibc...

Dir Frage ist nur, was eine passende glibc ist (geht ja leider nicht aus den bereitgestellten Quellen hervor) und ob der installierte Kernel wirklich mit gcc-2.95.3 kompiliert wurde (das Tuxbox-Projekt kompiliert deren 2.4er z.B. mit gcc-3.4.6). Die glibc-Version ist ja aber vielleicht auch egal, immerhin ist auf horst ja sowiso nur die libuClib installiert...

Ich wollte mal gucken, ob D-Link mir verrät, welche Versionen sie in ihrer Build-Umgebung benutzen. Würdet ihr für die Frage an den normalen Support mailen, oder hat jemand schon einen direkteren Draht zu den Entwicklern??

Gruß Kai
 
# cat /proc/version
Linux version 2.4.31-AMAZON-3.2-M416-V30 (hr@hrx1) (gcc version 3.3.4) #2 Sun Sep 30 14:36:36 CEST 2007
 
Hallo Kai,
Dir Frage ist nur, was eine passende glibc ist (geht ja leider nicht aus den bereitgestellten Quellen hervor) und ob der installierte Kernel wirklich mit gcc-2.95.3 kompiliert wurde (das Tuxbox-Projekt kompiliert deren 2.4er z.B. mit gcc-3.4.6). Die glibc-Version ist ja aber vielleicht auch egal, immerhin ist auf horst ja sowiso nur die libuClib installiert...
D-Link benutzt gcc 3.3.4. Die uClibc ist 0.9.27 - ob mit oder ohne spezielle Patches kann ich nicht sagen, da aus irgendeinem Grund der Sourcecode fehlt. Eine vollständige glibc wird nicht verwendet, weil sie für die Box zu groß wäre.

Gruß
henning
 
Hallo Kai,

ich habe ebenfalls lange versucht einen Crosscompiler zu bauen.
Jedoch ohne Erfolg. Bis ich vor einiger Zeit über folgenden Link gestolpert bin.

http://forum.fujitsu-siemens.de/DigitalHome/viewtopic.php?f=41&t=6957

Der Link führt zu einer doch recht aktiven Community, die sich mit Firmwareweiterungen
für den Fujitsu Siemens Activy Media Server beschäftigt. Diese hat zwar im ersten
Moment nichts mit der Horstbox zu tuen aber die Tools und Informationen
sind doch recht hilfreich für den Bau einer Toolchain für die Horstbox.

Der Ausgangspunkt ist eine Skriptsammlung, die zum Bauen einer Toolchain erforderlich
ist. In der Toolchain ist der Compiler , die Binutilities und noch einige andere Tools
enthalten.

Ich habe als Entwicklungssystem ein Ubuntu 7.10 verwendet. Man muß noch folgende
Pakete nachinstallieren um nicht auf die Nase zu fallen.

- build-essential
- bison
- flex
- m4
- patch
- gettext
- libncurses5-dev

Man braucht zum Bau der Toolchain viel Zeit und Geduld, knapp 2 GB Plattenplatz
denn die ausgepackten Quellpackete brauchen viel Platz.
Die Toolchain habe ich wiefolgt gebaut.

1.) Die Datei ppc-uclibc-toolchain-src.tar.bz2 von der Seite http://download.dsmg600.info/
runtergeladen.

2.) Das ganze im Homeverzeichnis ausgepackt.

tar -xvjf ppc-uclibc-toolchain-src.tar.bz2

3.) Den Verzeichnisnamen an die MIPS Architektur angepasst.

mv powerpc-uclibc-toolchain mips-uclibc-toolchain

4.) Die Architektur in den Konfigfiles an die Horsthardware angepasst.

In der Datei mips-uclibc-toolchain/Makefile folgendes anpassen

alt
----
#ARCH:=mips < hier den Lattenzaun entfernen (Zeile 33 )
..
ARCH:=powerpc < hier den Lattenzaun hinzufügen ( Zeile 35 )


neu
----
ARCH:=mips
..
#ARCH:=powerpc

Nun hat die Toolchain die richtige Zielhardware



5.) Anpassung von mips-uclibc-toolchain/make/uclibc.mk

Dieses File behandelt die uClibc. Die Version muß angepasst werden.
Beim Horst ( FW 2.04 / 2.07 ) kommt die uClibc 0.9.27 zum Einsatz.

Daher muß folgende Anpassung vorgenommen werden.

UCLIBC_DIR:=$(TOOL_BUILD_DIR)/uClibc-0.9.27
UCLIBC_SOURCE:=uClibc-0.9.27.tar.bz2


6.) Die mips-uclibc-toolchain/make/gdb-uclibc.mk löschen sonst bleibt
der Bau der Toolchain hängen. Die gdb dient zum Debuggen von Programmen
ist also beim Übersetzen von Quellcode in Files nicht notwendig.

7.) Für das Übersetzen von Quellecode in Binärfiles sind die Kernelheader
wichtig daher muß man hier die Quellen vom Kernel 2.4.31 in das
Configfile mips-uclibc-toolchain/make/kernel-headers.mk
aufnehmen.

ALT
-----
#LINUX_SITE:=http://www.uclibc.org/downloads/toolchain
LINUX_SITE:=http://www.develer.com/uclinux/uclinux-tools-20050221/
LINUX_SOURCE:=kernel-headers-2.4.21.tar.bz2
LINUX_DIR:=$(TOOL_BUILD_DIR)/linux

NEU
-----
LINUX_SITE:=http://www.uclibc.org/downloads/toolchain
#LINUX_SITE:=http://www.develer.com/uclinux/uclinux-tools-20050221/
LINUX_SOURCE:=linux-libc-headers-2.4.31.tar.bz2
LINUX_DIR:=$(TOOL_BUILD_DIR)/linux-libc-headers-2.4.31

8.) Anpassung der Compilerquellen in mips-uclibc-toolchain/make/gcc-ulibc-3.3.mk

alt:
-----
# Shiny new stuff...
GCC_VERSION:=3.3.3
GCC_SITE:=ftp://ftp.gnu.org/gnu/gcc/releases/gcc-$(GCC_VERSION)

neu:
-----
# Shiny new stuff...
GCC_VERSION:=3.3.3
GCC_SITE:=ftp://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION)

9.) nun im Verzeichnis /home/<user>/mips-uclibc-toolchain den Befehl
make aufrufen und mehrfach die ENTER-Taste bei den Fragen betätigen.
Danach kann es je nach Rechner 45 bis zu 90 Minuten dauern
bis die Toolchain dann fertig ist.

Wenn alles geklappt hat und das Linuxtypische Versuch und Irrtumspiel
rum ist findet man im Verzeichnis /home/<user>/mips-uclibc-toolchain/toolchain_mips
Die Toolchain. Es kann sein das die URL s nicht mehr ganz aktuell sind.

Man kann dann nach der Anpassung von Umgebungsvariablen , Quellpakete in
Horsttaugliche Programme übersetzen.

export PATH=~/mips-uclibc-toolchain/toolchain_mips/bin:$PATH
export CC=mips-linux-gcc
export CROSS_COMPILE=mips-linux-

Ich habe zuerst mal die Busybox Version 1.5.1 mit der Toolchain übersetzt
ohne Probleme. Zum testen habe ich die Busyboxdatei auf den USBStick
geladen und dort mit ./busybox getestet.

Anhang:
busybox 1.5.1 Binary ( Zip-File )
Modifiziertes Toolchainskript

Viel Spaß beim Ausprobieren

Andreas
 

Anhänge

  • mips-tc-20080806-src.tar.bz2
    297.5 KB · Aufrufe: 8
  • busybox.zip
    418.8 KB · Aufrufe: 6
Hallo Andreas,

erst mal vielen Dank für die vielen Tipps und die ausführliche Anleitung. Ich werde das so bald wie möglich mal nachvollziehen. Weiß nur leider noch nicht, wann ich dazu komme, da ich im Moment sehr viel arbeiten muß :( Deswegen habe ich schon lange nicht mehr mit meiner HorstBox herumspielen können.

Was mich brennend interessieren:
- Hast du schon versucht größere Software-Pakete auf der Horstbox zum laufen zu bekommen? Wenn ja, welche und mit welchem Erfolg?
- Ich hatte hier in dem Forum mal einen Thread gefunden, in dem ein Entwickler von seinen (bis dahin) erfolglosen Versuchen berichtet hat D-Link dazu zu bewegen richtige Entwicklungsumgebung (mit Konfigurations-Einstellungen, Build-Scripten usw.) herauszugeben - so wie bei dem großen Bruder der Horstbox. Hast du zufällig mitbekommen, ob sich da etwas getan hat?


Gruß kai
 
Für die HBX Std wird es IMHO nie eine Build-Umgebung geben.
 
Hallo Kai,

das mit dem Zeitmangel kenn ich. Das Schrauben unter Linux kann gelegentlich
zu einem üblen und zeitraubenden Gefummel ausarten.
Für die Toolchain habe ich zig anläufe probiert, Seitenweise Dokus durchforstet
und Stundenlang den Rechner gequält bzw. der hat mich mit kryptischen
Fehlermeldungen "belohnt".

Ich habe mich erst mal auf die "kleinen" Pakete konzentriert. Es sind die Pakete busybox,dnsmasq,
tinyproxy
und der midnight-commander.

Ich hänge mal die Ergebnisse meiner Arbeit an diese Antwort dran.

Es sei aber gesagt das der Einsatz dieser Dateien auf eigenes Risiko geschieht !!!
Meine Box ( FW 2.04 jetzt FW 2.07 ) hats überlebt aber ein gewisses Restrisiko besteht immer.


- BUSYBOX
Ich habe mit der busybox angefangen um die Toolchain zu testen.
In der von mir übersetzten Busybox sind einige Kommandos die in der orginalen Busybox fehlen. Die Orginalbusybox ist an die Horstbox angepasst.
Meine Übersetzung nicht. Daher ist die von mir übersetzte Version als
Ergänzung zu sehen und nicht als Ersatz. Ich hänge mal die neuste Version
an diese Antwort dran. Es ist die unstable Version 1.12.0 .

./busybox dann erscheinen alle möglichen Funktionen
./busybox ls entspricht dem ls Kommando

- DNSMASQ
Den dnsmasq habe ich übersetzt aber leider noch nicht testen können.

-TINYPROXY
Als weiters habe den Tinyproxy übersetzt. Der läuft recht gut.
Es ist aber eine Anpassung der tinyproxy.conf erforderlich.
Man muß sein eigenes Netz freigeben damit ein zugriff möglich ist.

1.) Auf welcher Adresse soll der tinyproxy hören

Listen <Interface-IP-der-Horstbox LAN-Seite>

2.) Den Loglevel nach den erfordernissen anpassen.

LogLevel Notice

Darauf achten das die Logs nicht zu groß werden oder den Logpfad auf
den USB-Stick biegen.

3.) Freigabe des eigenen Netzes

Allow <eigenes-netz>/<netzmaske>

z.B.

Allow 192.168.0.0/24

Aufruf

./tinyproxy -c tinyproxy.conf


Der Tinyproxy hört dann auf den TCP Port 8888 aber das kann man auch
anpassen.

- MIDNIGHT-Commander
Den Midnightkommander konnte ich zwar auch übersetzen aber nur
eine recht alte Version.Der MC läuft nur wenn man einiges anpasst.
Problem ist auch das der USB Stick nicht mit ext2 oder ext3 formatiert ist.
Man kann unter vfat keine Symlinks anlegen und das macht einiges
kompliziert. Men Skript setzt vorraus das auf dem USB Stick das
Verzeichnis extend existiert. In dieses Verzeichnis die mc-horst.tar.gz
kopieren. Dann in diesem Verzeichnis mit tar -xvzf das ganze auspacken.
Im Hauptverzeichnis des Sticks das Skript mc-horst.sh ablegen, die Verzeichnisse
im Skript anpassen. Bei meinem USB-Stick lautet der Pfad
/tmp/usbUSB43MIL0WM2EXEJLRD1 . Das muß im Skript
angepasst werden dann müßte der mc starten.
Aufruf cd /tmp/<USBStick> und dann ./mc-horst.sh

Den Thread mit der Entwicklerversion habe ich nicht verfolgt. Es ist sicherlich
ein sinnloses Unterfangen von D-Link was zur Enwicklungsumgebung der Standard zu erfahren.
Nun ja muß man sich was eigenes Basteln ;-)

Gruß

Andreas
 

Anhänge

  • busybox-1.12.0.zip
    590.8 KB · Aufrufe: 9
  • dnsmasq.zip
    105.7 KB · Aufrufe: 4
  • mc.zip
    713.7 KB · Aufrufe: 8
  • tinyproxy.zip
    86.2 KB · Aufrufe: 4
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.