概要
本文是讲述如何使用两台机器通过串口线连接,调试Linux内核。基于Linux 2.6.21.1版本。
过程
补丁
我们这里使用quilt工具(http://savannah.nongnu.org/projects/quilt)来管理patch。
$ tar jxf linux-<base_kernel_version>.tar.bz2
$ cp -a kgdb-2 linux-<base_kernel_version>/patches
$ cd linux-<base_kernel_version>
$ quilt push -a
如果不想使用quilt,则必须手动将所有patch打进内核:
$ tar jxf linux-<base_kernel_version>.tar.bz2
$ cd linux-<base_kernel_version>
$ for p in $(grep patch ../kgdb-2/series);do patch -p1 -si ../kgdb-2/$p;done
编译
编译内核,将下列选择选编入内核
Device Drivers —>
Character devices —>
Serial drivers —>
<*> 8250/16550 and compatible serial support
[*] Console on 8250/16550 and compatible serial port
Kernel hacking —>
[*] KGDB: kernel debugging with remote gdb
[*] KGDB: Console messages through gdb
Method for KGDB communication (KGDB: On generic serial port (8250)) —>
(X) KGDB: On generic serial port (8250)
[*] Simple selection of KGDB serial port
(115200) Debug serial port baud rate
(0) Serial port number for KGDB
启动
如果要使用串口来调试内核,那么就在grub中,内核的启动参数上加上kgdbwait,它将会在系统启动内核的时候停下来等待调试。如果要改变串 口的参数,使用kgdb8250驱动,那内核启动参数为kgdb8250=0,115200,0代表使用串口0(/dev/ttyS0),波特率是 115200
例1:使用串口ttyS0,波特率为115200的参数是:
kgdb8250=0,115200 kgdbwait
例2:要使KGDB在启动的时候停下来等待连接,参数是:
kgdbwait
系统内核在启动过程中,有可能没有输出信息,过一段时间就会出现Login提示符,这可能视编译内核时的选项所决定。
调试
内核调试
被调试内核的机器叫target machine,使用某一台机器去连接target machine的机器叫development machine。当在development machine上调试target machine机器上的内核时,在development machine上执行:
$ cd linux-<base_kernel_version>
$ gdb ./vmlinux
(gdb) set remotebaud 115200
(gdb) target remote /dev/ttyS0
如果是通过网络调试内核,那么内核启动参数为:
kgdboe=@10.0.0.6/,@10.0.0.3/ (kgdboe=@LOCAL-IP/,@REMOTE-IP/)
调试命令是:
$ gdb ./vmlinux
(gdb) target remote udp:HOSTNAME:6443
模块调试
使用gdbmod-2.4这个二进制的命令来调试内核模块。它是基于带有KGDB模块调试补丁的gdb(6.4)。可以从这里下载:http://kgdb.linsyssoft.com/downloads/gdbmod-2.4.bz2,源代码可以从这里下载:http://kgdb.linsyssoft.com/downloads/gdb-6.4-kgdb-2.4.tar.bz2。 调试命令为:
通过网络调试内核
如果通过网络调试内核,则NAPI特性必须禁止。NAPI是用于在1G和10G以太网卡上快速通讯设计的。当一个包到达时,它能开启网卡的以太网驱 动模式 (ethernet driven mode)和切换到查询模式(switch to polling mode)。查询模式是尽快的关闭了到达包的暂停( The polling mode is turned off as soon as incoming packets take a pause.)。KGDB不能在这种情况下工作,即使是100M网卡,NAPI也要关闭。
更多信息
去http://kgdb.linsyssoft.com/ 或在kgdb-2的源码目录下输入”make htmldocs”(或pdfdocs, psdocs等) 来获得更多信息。
⌒╮ ╭⌒╮╭⌒╮ ╭⌒╮╭⌒╮ ╭⌒╮╭⌒╮╭⌒╮⌒╮来┨*┠看┨*┠你┨*┠啦┨*┠我┨*┠的┨*┠朋┨*┠友┨〓〓〓〓☆〓〓〓〓〓☆〓〓〓〓〓☆〓〓〓〓〓☆〓〓〓〓〓愿〓〓健〓〓康〓〓快〓〓乐〓〓与〓〓你〓〓相〓〓伴〓 ↓ ↓ ↓ ↓ ☆★☆ ☆★☆ ☆★☆ ☆★☆ ☆ 祝 ☆ ☆ 你 ☆ ☆ 幸 ☆ ☆ 福 ☆ ☆★☆ ☆★☆ ☆★☆ ☆★☆