123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- 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.
|