2017-05-11 12 views
2

Ich habe alle Cross-Compile-Pakete auf meinem Ubuntu-System bisher installiert, habe aber ein Problem und brauche Hilfe.Cross kompilieren von Linux zu ARM-ELF (armv5tejl)

Linux 2.6.28.7 #1 CST 2012 armv5tejl unknown 

$ cat /proc/cpuinfo 
Processor  : ARM926EJ-S rev 5 (v5l) 
BogoMIPS  : 199.47 
Features  : swp half fastmult edsp java 
CPU implementer : 0x41 
CPU architecture: 5TEJ 
CPU variant  : 0x0 
CPU part  : 0x926 
CPU revision : 5 

Hardware  : ServerEngines PILOT3 
Revision  : 0000 
Serial   : 0000000000000000 


[email protected]:~/code$ arm-linux-gnueabi-readelf -h xxx.bin 
ELF Header: 
    Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00 
    Class:        ELF32 
    Data:        2's complement, little endian 
    Version:       1 (current) 
    OS/ABI:       ARM 
    ABI Version:      0 
    Type:        EXEC (Executable file) 
    Machine:       ARM 
    Version:       0x1 
    Entry point address:    0xa27c 
    Start of program headers:   52 (bytes into file) 
    Start of section headers:   128752 (bytes into file) 
    Flags:        0x2, GNU EABI, <unknown> 
    Size of this header:    52 (bytes) 
    Size of program headers:   32 (bytes) 
    Number of program headers:   6 
    Size of section headers:   40 (bytes) 
    Number of section headers:   25 
    Section header string table index: 24 

Dies ist die Zielmaschine, die ich kompilieren muss. Welche Flags sollte ich beim Kompilieren verwenden?

arm-linux-gnueabi-gcc simple.c -march=armv5 -static -o simplev5 
arm-linux-gnueabi-gcc simple.c -mcpu=arm926ej-s -static -o simple926 

wenn ich laufe die simplev5 oder simple926, zeigen:

Segmentation fault 

folgen @ Steven P Rat, ich das Dateiformat überprüft, wie folgt:

[email protected]:~/code$ file simplev5 
simplev5: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=f0607da1d809a7d98636d76ee0e538fc828e3b65, not stripped 
[email protected]:~/code$ file simple926 
simple926: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=ed1e6fdade02c0d2c985a503dafb6efadd13522f, not stripped 
+0

Mögliches Duplikat von http://stackoverflow.com/questions/17336236/cross-compile-from-linux-to-arm-elf-arm926ej-s-mt7108 – lnman

+0

Mögliches Duplikat von [Cross kompilieren von Linux zu ARM-ELF (ARM926EJ-S/MT7108)] (http://stackoverflow.com/questions/17336236/cross-compile-from-linux-to-arm-elf-arm926ej-s-mt7108) ... Dieses 'Linux 2.6.28.7 'ist ziemlich alt und der neueste Ubuntu-Cross-Arm ist wahrscheinlich für ein viel aktuelleres Linux konfiguriert. Selbst wenn '-static' erfolgreich ist, haben Sie immer noch 'swi'-Aufrufe, die möglicherweise nicht zugeordnet werden können. –

+0

[Erstellen eines Cross-Compiler von Grund auf] (http://frank.harvard.edu/~coldwell/toolchain/) könnte hilfreich sein. [Crosstool-ng] (http://crosstool-ng.github.io/) könnte nützlich sein, aber es hat Drop-Unterstützung für mindestens ältere GCC-Versionen und möglicherweise auch Linux-Versionen. Oft benötigen die Dinge kleine Patches, um den Compiler mit veralteten Abhängigkeiten zu erstellen. –

Antwort

1

Sie höchstwahrscheinlich die richtige Kompilierung oder Sie erhalten eine Fehlermeldung über ungültiges Format. Sie können bestätigen, dass Sie das richtige Dateiformat unter Verwendung:

file simple926 

Versuchen Sie, ein einfacheres Programm:

int main() { return 123; } 

Dann können Sie den Ergebniscode überprüfen, wenn Sie es ausführen es etwas tat, um zu bestätigen.

Um Ihren Segmentierungsfehler zu lösen, müssen Sie wahrscheinlich gdb auschecken und den Stack (Backtrace) untersuchen.

+0

Ich habe das Dateiformat überprüft, das wie oben aufgeführt ist. Darüber hinaus existiert die gdb nicht und kann nicht auf dem Zielrechner installiert werden. Mein Testcode ist deinem ähnlich. – user6903

+0

Tut mir leid, ich kann den Beitrag nicht kommentieren oder ich hätte nicht geantwortet. Aber basierend auf dem Kommentar ohne Kommentare sollten Sie sicherstellen, dass Sie mit der Toolchain arbeiten, die zu Ihrer installierten Version passt. Passen Sie die Kernel-Version so gut wie möglich an. –

Verwandte Themen