Software für FritzBox kompilieren

Christoph_vW

Neuer User
Mitglied seit
10 Mrz 2005
Beiträge
29
Punkte für Reaktionen
0
Punkte
0
Ich hab heute versucht ein simples ANSI C Programm für die FritzBox zu kompilieren.

Ich hab es vorher unter Windows und Linux (i386) getestet, auf diesen Platformen lief es fehlerfrei. Dann hab ich es mit buildroot für "mipsel" (mips32) kompiliert und auf die FritzBox kopiert.

Wenn ich es dort starte bekomme ich aber immer nur ein Segmentation fault.
-> SIGSEGV


Hat jemand eine Idee was da schiefgelaufen sein könnte?
 
Du brauchst einen uClibc Compiler. Ich nehme an deine Binaries sind gegen die normale libc gelinkt. Suche mal in dem Forum nach Enriks buildroot, das erstellt auch einen passenden Crosscompiler.

Gruß,
danisahne
 
Hab ich schon gefunden... Damit klappt es.

Leider ist die Binary jetzt 67,4KB groß und benötigt auch noch die 52,6KB große libgcc_s.so.1 :-(

Ich fand die Linux i386 binary mit 8kb schon recht groß...
Kann man das irgendwie ändern?
 
Da kannst du leider nicht viel ändern. Mipsel Binaries sind größer als i386 Binaries (btw. 8KB ist nicht groß für ein Binary). Unnötige Abschnitte kannst du mit mipsel-linux-strip entfernen, das macht sie manchmal noch ein wenig kleiner.

Auf dem Flash nehmen sie wegen der Kompression des squashfs Dateisystems ohnehin nicht ganz so viel Platz weg.

Gruß,
danisahne

EDIT: Die libgcc_s.so.1 brauchst du ja nur einmal für alle deine selbstkompilierten Programme. Wenn du das Kernelcompilieren nicht scheust und ein Platzproblem hast, dann schau dich mal im Forum nach den LZMA Kernelpatches um (natürlich nur, wenn du vor hast, deine Binaries in die Firmware "reinzumodden").
 
Mit --static-libgcc kannst du die auch statisch machen.
Und die Dateien sind mit bestimmten Versionen von binutils alle größer als 64kb, da war irgendwas mit einem Offset...

MfG Oliver
 
Hmm
Ist es möglich ein soches Binary (~70kb) als CharDevice in den Flash zu packen oder gibt es da schwierigkeiten mit dem FlashMem

Gruß, Peter

[edit]
Noch ne Frage: wie kann ich ein mehrzeiliges HTML-File in das Binary einbinden. Eine Stringkonstante im Header oder C-source darf keinen Zeilenumbruch haben und Ressourcen funken IMHO nur untwe Win32...
 
@olistudent
Weißt du ob die Version der binutils aus Enriks buildroot betroffen ist? Mit welchen Versionen ist die Größe besser?
 
Ich denke nicht, dass es gut ist ein 70kb Binary in unter /var/flash zu packen.
Aber wenn es sein muss, sollte es gehen. Wenn nicht merkst du das dann ja. ;-)
Zum Einbinden kann ich nix sagen. Da hab ich kein Plan von.

binutils: Ja, ist sie. Da stehen aber nur 00 drin. Die Datei ist also nicht wirklich größer, wenn sie im squashfs liegt.
Ich hatte am Schluss binutils-2.16 benutzt, glaube ich, und da waren die Binaries wieder kleiner (mit gcc-3.4.4).
Dummerweise kann man damit den Kernel nicht kompilieren...

MfG Oliver
 
Hi,

den Compiler für den Kernel hab ich eh mit crosstool erstellt. Dann werd ich mir mal nochmal den uClibc Compiler bauen. Im Speicher sind die Nullen ja dann schon wieder, d.h. Arbeitsspeicherverschwendung.

Gruß,
danisahne
 
Ich hab es jetzt mal mit binutils 2.16.91.0.3 und gcc 3.4.4 probiert das buildroot zu kompilieren, allerdings bricht er nun beim erstellen der binuils mit folgendem Fehler ab:

