ESP32 JTAG
来自Jack's Lab
目录 |
1 Overview
$ sudo apt-get install libftdi-dev make libtool pkg-config autoconf automake texinfo $ git clone --recursive git://github.com/espressif/openocd-esp32.git $ cd openocd-esp32 $ ./bootstrap $ ./configure --enable-openjtag_ftdi $ make && sudo make install
2 GDB Tips
2.1 Display Register
(gdb) i r a # show all registers including float and multimedia (gdb) i r pc 0x40080f7f 0x40080f7f <_xt_medint3+23> lbeg 0x0 0 lend 0x0 0 lcount 0x0 0 sar 0x1e 30 ps 0x60e33 396851 threadptr 0x0 0 br 0x0 0 scompare1 0xb33f0000 3007250432 acclo 0x0 0 acchi 0x0 0 m0 0x0 0 m1 0x0 0 m2 0x0 0 m3 0x0 0 expstate 0x0 0 f64r_lo 0x0 0 f64r_hi 0x0 0 f64s 0x0 0 fcr 0x0 0 fsr 0x0 0 a0 0x400ecf6b 1074712427 a1 0x3ffc4e90 1073499792 a2 0x17 23 a3 0x3ffc178c 1073485708 a4 0x1 1 a5 0x3ffc47b0 1073498032 a6 0x3ffc478c 1073497996 a7 0x1 1 a8 0x3ffb 16379 a9 0x3ffc4f30 1073499952 a10 0x3ffb0048 1073414216 a11 0x3ffc1780 1073485696 a12 0x3ffbfe68 1073479272 a13 0x0 0 a14 0x3ffc4848 1073498184 a15 0x3ffc4810 1073498128 (gdb) i r pc pc 0x40080f7f 0x40080f7f <_xt_medint3+23> (gdb) i r epc1 epc1 0x0 0
2.2 Display Memory
(gdb) x /4wx 0x40080000 # Display the data at the specified address in hexadecimal 0x40080000 <_WindowOverflow4>: 0x1049c500 0xe52049d5 0x49f53049 0x00003400 (gdb) i r pc pc 0x400809c4 0x400809c4 <ipc_task> (gdb) x /8x $pc 0x400809c4 <ipc_task>: 0x30004136 0x3d3003eb 0x10123704 0x2cfeaba1 0x400809d4 <ipc_task+16>: 0xfeaac1fb 0x10feabd1 0x48252011 0xfea93150 (gdb) x /4x $pc+12 0x400809d0 <ipc_task+12>: 0x2cfeaba1 0xfeaac1fb 0x10feabd1 0x48252011 (gdb) x /s 0x3f401330 # Display the data at the specified address as a string 0x3f401330: "Scanned %d APs \r\n" (gdb) x /8i $pc # Display the data at the specified address as instruction (24 instructions) => 0x400d1a3f <scan_ap_task+35>: l32r a8, 0x400d01f8 <_stext+480> 0x400d1a42 <scan_ap_task+38>: callx8 a8 0x400d1a45 <scan_ap_task+41>: l16ui a2, a1, 16 0x400d1a48 <scan_ap_task+44>: addx2 a10, a2, a2 0x400d1a4b <scan_ap_task+47>: addx4 a10, a10, a2 0x400d1a4e <scan_ap_task+50>: slli a10, a10, 2 0x400d1a51 <scan_ap_task+53>: l32r a8, 0x400d00c8 <_stext+176> 0x400d1a54 <scan_ap_task+56>: callx8 a8
2.3 Modify Register
(gdb) i r a0 a0 0x0 0 (gdb) set $a0=0x55aa (gdb) i r a0 a0 0x55aa 21930 (gdb) set $pc = 0x4008020c
2.4 Modify Memory
(gdb) set {unsigned int}0x40080a51=0x0 (gdb) set *(unsigned int*)0x40080a54=0x55aa
2.5 Search Memory
Usage: find <start> <end> <count> <value> (gdb) define find set $ptr = $arg0 set $cnt = 0 while ( ($ptr<=$arg1) && ($cnt<$arg2) ) if ( *(unsigned int *)$ptr == $arg3 ) x /wx $ptr set $cnt = $cnt + 1 end set $ptr = $ptr + 4 end end
2.6 Breakpoint & Watchpoint
(gdb) b *0x40080506 (gdb) watch *(unsigned int *)0x40081020==0x90909090