J'ai une application qui fonctionne sur cible en métal nu et a la structure suivanteDynamiquement code charge cible embarquée
- main.c
- service.c/.h
Il est compilé à l'exécutable ELF (system.elf) en utilisant la séquence standard gcc -c
, ld
. J'utilise linker pour générer un fichier de carte montrant les adresses de tous les symboles.
Maintenant, sans re-clignoter mon système, j'ai besoin d'ajouter une fonctionnalité supplémentaire avec un chargeur d'exécution personnalisé. Rappelez-vous, c'est un bare-metal sans OS.
Je voudrais
- compilation qui utilise extra.c API définies dans service.h (et lien en quelque sorte contre service.o existant/system.elf)
- copier l'exécutable résultant à mon SDRAM lors de l'exécution et sauter pour qu'il
- code chargé doit être en mesure d'exécuter et les accès les symboles exportés de service.c comme prévu
I THO ught je serais en mesure de réutiliser fichier carte pour lier le extra.o contre system.elf mais cela ne fonctionne pas:
ld -o extraExe extra.o system.map
Est-ce que gcc ou ld ont un certain mode pour rendre cette procédure tardive de liaison? Si non, comment puis-je obtenir le chargement de code dynamique que j'ai décrit ci-dessus?
gcc n'est pas alinker. – Olaf
fixé le titre, pls supprimer -1, ou simplement donner une réponse productive :) –
Encore c'est un frontend à un éditeur de liens, de sorte que vous pouvez lier en utilisant gcc ... –