objcopy et les valeurs possibles pour bfdname
Depuis hier, je m’amuse à mettre en place une chaîne de compilation gcc pour microcontrôleur STM32F2/F4 (Cortex M3/M4 respectivement) dans Eclipse. Je dis amusement mais c’est totalement professionnel : travaillant au support technique et devant aider nos clients qui vont travailler avec notre nouveau produit qui fonctionne avec gcc, je me dois de maîtriser cette chaîne de compilation !
Après bien des galères pour trouver / comprendre les flags de compilation et ajouter d’innombrables dossiers à mon include path et à mon source path, c’est bon : ça compile et ça linke. Le plugin CDT pour Eclipse ne m’a pas vraiment emballé, je dois bien l’avouer. Il ne me reste plus qu’à flasher ma carte avec l’exécutable créé mais son petit défaut est qu’il est au format elf. Ce n’est pas pratique dans mon cas car j’utilise le ST-Link/V2 embarqué sur mes cartes STM3220/40G-EVAL et l’utilitaire qui va avec, le STM32 ST-Link Utility. Or, cet outil réclame en entrée un fichier au format dit « raw binary« . Ces fichiers portent souvent l’extension hex.
La suite GNU Binary Utilities offre l’utilitaire objcopy pour réaliser ce genre de tâches. La documentation utilise à gogo une valeur formelle bfdname, le nom du Binary File Descriptor. Bien. Très bien. Et je lui donne quelle valeur réelle à ce machin ? La documentation est muette à ce sujet et Google ne donne pas de résultats très probants. En fait, c’est tout simple : il suffit d’interroger directement l’objcopy qui est installé sur votre ordinateur ! L’option --help suffit pour avoir une liste non détaillée. On aura tout en bas quelques lignes de plus que les pages de manuel d’Internet : les formats supportés.
D:\Users\pgradot> objcopy.exe --help
Usage: C:\Program Files (x86)\CodeBlocks\MinGW\bin\objcopy.exe [option(s)] in-file [out-file]
Copies a binary file, possibly transforming it in the process
The options are:
-I --input-target Assume input file is in format
-O --output-target Create an output file in format
-B --binary-architecture Set output arch, when input is arch-less
-F --target Set both input and output format to
--debugging Convert debugging information, if possible
[...]
@ Read options from
-V --version Display this program's version number
-h --help Display this output
--info List object formats & architectures supported
C:\Program Files (x86)\CodeBlocks\MinGW\bin\objcopy.exe: supported targets: pe-i386 pei-i386 elf32-i386 elf32-little elf
32-big srec symbolsrec verilog tekhex binary ihex
Report bugs to <http://www.sourceware.org/bugzilla/>
On peut aussi utiliser l’option --info pour plus de détails.
D:\Users\pgradot> objcopy.exe --info
BFD header file version (GNU Binutils) 2.22
pe-i386
(header little endian, data little endian)
i386
pei-i386
(header little endian, data little endian)
i386
elf32-i386
(header little endian, data little endian)
i386
elf32-little
(header little endian, data little endian)
i386
elf32-big
(header big endian, data big endian)
i386
srec
(header endianness unknown, data endianness unknown)
i386
symbolsrec
(header endianness unknown, data endianness unknown)
i386
verilog
(header endianness unknown, data endianness unknown)
i386
tekhex
(header endianness unknown, data endianness unknown)
i386
binary
(header endianness unknown, data endianness unknown)
i386
ihex
(header endianness unknown, data endianness unknown)
i386
pe-i386 pei-i386 elf32-i386 elf32-little elf32-big srec
i386 pe-i386 pei-i386 elf32-i386 elf32-little elf32-big srec
symbolsrec verilog tekhex binary ihex
i386 symbolsrec verilog tekhex binary ihex
Tout simplement. Je sais maintenant que je dois faire : objcopy.exe -I elf32-little -O binary inputFile.elf outputFile.bin.
Notez que d’autres commandes utilisent bdfname comme valeur de paramètres, comme objdump.


