Intégrer un autre binaire

8

Je construis un binaire pour ARM en utilisant GCC et Crossworks. J'ai une image binaire secondaire qui doit être chargée sur un autre CI lors du démarrage.

J'aime intégrer ce binaire à ma chaîne d'outils, en d'autres termes, je fais de ce binaire une partie de mon image et chaque fois que je construis ce binaire s'intègre dans le fichier binaire final qui sera chargé sur le CPU. Quelle est la meilleure pratique pour cela?

THX

Ktc
la source

Réponses:

3

Vous pouvez utiliser objcopypour transformer l'image binaire en un fichier objet. Le fichier objet contiendra des symboles accessibles à partir du code C. Dites ensuite à GCC de lier le fichier objet et vous pouvez accéder aux symboles dans le fichier objet en utilisant externafin de charger les données dans l'autre IC.

Voici un bon tutoriel sur la façon de lier dans un blob binaire, y compris sur la façon de classer les options que vous devez passer à l' objcopyutilisation objdump.

Et bien sûr la objcopypage de manuel et la objdumppage de manuel .

embedded.kyle
la source
super réponse .. il m'a fallu un total de 5 minutes pour faire ce travail ..
Ktc
Question supplémentaire. Le fichier obj fonctionne bien, mais la chaîne d'outils le place dans la RAM, ce qui devient un problème en raison de la taille du fichier. Comment puis-je forcer cet objet à être placé sur Flash?
Ktc
résolu .. fondamentalement, objcopy -I binaire -O elf32-littlearm -B arm --rename-section .data = .rodata, alloc, load, readonly, data, contents fpga.bin fpga.o cela fait tout. rodata et linker se placent correctement dans le flash.
Ktc
objcopya un grand nombre d'options. Il peut probablement faire tout ce que vous voulez. Cela nécessite juste beaucoup de regarder cette page de manuel. Merci d'avoir partagé votre solution car je suis sûr que ce sera une question courante pour les personnes qui cherchent à faire ce que vous faites.
embedded.kyle