Bin est l'aspect final de la mémoire avant que le CPU ne commence à l'exécuter.
ELF en est une version tronquée/compressée, que le CPU/MCU ne peut donc pas exécuter directement.
L'éditeur de liens (dynamique) doit d'abord inverser suffisamment cela (et donc modifier les décalages pour les ramener aux positions correctes).
Mais il n'y a pas de linker/OS sur le MCU, donc vous devez flasher le bin à la place.
De plus, Ahmed Gamal a raison .
La compilation et l'édition de liens sont des étapes distinctes ; l'ensemble du processus est appelé "construction", c'est pourquoi la collection de compilateurs GNU a des exécutables séparés :
Un pour le compilateur (qui produit techniquement l'assemblage), un autre pour l'assembleur (qui produit le code objet au format ELF), puis un pour le linker (qui combine plusieurs fichiers objets en un seul fichier ELF), et enfin, au moment de l'exécution, il y a le linker dynamique, qui transforme effectivement un elf en bin, mais uniquement en mémoire, pour que le CPU puisse l'exécuter.
Notez qu'il est courant de se référer à l'ensemble du processus en tant que "compilation" (comme dans le nom de GCC lui-même), mais cela entraîne ensuite une confusion lorsque les détails sont discutés, comme dans ce cas, et Ahmed a voulu clarifier les choses.
C'est un problème courant dû à la nature inexacte du langage humain lui-même.
Pour éviter toute confusion, GCC produit le code objet (après avoir utilisé l'assembleur en interne) en utilisant le format ELF. L'éditeur de liens prend simplement plusieurs d'entre eux (avec une extension .o), et produit un seul résultat combiné, probablement même en les compressant (dans "a.out").
Mais tous, même les ".so" sont ELF. C'est comme plusieurs documents Word, chacun se terminant par ".chapter", tous étant combinés en un ".book" final, où tous les fichiers utilisent techniquement le même standard/format et auraient donc pu avoir ".docx" comme extension.
Le bac revient alors à convertir le livre en un fichier ".txt" en ajoutant autant d'espaces que nécessaire pour être équivalent à la taille du livre final (imprimé sur une seule bobine), avec des emplacements pour toutes les images à superposer.
0 votes
Voici ce que dit la NASM . Ce n'est pas spécifique à ARM, mais il s'agit probablement du même concept. Par exemple, si vous compilez un fichier contenant seulement
NOP
sans-f
(ou-fbin
), il se compile en un seul octet0x90
au lieu d'un conteneur ELF de 400 octets avec-felf32
. Donc juste le code brut, pas de métadonnées de conteneur. NASM dit qu'il est surtout utilisé pour les .COM de MS-DOS et les . .SYS des fichiers.section
sont généralement ignorées et ne génèrent qu'un alignement.0 votes
C'est l'une des façons dont les fichiers bin peuvent être utiles : pour créer un secteur de démarrage afin de déployer des systèmes d'exploitation : stackoverflow.com/a/32483545/895245