參考資料:
https://github.com/kbeckmann/game-and-watch-retro-go
https://github.com/ghidraninja/game-and-watch-flashloader
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
步驟如下:
1. 連接ST-LINK V2燒錄器到SWD腳位
2. 執行如下命令
$ sudo apt-get install gdb-multiarch -y
$ ln -s /usr/bin/gdb-multiarch /usr/bin/arm-none-eabi-gdb
$ cd
$ wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
$ tar xvf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
$ sudo mv gcc-arm-none-eabi-10-2020-q4-major /opt
$ export PATH=/opt/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH
$ cd
$ git clone --recurse-submodules https://github.com/kbeckmann/game-and-watch-retro-go
$ cd game-and-watch-retro-go
$ make -j8 flash
$ vim main.cfg
source [find interface/stlink.cfg]
adapter speed 500
transport select hla_swd
source [find target/stm32h7x.cfg]
reset_config none
$ openocd -f main.cfg -c "init; program build/gw_retro_go.elf; halt;"
Open On-Chip Debugger 0.11.0-rc1+dev-00010-gc69b4deae-dirty (2020-12-27-01:20)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
none separate
Info : clock speed 1800 kHz
Info : STLINK V2J17S4 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.198428
Info : stm32h7x.cpu0: hardware has 8 breakpoints, 4 watchpoints
Info : starting gdb server for stm32h7x.cpu0 on 3333
Info : Listening on port 3333 for gdb connections
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x0800c180 msp: 0x20020000
** Programming Started **
Info : Device: STM32H7Ax/7Bx
Info : STM32H7 flash has dual banks
Info : Bank (0) size is 1024 kb, base address is 0x08000000
Info : Padding image section 1 at 0x0800faf4 with 12 bytes (bank write end alignment)
Warn : Adding extra erase range, 0x0800fb00 .. 0x0800ffff
Warn : no flash bank found for address 0x90000000
Warn : no flash bank found for address 0x90000278
Warn : no flash bank found for address 0x9008c000
** Programming Finished **
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
接著開啟另一個視窗並且輸入如下指令
$ arm-none-eabi-gdb build/gw_retro_go.elf
(gdb) target remote :3333
Remote debugging using :3333
Reset_Handler () at startup_stm32h7b0xx.s:62
62 ldr sp, =_estack /* set stack pointer */
(gdb) b main
Breakpoint 1 at 0x800156c: file Core/Src/main.c, line 359.
(gdb) c
Continuing.
Note: automatically using hardware breakpoints for read-only addresses.
Breakpoint 1, main () at Core/Src/main.c:359
359 for(int i = 0; i < 1000000; i++) {
(gdb) list
354 int main(void)
355 {
356 /* USER CODE BEGIN 1 */
357 uint8_t trigger_wdt_bsod = 0;
358
359 for(int i = 0; i < 1000000; i++) {
360 __NOP();
361 }
362
363 // Nullpointer redzone