2017-05-11 2 views
2

J'ai installé tous les paquets de compilations croisées sur mon système ubuntu mais j'ai un problème et j'ai besoin d'aide.Compilation croisée de linux à 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 

Ceci est la machine cible pour laquelle je dois compiler. Quels drapeaux dois-je utiliser lors de la compilation?

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

quand je lance le simplev5 ou simple926, show:

Segmentation fault 

suivre @Steven P conseils, j'ai vérifié le format de fichier, comme suit:

[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

Copie possible de http://stackoverflow.com/questions/17336236/cross-compile-from-linux-to-arm-elf-arm926ej-s-mt7108 – lnman

+0

Copie possible de [Cross compile de linux à ARM-ELF (ARM926EJ-S/MT7108)] (http://stackoverflow.com/questions/17336236/cross-compile-from-linux-to-arm-elf-arm926ej-s-mt7108) ... Ceci 'Linux 2.6.28.7 'est plutôt vieux et le plus récent cross-arm d'Ubuntu est probablement configuré pour un Linux beaucoup plus récent. Même si "-static" a réussi, vous avez toujours des appels 'swi 'qui ne peuvent pas être mappés. –

+0

[Construire un compilateur croisé à partir de zéro] (http://frank.harvard.edu/~coldwell/toolchain/) pourrait être utile. [Crosstool-ng] (http://crosstool-ng.github.io/) peut être utile, mais il a aussi un support pour les anciennes versions de GCC et éventuellement les versions de Linux. Souvent, les choses ont besoin de petits correctifs pour que le compilateur soit construit avec des dépendances obsolètes. –

Répondre

1

Vous avez probablement la bonne compilation ou vous obtiendrez une erreur sur Format invalide. Vous pouvez confirmer que vous avez le format de fichier approprié en utilisant:

file simple926 

Essayez un programme plus simple:

int main() { return 123; } 

Ensuite, vous pouvez vérifier le code de résultat lorsque vous l'exécutez pour confirmer qu'il a fait quelque chose. Pour résoudre votre erreur de segmentation, vous devez probablement sortir gdb et examiner la pile (backtrace).

+0

J'ai vérifié le format de fichier, indiqué ci-dessus. De plus, le gdb n'existe pas et ne peut pas être installé sur la machine cible. Mon code de test est similaire au vôtre. – user6903

+0

Désolé, je ne peux pas commenter sur le poste ou je n'aurais pas répondu. Mais, sur la base d'un commentaire sur le bruit, vous devez vous assurer que vous construisez avec la chaîne d'outils correspondant à votre version installée. Faites correspondre la version du noyau du mieux possible. –