2017-09-05 3 views
0

Ich möchte eine Binärdatei in meinem ARM MCU Flash-Speicher mit Gdb blinken.Laden Sie eine Binärdatei in Flash-Speicher mit gdb

Ich bin in der Lage zu Zeit ein Elf wie folgt zu laden:

# 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 

Grundsätzlich ist der load Befehl an Laden elf Abschnitte an die richtigen Adressen gut ist.

Um jedoch mehrere Firmware in den MCU-Flash-Speicher zu legen, möchte ich ein komplettes Binärbild senden. Um es zu testen, habe ich ein zero.bin Bild (mit nichts als 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 

So führt dies nicht zu funktionieren scheint, wie Sie in 0x0 sehen es sollte von ‚0 voll sein 'aber es enthält immer noch meine vorherige Firmware (die Vektortabelle tatsächlich)

Was vermisse ich? Oder gibt es eine andere Möglichkeit, eine Binärdatei mit gdb zu laden?

+0

Der Wiederherstellungsbefehl ist mit 'Schreiben in Flash-Speicher in diesem Kontext verboten 'fehlgeschlagen. Ich versuche herauszufinden, warum dies auch für mich passiert – Jon

+0

Eigentlich war es, weil diese Zone auf den Flash-Speicher zugeordnet ist, und Gdb benötigt eine Möglichkeit, um herauszufinden, wie man den Flash-Programm kann es nicht etwas sein wie 'addr [i] = data [i]'. Ich weiß jedoch nicht, wie ich gdb dazu einrichten soll. Wie auch immer, hoffe es hilft! – Ervadac

Antwort

0

Wenn Sie OpenOCD,

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

sollte Ihnen helfen.

Zum Beispiel, wenn Sie Ihre Flash bei 0x400000 beginnt,

mon flash write_bank 0 zero.bin 0x100000

die zero.bin Datei auf 0x500000 schreiben, diese Adresse unter der Annahme ist beschreibbar.

Verwandte Themen