2017-09-05 5 views
0

Je voudrais flasher un fichier binaire dans ma mémoire flash ARM MCU en utilisant gdb.Charger un fichier binaire dans la mémoire flash en utilisant gdb

Actuellement, je suis en mesure de charger un elfe comme ceci:

# arm-none-eabi-gdb --command=flash.gdb "myfirmware.elf" 

# cat flash.gdb 
set confirm off 
target remote 127.0.0.1:7224 
monitor reset 
load 
detach 
quit 

Fondamentalement, la commande load est bonne au chargement des sections elfes aux bonnes adresses.

Cependant, pour mettre plusieurs micrologiciels dans la mémoire flash du MCU, je voudrais envoyer une image binaire complète. Pour le tester, je fait une image zero.bin (ne contenant que 0):

# hexdump zero.bin 
0000000 0000 0000 0000 0000 0000 0000 0000 0000 
* 
0020000 


# arm-none-eabi-gdb 
(gdb) target remote 127.0.0.1:7224 
(gdb) mon reset halt 
(gdb) mon reset init 
(gdb) set arm fallback-mode auto 
(gdb) set debug arm 
(gdb) restore zero.bin binary 0x0 
Restoring binary file zero.bin into memory (0x0 to 0x20000) 
Writing to flash memory forbidden in this context 
(gdb) info mem                           
Using memory regions provided by the target.                
Num Enb Low Addr High Addr Attrs                  
0 y 0x00000000 0x00020000 flash blocksize 0x800 nocache            
1 y 0x00020000 0x100000000 rw nocache   
(gdb) delete mem 1 
warning: Switching to manual control of memory regions; use "mem auto" to fetch regions from the target again. 
(gdb) delete mem 0 
(gdb) mem 0 0x100000000 rw nocache 
(gdb) info mem 
Using user-defined memory regions. 
Num Enb Low Addr High Addr Attrs 
1 y 0x00000000 0x100000000 rw nocache 
(gdb) restore zero.bin binary 0x0 
Restoring binary file zero.bin into memory (0x0 to 0x20000) 
(gdb) x/10 0x0 
0x0: 0x20003000  0x00003c5d  0x00003c7d  0x00003c7d 
0x10: 0x00000000  0x00000000  0x00000000  0x00000000 
0x20: 0x00000000  0x00000000 

Donc cela ne semble pas fonctionner, comme vous pouvez le voir dans 0x0, il devrait être plein de « 0 'mais il contient toujours mon firmware précédent (la table de vecteur en fait)

Qu'est-ce qui me manque? Ou peut-être il y a une autre façon de charger un binaire en utilisant gdb?

+0

La commande de restauration a échoué avec 'Ecriture dans la mémoire flash interdite dans ce contexte'. J'essaie de comprendre pourquoi cela se passe pour moi aussi – Jon

+0

En fait, dans mon cas, c'était parce que cette zone est mappée à la mémoire flash, et gdb a besoin d'un moyen de comprendre comment programmer le flash, il ne pouvait pas être quelque chose comme 'addr [i] = données [i]'. Je ne sais pas comment configurer gdb pour faire ça. En tout cas, j'espère que ça aide! – Ervadac

Répondre

0

Si vous utilisez OpenOCD,

mon flash write_bank <num> <file_name> <offset> 

devrait vous aider.

Par exemple, si votre flash commence à 0x400000,

mon flash write_bank 0 zero.bin 0x100000

le fichier écriront zero.bin à 0x500000, en supposant que l'adresse est éditable.