Code:
WARNING: `makeinfo' is missing on your system.  You should only need it if
         you modified a `.texi' or `.texinfo' file, or any other file
         indirectly affecting the aspect of the manual.  The spurious
         call might also be the consequence of using a buggy `make' (AIX,
         DU, IRIX).  You might want to install the `Texinfo' package or
         the `GNU make' package.  Grab either from any GNU archive site.
make[3]: *** [/home/daniel/fritzbox/buildroot/toolchain_build_mipsel/binutils-2.16.91.0.3/bfd/doc/bfd.info] Fehler 1
make[3]: Leaving directory `/home/daniel/fritzbox/buildroot/toolchain_build_mipsel/binutils-2.16.91.0.3-build/bfd/doc'
Making info in po
make[3]: Entering directory `/home/daniel/fritzbox/buildroot/toolchain_build_mipsel/binutils-2.16.91.0.3-build/bfd/po'
make[3]: Für das Ziel »info« ist nichts zu tun.
make[3]: Leaving directory `/home/daniel/fritzbox/buildroot/toolchain_build_mipsel/binutils-2.16.91.0.3-build/bfd/po'
make[3]: Entering directory `/home/daniel/fritzbox/buildroot/toolchain_build_mipsel/binutils-2.16.91.0.3-build/bfd'
make[3]: Für das Ziel »info-am« ist nichts zu tun.
make[3]: Leaving directory `/home/daniel/fritzbox/buildroot/toolchain_build_mipsel/binutils-2.16.91.0.3-build/bfd'
make[2]: *** [info-recursive] Fehler 1
make[2]: Leaving directory `/home/daniel/fritzbox/buildroot/toolchain_build_mipsel/binutils-2.16.91.0.3-build/bfd'
make[1]: *** [all-bfd] Fehler 2
make[1]: Leaving directory `/home/daniel/fritzbox/buildroot/toolchain_build_mipsel/binutils-2.16.91.0.3-build'
make: *** [/home/daniel/fritzbox/buildroot/toolchain_build_mipsel/binutils-2.16.91.0.3-build/binutils/objdump] Fehler 2

Ich glaube mir fehlen da ein paar Patches. Jede bisherige Version hat ja in buildroot/toolchain/binutils/<version>/ einige Patches, ich habe da jetzt ein leeres Verzeichnis. Genauso beim gcc.

@olistudent
Kannst du mir die Patches für gcc 3.4.4 und binutils 2.16 schicken bzw. posten? Wie kommst du darauf, was gepatched werden muss?

EDIT: Der gepostete "Code" hat nichts mit dem eigentlichen Problem zu tun. Das Problem oben ließ sich durch die Installation des Packetes 'texinfo' beheben.
 
Ich hab das vom openwrt-cvs geklaut. :D
Mein Linux installiert gerade...

MfG Oliver
 
Dumme Frage:

Warum brauchen die Binaries die bereits auf der Fritz Box laufen keine libgcc_s.so.1? Wie sind die compiliert?
 
@MReimer: eben wie olistudent oben geschrieben hat mit der gcc Option
Code:
-static-libgcc
(aber, zumindest bei mir, am Beginn: - und nicht --)
Kleine Programme: sstrip (z.B. enthalten in den exepak sources) kann die meisten Programme etwas verkleinern (eine auf der fritzbox laufende Version ist hier); vermutlich hackt sstrip auch überflüssige am Ende des Programms befindliche Nullen ab (Quelle: README der sstrip sources).
 
Ich habe heute einen uClibc gcc-4.0.1 Compiler mit binutils-2.16.91.0.2 erstellt, mußte dazu aber auch an einigen Stellen in den uClibc Sourcen patchen (ich habe die uClibc nicht ersetzt, sondern noch die originale auf der Box). Das macht jetzt auch deutlich kleinere Binaries, allerdings sind sie gezipped kaum mehr kleiner, so dass der Vorteil vor allem im geringeren Hauptspeicherverbrauch liegt.

Mfg,
Daniel
 
Hi
Hat keiner eine ahnung wie man Mehrzeilige Strings in ein solches ANSI-C-Program packen kann? Wäre viel einfacher als das alles per shellscriupt machen zu müssen..

Vielen Dank, Peter
 
Ich bin mir nicht sicher was du meinst, vielleicht das:

Code:
#include <stdio.h>

int main (int argc, char *argv[])
{
  fprintf (stdout, "Zeile 1\nZeile 2\n");
  return 0;
}
 
Hi

Ich habe ein HTML-Template mit über 400 Zeilen. Jetz muss ich diesen Text irgendwie in eine Variable oder Konstante packen, sodass ich dann auf die ein oder andere Weise die darin enthaltenen Platzhalter durch konkrete Werte ersetzen.
Unter Win würde ich ein Ressourcenfile einbinden, aber das ist ja Win32-Only...

Gruß, Peter
 
@MaZderMind:
Interessiert es dich noch? Bin gerade mal wieder über den Thread gestolpert. Hätte noch das anzubieten:
Code:
#include <stdio.h>

static char test_string[] =
        "Zeile 1\n"
        "Zeile 2\n";

int main (int argc, char *argv[])
{
  printf (test_string);
  return 0;
}
 
[Edit Novize: Fullquote von danisahne (#10) gelöscht. Wie kann man für so einen kleinen Satz den ganzen Beitrag als Fullquote hier reinhängen? :?]

Hab gestern ein Ubuntu drauf gemacht und bekomme die obige Meldung bei make toolchain. Wie komm ich da weiter?
 
Zuletzt bearbeitet von einem Moderator:
Hi.
Die Suche ist dein Freund: Lösung?

MfG Oliver
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,219
Beiträge
2,248,329
Mitglieder
373,792
Neuestes Mitglied
gilbertsamson563
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.