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.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s