.titleBar { margin-bottom: 5px!important; }

[Problem] Hello World und "Bus error"

Dieses Thema im Forum "Freetz" wurde erstellt von mora, 4 März 2012.

  1. mora

    mora Neuer User

    Registriert seit:
    4 März 2012
    Beiträge:
    3
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo Leute
    bin wirklich absolut blutiger Laie und will meine Fritzbox 7170 nutzen für zusätzliche Programme.
    Habe bisher noch kein Freetz-Image auf die Box gemacht, wollte eben mit der Programmierung anfangen.
    Habe mir dazu die Freetz-1.2-rc1 Toolchain runtergeladen und ein Hello World Programm "Hi" entsprechend dem Wiki kompiliert. File Hi zeigt mir auch, dass die Datei eine Mips Executable ist.
    So, dann kopiere ich die Executable (mittels FileZilla) auf meine FB auf den MemoryStick, mit Telnet auf der Box wechsele ich in das entsprechende Verzeichnis /var/media/ftp/memorystick und starte das Programm mit "./Hi". Und was kommt? Immer diese Fehlermeldung : Bus error.
    Habe schon einige Einstellungen des Compilers probiert, wie
    -static für reingelinkte Lib
    - Os für die Speichergrenzen auf 4 byte festzulegen
    Was mache ich falsch?
    Wohlgemerkt, die FBF ist noch "original", nicht mit Freetz.

    Gruß
    Hubert
     
  2. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Die Frage hat nichts mit Freetz zu tun.

    Was genau tut die Option -Os Deiner Meinung nach?

    Wie groß ist die Datei am PC, wie groß ist sie auf der Box?
     
  3. olistudent

    olistudent IPPF-Urgestein

    Registriert seit:
    19 Okt. 2004
    Beiträge:
    14,779
    Zustimmungen:
    10
    Punkte für Erfolge:
    38
    Beruf:
    Softwareentwickler
    Ort:
    Kaiserslautern
    Wenn du kein Freetz auf der Box hast, dann solltest du auf alle Fälle die Option "-static" verwenden. Ich weiß nicht, ob die selbst gebauten Programme zur uClibc von AVM kompatibel sind.

    Poste doch bitte mal den kompletten Aufruf des Compilers und nicht nur Fetzen davon, sonst kann dir keiner helfen...

    Gruß
    Oliver
     
  4. mora

    mora Neuer User

    Registriert seit:
    4 März 2012
    Beiträge:
    3
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Moin
    Mit der Option -static habe ich es auch schon probiert, aber gleiches Ergebnis.
    Hier mein Aufruf:
    /home/mora/freetz-1.2-rc1/toolchain/target/bin/mipsel-linux-gcc Hi.c -oHi.
    entsprechend der Anleitung hier
    http://www.wehavemorefun.de/fritzbox/index.php/Cross-Compile_Toolchain

    @RalfFriedel: -Os soll doch die Speicherzugriffe an die 4-byte Grenzen alignen. Habe sonstwo gelesen, dass davon viele "Bus error" herkommen.
    Und die Dateien sind gleich groß.

    Vielen Dank für eure Hilfe,
    Hubert
     
  5. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wie groß genau sind denn beide Dateien? Wenn Du willst, kannst Du mal hier die Datei anhängen.

    Meinst Du, die Erklärung zu -Os lautet "Erzeuge ein lauffähiges Programm (default: nicht lauffähiges Programm)"?
     
  6. mora

    mora Neuer User

    Registriert seit:
    4 März 2012
    Beiträge:
    3
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi

    danke für die Frage nach der Größe der kopierten Executables, die sind doch tatsächlich auf der FB ein paar Byte kleiner.
    Das hing an einer Einstellung vom FileZilla, der default transfer type stand auf "auto". Nach Änderung auf "binary" stimmten die Größen überein.

    Ich habe die Exe einmal dynamisch und dann auch statisch gelinkt erstellt.
    Die statisch gelinkte bringt mir nun die gewünschte, bei der dynamischen kriege ich jetzt einen "Segmentatioon fault", was glaube ich auch was mit Speicher zu tun hat.
    Siehe
    #
    # ./Hi
    Segmentation fault
    # ./Hi_static
    !!!Hello World!!!#

    Doch warum? Habe doch dynamisch gegen die uClibc gelinkt wenn ich das so mache:
    [email protected]:~/Devel/test$ /home/mora/freetz-1.2_rc1/toolchain/target/bin/mipsel-linux-gcc Hi.c -oHi

    Meine dynamische Exe ist gegen ld-uClibc.0.9.29 gelinkt, habe ich mich "cat Hi" rausgefunden.
    Diese lib existiert auch auf der Box, aber mit geringer anderer Größe (22628 bytes), statt 22536 im toolchain.
    Kann das der Grund für das "Segmentation fault" sein?

    Danke nochmals und Gruß
    Hubert
     
  7. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wenn Du kein Freetz verwendest, solltest Du sicherheitshalber static verwenden. Freetz hat auch einen erweiterten dynamischen Linker, der effizientere dynamische Programme ermöglicht. Wenn Du willst, kannst Du auch versuchen, den dynamischen Linker der AVM Firmware zu überschreiben. Einfacher aber ist es, Freetz zu verwenden oder statisch zu linken.