Cross-Compile Toolchain FritzBox

Einführung | Freetz Pakete | Freetz Addons | Freetz Tipps | Freetz chroot | Freetz Images | Freetz Faqs |
Toolchain von Freetz.org erstellen
sudo, libncurses5-dev, binutils, make, patch, gcc, g++, zlib1g-dev,file müssen installiert sein (Liste ist nicht vollständig, siehe http://wiki.ip-phone-forum.de/software:ds-mod:installation).
Auf dem Kompilier-Rechner ausführen:
normal@vz2:~$ cd /usr/src/ normal@vz2:/usr/src$ svn co http://svn.freetz.org/tags/15.2 ds26-15.2 # // ... Warten .. A ds26-15.2/packages/screen-4.0.2/COPYING A ds26-15.2/packages/screen-4.0.2/README U ds26-15.2 Checked out revision 2026. normal@vz2:/usr/src$ cd ds26-15.2/ normal@vz2:/usr/src/ds26-15.2$ make menuconfig # // Fritz!Box Version auswaehlen normal@vz2:/usr/src/ds26-15.2$ make precompiled # // ... Warten ... und dann symbolischer Link auf /usr/mipsel-linux-uclibc erstellen normal@vz2:/usr/src/ds26-15.2$ sudo ln -s `pwd -L`/toolchain/target /usr/mipsel-linux-uclibc
Testprogramm
Ein kleines Testprogramm (hello.c) :
int main(int argc, char *argv) { printf("Hallo Fritzbox.\n"); return(0); }
Testprogramm kompilieren
normal@vz2:~$ /usr/mipsel-linux-uclibc/bin/mipsel-linux-gcc hello.c -oHelloFritzBox hello.c: In function 'main': hello.c:3: warning: incompatible implicit declaration of built-in function 'printf' # // Warnungen sind erstmal egal .. wichtig ist, daß beim folgenden etwas von MIPS erzählt wird: normal@vz2:~$ file HelloFritzBox HelloFritzBox: ELF 32-bit LSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
Optimieren (stripping)
Da auf der Fritz!Box Speichermangel herrschen kann, ist es sinnvoll, die Größe der kompilierten Programme zu optimieren. Durch das Entfernen von Debug-Symbolen (stripping) kann Platz gespart werden.
normal@vz2:~$ du HelloFritzBox 8 HelloFritzBox normal@vz2:~$ /usr/mipsel-linux-uclibc/bin/mipsel-linux-strip HelloFritzBox normal@vz2:~$ du HelloFritzBox 4 HelloFritzBox normal@vz2:~$ file HelloFritzBox HelloFritzBox: ELF 32-bit LSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), stripped
Optimieren (stripping/statisches kompilieren)
Um nicht von Bibliotheken (die auf der Fritz!Box nicht installiert sind) abhängig zu sein, kann man Programme auch statisch kompilieren. Das bedeutet, daß alle benutzten Bibliotheksfunktionen direkt im Programm enthalten sind (Die Binärdateien werden dann natürlich größer).
normal@vz2:~$ /usr/mipsel-linux-uclibc/bin/mipsel-linux-gcc -static hello.c -oHelloFritzBox hello.c: In function 'main': hello.c:3: warning: incompatible implicit declaration of built-in function 'printf' normal@vz2:~$ file HelloFritzBox HelloFritzBox: ELF 32-bit LSB executable, MIPS, version 1 (SYSV), statically linked, not stripped normal@vz2:~$ du HelloFritzBox 20 HelloFritzBox normal@vz2:~$ /usr/mipsel-linux-uclibc/bin/mipsel-linux-strip HelloFritzBox normal@vz2:~$ du HelloFritzBox 16 HelloFritzBox normal@vz2:~$ file HelloFritzBox HelloFritzBox: ELF 32-bit LSB executable, MIPS, version 1 (SYSV), statically linked, stripped
Testen auf der Fritz!Box
Sobald das Kompilieren erfolgreich war, kann man die Binärdatei auf die Fritz!Box übertragen und dort testen:
# cd /var/tmp/ # chmod +x HelloFritzBox # ./HelloFritzBox Hallo Fritzbox.