About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / blackfin / kgdb.txt


Based on kernel version 2.6.27. Page generated on 2008-10-13 09:53 EST.

1				A Simple Guide to Configure KGDB
2	
3				Sonic Zhang <sonic.zhang[AT]analog[DOT]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.
Hide Line Numbers


About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog