156 lines
5.4 KiB
Plaintext
156 lines
5.4 KiB
Plaintext
|
A Simple Guide to Configure KGDB
|
||
|
|
||
|
Sonic Zhang <sonic.zhang@analog.com>
|
||
|
Aug. 24th 2006
|
||
|
|
||
|
|
||
|
This KGDB patch enables the kernel developer to do source level debugging on
|
||
|
the kernel for the Blackfin architecture. The debugging works over either the
|
||
|
ethernet interface or one of the uarts. Both software breakpoints and
|
||
|
hardware breakpoints are supported in this version.
|
||
|
http://docs.blackfin.uclinux.org/doku.php?id=kgdb
|
||
|
|
||
|
|
||
|
2 known issues:
|
||
|
1. This bug:
|
||
|
http://blackfin.uclinux.org/tracker/index.php?func=detail&aid=544&group_id=18&atid=145
|
||
|
The GDB client for Blackfin uClinux causes incorrect values of local
|
||
|
variables to be displayed when the user breaks the running of kernel in GDB.
|
||
|
2. Because of a hardware bug in Blackfin 533 v1.0.3:
|
||
|
05000067 - Watchpoints (Hardware Breakpoints) are not supported
|
||
|
Hardware breakpoints cannot be set properly.
|
||
|
|
||
|
|
||
|
Debug over Ethernet:
|
||
|
|
||
|
1. Compile and install the cross platform version of gdb for blackfin, which
|
||
|
can be found at $(BINROOT)/bfin-elf-gdb.
|
||
|
|
||
|
2. Apply this patch to the 2.6.x kernel. Select the menuconfig option under
|
||
|
"Kernel hacking" -> "Kernel debugging" -> "KGDB: kernel debug with remote gdb".
|
||
|
With this selected, option "Full Symbolic/Source Debugging support" and
|
||
|
"Compile the kernel with frame pointers" are also selected.
|
||
|
|
||
|
3. Select option "KGDB: connect over (Ethernet)". Add "kgdboe=@target-IP/,@host-IP/" to
|
||
|
the option "Compiled-in Kernel Boot Parameter" under "Kernel hacking".
|
||
|
|
||
|
4. Connect minicom to the serial port and boot the kernel image.
|
||
|
|
||
|
5. Configure the IP "/> ifconfig eth0 target-IP"
|
||
|
|
||
|
6. Start GDB client "bfin-elf-gdb vmlinux".
|
||
|
|
||
|
7. Connect to the target "(gdb) target remote udp:target-IP:6443".
|
||
|
|
||
|
8. Set software breakpoint "(gdb) break sys_open".
|
||
|
|
||
|
9. Continue "(gdb) c".
|
||
|
|
||
|
10. Run ls in the target console "/> ls".
|
||
|
|
||
|
11. Breakpoint hits. "Breakpoint 1: sys_open(..."
|
||
|
|
||
|
12. Display local variables and function paramters.
|
||
|
(*) This operation gives wrong results, see known issue 1.
|
||
|
|
||
|
13. Single stepping "(gdb) si".
|
||
|
|
||
|
14. Remove breakpoint 1. "(gdb) del 1"
|
||
|
|
||
|
15. Set hardware breakpoint "(gdb) hbreak sys_open".
|
||
|
|
||
|
16. Continue "(gdb) c".
|
||
|
|
||
|
17. Run ls in the target console "/> ls".
|
||
|
|
||
|
18. Hardware breakpoint hits. "Breakpoint 1: sys_open(...".
|
||
|
(*) This hardware breakpoint will not be hit, see known issue 2.
|
||
|
|
||
|
19. Continue "(gdb) c".
|
||
|
|
||
|
20. Interrupt the target in GDB "Ctrl+C".
|
||
|
|
||
|
21. Detach from the target "(gdb) detach".
|
||
|
|
||
|
22. Exit GDB "(gdb) quit".
|
||
|
|
||
|
|
||
|
Debug over the UART:
|
||
|
|
||
|
1. Compile and install the cross platform version of gdb for blackfin, which
|
||
|
can be found at $(BINROOT)/bfin-elf-gdb.
|
||
|
|
||
|
2. Apply this patch to the 2.6.x kernel. Select the menuconfig option under
|
||
|
"Kernel hacking" -> "Kernel debugging" -> "KGDB: kernel debug with remote gdb".
|
||
|
With this selected, option "Full Symbolic/Source Debugging support" and
|
||
|
"Compile the kernel with frame pointers" are also selected.
|
||
|
|
||
|
3. Select option "KGDB: connect over (UART)". Set "KGDB: UART port number" to be
|
||
|
a different one from the console. Don't forget to change the mode of
|
||
|
blackfin serial driver to PIO. Otherwise kgdb works incorrectly on UART.
|
||
|
|
||
|
4. If you want connect to kgdb when the kernel boots, enable
|
||
|
"KGDB: Wait for gdb connection early"
|
||
|
|
||
|
5. Compile kernel.
|
||
|
|
||
|
6. Connect minicom to the serial port of the console and boot the kernel image.
|
||
|
|
||
|
7. Start GDB client "bfin-elf-gdb vmlinux".
|
||
|
|
||
|
8. Set the baud rate in GDB "(gdb) set remotebaud 57600".
|
||
|
|
||
|
9. Connect to the target on the second serial port "(gdb) target remote /dev/ttyS1".
|
||
|
|
||
|
10. Set software breakpoint "(gdb) break sys_open".
|
||
|
|
||
|
11. Continue "(gdb) c".
|
||
|
|
||
|
12. Run ls in the target console "/> ls".
|
||
|
|
||
|
13. A breakpoint is hit. "Breakpoint 1: sys_open(..."
|
||
|
|
||
|
14. All other operations are the same as that in KGDB over Ethernet.
|
||
|
|
||
|
|
||
|
Debug over the same UART as console:
|
||
|
|
||
|
1. Compile and install the cross platform version of gdb for blackfin, which
|
||
|
can be found at $(BINROOT)/bfin-elf-gdb.
|
||
|
|
||
|
2. Apply this patch to the 2.6.x kernel. Select the menuconfig option under
|
||
|
"Kernel hacking" -> "Kernel debugging" -> "KGDB: kernel debug with remote gdb".
|
||
|
With this selected, option "Full Symbolic/Source Debugging support" and
|
||
|
"Compile the kernel with frame pointers" are also selected.
|
||
|
|
||
|
3. Select option "KGDB: connect over UART". Set "KGDB: UART port number" to console.
|
||
|
Don't forget to change the mode of blackfin serial driver to PIO.
|
||
|
Otherwise kgdb works incorrectly on UART.
|
||
|
|
||
|
4. If you want connect to kgdb when the kernel boots, enable
|
||
|
"KGDB: Wait for gdb connection early"
|
||
|
|
||
|
5. Connect minicom to the serial port and boot the kernel image.
|
||
|
|
||
|
6. (Optional) Ask target to wait for gdb connection by entering Ctrl+A. In minicom, you should enter Ctrl+A+A.
|
||
|
|
||
|
7. Start GDB client "bfin-elf-gdb vmlinux".
|
||
|
|
||
|
8. Set the baud rate in GDB "(gdb) set remotebaud 57600".
|
||
|
|
||
|
9. Connect to the target "(gdb) target remote /dev/ttyS0".
|
||
|
|
||
|
10. Set software breakpoint "(gdb) break sys_open".
|
||
|
|
||
|
11. Continue "(gdb) c". Then enter Ctrl+C twice to stop GDB connection.
|
||
|
|
||
|
12. Run ls in the target console "/> ls". Dummy string can be seen on the console.
|
||
|
|
||
|
13. Then connect the gdb to target again. "(gdb) target remote /dev/ttyS0".
|
||
|
Now you will find a breakpoint is hit. "Breakpoint 1: sys_open(..."
|
||
|
|
||
|
14. All other operations are the same as that in KGDB over Ethernet. The only
|
||
|
difference is that after continue command in GDB, please stop GDB
|
||
|
connection by 2 "Ctrl+C"s and connect again after breakpoints are hit or
|
||
|
Ctrl+A is entered.
|