Commit | Line | Data |
---|---|---|
474f1a66 SZ |
1 | A Simple Guide to Configure KGDB |
2 | ||
3 | Sonic Zhang <sonic.zhang@analog.com> | |
4 | Aug. 24th 2006 | |
5 | ||
6 | ||
7 | This KGDB patch enables the kernel developer to do source level debugging on | |
8 | the kernel for the Blackfin architecture. The debugging works over either the | |
9 | ethernet interface or one of the uarts. Both software breakpoints and | |
10 | hardware breakpoints are supported in this version. | |
11 | http://docs.blackfin.uclinux.org/doku.php?id=kgdb | |
12 | ||
13 | ||
14 | 2 known issues: | |
15 | 1. This bug: | |
16 | http://blackfin.uclinux.org/tracker/index.php?func=detail&aid=544&group_id=18&atid=145 | |
17 | The GDB client for Blackfin uClinux causes incorrect values of local | |
18 | variables to be displayed when the user breaks the running of kernel in GDB. | |
19 | 2. Because of a hardware bug in Blackfin 533 v1.0.3: | |
20 | 05000067 - Watchpoints (Hardware Breakpoints) are not supported | |
21 | Hardware breakpoints cannot be set properly. | |
22 | ||
23 | ||
24 | Debug over Ethernet: | |
25 | ||
26 | 1. Compile and install the cross platform version of gdb for blackfin, which | |
27 | can be found at $(BINROOT)/bfin-elf-gdb. | |
28 | ||
29 | 2. Apply this patch to the 2.6.x kernel. Select the menuconfig option under | |
30 | "Kernel hacking" -> "Kernel debugging" -> "KGDB: kernel debug with remote gdb". | |
31 | With this selected, option "Full Symbolic/Source Debugging support" and | |
32 | "Compile the kernel with frame pointers" are also selected. | |
33 | ||
34 | 3. Select option "KGDB: connect over (Ethernet)". Add "kgdboe=@target-IP/,@host-IP/" to | |
35 | the option "Compiled-in Kernel Boot Parameter" under "Kernel hacking". | |
36 | ||
37 | 4. Connect minicom to the serial port and boot the kernel image. | |
38 | ||
39 | 5. Configure the IP "/> ifconfig eth0 target-IP" | |
40 | ||
41 | 6. Start GDB client "bfin-elf-gdb vmlinux". | |
42 | ||
43 | 7. Connect to the target "(gdb) target remote udp:target-IP:6443". | |
44 | ||
45 | 8. Set software breakpoint "(gdb) break sys_open". | |
46 | ||
47 | 9. Continue "(gdb) c". | |
48 | ||
49 | 10. Run ls in the target console "/> ls". | |
50 | ||
51 | 11. Breakpoint hits. "Breakpoint 1: sys_open(..." | |
52 | ||
53 | 12. Display local variables and function paramters. | |
54 | (*) This operation gives wrong results, see known issue 1. | |
55 | ||
56 | 13. Single stepping "(gdb) si". | |
57 | ||
58 | 14. Remove breakpoint 1. "(gdb) del 1" | |
59 | ||
60 | 15. Set hardware breakpoint "(gdb) hbreak sys_open". | |
61 | ||
62 | 16. Continue "(gdb) c". | |
63 | ||
64 | 17. Run ls in the target console "/> ls". | |
65 | ||
66 | 18. Hardware breakpoint hits. "Breakpoint 1: sys_open(...". | |
67 | (*) This hardware breakpoint will not be hit, see known issue 2. | |
68 | ||
69 | 19. Continue "(gdb) c". | |
70 | ||
71 | 20. Interrupt the target in GDB "Ctrl+C". | |
72 | ||
73 | 21. Detach from the target "(gdb) detach". | |
74 | ||
75 | 22. Exit GDB "(gdb) quit". | |
76 | ||
77 | ||
78 | Debug over the UART: | |
79 | ||
80 | 1. Compile and install the cross platform version of gdb for blackfin, which | |
81 | can be found at $(BINROOT)/bfin-elf-gdb. | |
82 | ||
83 | 2. Apply this patch to the 2.6.x kernel. Select the menuconfig option under | |
84 | "Kernel hacking" -> "Kernel debugging" -> "KGDB: kernel debug with remote gdb". | |
85 | With this selected, option "Full Symbolic/Source Debugging support" and | |
86 | "Compile the kernel with frame pointers" are also selected. | |
87 | ||
88 | 3. Select option "KGDB: connect over (UART)". Set "KGDB: UART port number" to be | |
89 | a different one from the console. Don't forget to change the mode of | |
90 | blackfin serial driver to PIO. Otherwise kgdb works incorrectly on UART. | |
91 | ||
92 | 4. If you want connect to kgdb when the kernel boots, enable | |
93 | "KGDB: Wait for gdb connection early" | |
94 | ||
95 | 5. Compile kernel. | |
96 | ||
97 | 6. Connect minicom to the serial port of the console and boot the kernel image. | |
98 | ||
99 | 7. Start GDB client "bfin-elf-gdb vmlinux". | |
100 | ||
101 | 8. Set the baud rate in GDB "(gdb) set remotebaud 57600". | |
102 | ||
103 | 9. Connect to the target on the second serial port "(gdb) target remote /dev/ttyS1". | |
104 | ||
105 | 10. Set software breakpoint "(gdb) break sys_open". | |
106 | ||
107 | 11. Continue "(gdb) c". | |
108 | ||
109 | 12. Run ls in the target console "/> ls". | |
110 | ||
111 | 13. A breakpoint is hit. "Breakpoint 1: sys_open(..." | |
112 | ||
113 | 14. All other operations are the same as that in KGDB over Ethernet. | |
114 | ||
115 | ||
116 | Debug over the same UART as console: | |
117 | ||
118 | 1. Compile and install the cross platform version of gdb for blackfin, which | |
119 | can be found at $(BINROOT)/bfin-elf-gdb. | |
120 | ||
121 | 2. Apply this patch to the 2.6.x kernel. Select the menuconfig option under | |
122 | "Kernel hacking" -> "Kernel debugging" -> "KGDB: kernel debug with remote gdb". | |
123 | With this selected, option "Full Symbolic/Source Debugging support" and | |
124 | "Compile the kernel with frame pointers" are also selected. | |
125 | ||
126 | 3. Select option "KGDB: connect over UART". Set "KGDB: UART port number" to console. | |
127 | Don't forget to change the mode of blackfin serial driver to PIO. | |
128 | Otherwise kgdb works incorrectly on UART. | |
129 | ||
130 | 4. If you want connect to kgdb when the kernel boots, enable | |
131 | "KGDB: Wait for gdb connection early" | |
132 | ||
133 | 5. Connect minicom to the serial port and boot the kernel image. | |
134 | ||
135 | 6. (Optional) Ask target to wait for gdb connection by entering Ctrl+A. In minicom, you should enter Ctrl+A+A. | |
136 | ||
137 | 7. Start GDB client "bfin-elf-gdb vmlinux". | |
138 | ||
139 | 8. Set the baud rate in GDB "(gdb) set remotebaud 57600". | |
140 | ||
141 | 9. Connect to the target "(gdb) target remote /dev/ttyS0". | |
142 | ||
143 | 10. Set software breakpoint "(gdb) break sys_open". | |
144 | ||
145 | 11. Continue "(gdb) c". Then enter Ctrl+C twice to stop GDB connection. | |
146 | ||
147 | 12. Run ls in the target console "/> ls". Dummy string can be seen on the console. | |
148 | ||
149 | 13. Then connect the gdb to target again. "(gdb) target remote /dev/ttyS0". | |
150 | Now you will find a breakpoint is hit. "Breakpoint 1: sys_open(..." | |
151 | ||
152 | 14. All other operations are the same as that in KGDB over Ethernet. The only | |
153 | difference is that after continue command in GDB, please stop GDB | |
154 | connection by 2 "Ctrl+C"s and connect again after breakpoints are hit or | |
155 | Ctrl+A is entered. |