使用KGDB调试Linux内核

概要

本文是讲述如何使用两台机器通过串口线连接,调试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。 调试命令为:

$ gdbmod-2.4 ./vmlinux

通过网络调试内核

如果通过网络调试内核,则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等) 来获得更多信息。

This entry was posted in GNU/Linux and tagged . Bookmark the permalink.

One Response to 使用KGDB调试Linux内核

  1. 祖传全科 says:

    ⌒╮ ╭⌒╮╭⌒╮ ╭⌒╮╭⌒╮ ╭⌒╮╭⌒╮╭⌒╮⌒╮来┨*┠看┨*┠你┨*┠啦┨*┠我┨*┠的┨*┠朋┨*┠友┨〓〓〓〓☆〓〓〓〓〓☆〓〓〓〓〓☆〓〓〓〓〓☆〓〓〓〓〓愿〓〓健〓〓康〓〓快〓〓乐〓〓与〓〓你〓〓相〓〓伴〓   ↓     ↓       ↓     ↓  ☆★☆   ☆★☆     ☆★☆   ☆★☆ ☆ 祝 ☆ ☆ 你 ☆   ☆ 幸 ☆ ☆ 福 ☆  ☆★☆   ☆★☆     ☆★☆   ☆★☆

Leave a Reply

Your email address will not be published. Required fields are marked *