配置串口使用KDB调试Linux内核
2016-08-01 12:12
281 查看
我遇到的内核问题中,绝大部分靠printk就可以了,而不确定的死机/死锁问题就有点郁闷了,尤其是死状奇特,每次都不一样的。今天搞通了用串口进行内核调试的环境。内核调试相关工具也不少,kgdb,
kdump...而kdb的好处在于可以单机调试,随时break in,问题在于不能使用USB键盘(在我当前使用的这版内核上),守着机器local调试也比较辛苦。本文只记录配置调试环境和使用KDB的方法。
0.内核版本及环境
内核版本:2.6.X
KDB版本:4.4
终端:minicom
1.给内核打KDB的Patch
说明:
(1) KDB的内核patch只支持官方标准内核,如果使用一些发行版修改后的内核,可能需要手动修改一些地方才能编译通过并且运行起来。
(2) KDB的内核patch是与内核版本对应的。
a. 下载内核patch
ftp://oss.sgi.com/www/projects/kdb/download/
下载相应的内核版本的patch
b. 打Patch
gunzip .gz
patch -p1 < patch.kdb
如果是一些发行版修改过的kernel,有可能需要手动修改一些代码。
c. 编译安装内核
确保kernel hacking中的kdb相关选项被打开,编译,安装,更换内核。
2.配置系统允许串口登录
a. 修改/etc/inittab,增加如下行
S0:23:respawn:/sbin/agetty-L 9600 ttyS0 vt102
b. 修改/etc/securetty,增加如下行以确认串口可以使用root登录:
ttyS0
c. 修改/boot/grub/menu.lst,增加如下两行与内核启动参数:
#splashimage=(hd0,1)/boot/grub/splash.xpm.gz #如果留下可能会影响串口工作,比如花屏蔽啥的
serial --unit=0 --speed=9600 --word=8--parity=no --stop=1
#串口参数,unit=0指使用COM1口,speed指波特率,word指传输位宽,parity指奇偶校验,stop指停止位
terminal --timeout=10 console serial
#终端超时时间为10
#hiddenmenu
title Red Hat Enterprise Linux AS (XXX-kdb)
root (hd0,1)
kernel /boot/vmlinuz-XXX-kdb ro root=/dev/sdaX
console=tty1console=ttyS0,9600 #指定console
initrd /boot/initrd-XXX-kdb.img
3.使用串口登录测试机并调用
使用minicom或windows的超级终端连接,不要设错波特率之类的,发送KDB后即陷入调试状态。后续将记录使用KDB的一些心得。
4. 参考资料
http://oss.sgi.com/projects/kdb/
kdump...而kdb的好处在于可以单机调试,随时break in,问题在于不能使用USB键盘(在我当前使用的这版内核上),守着机器local调试也比较辛苦。本文只记录配置调试环境和使用KDB的方法。
0.内核版本及环境
内核版本:2.6.X
KDB版本:4.4
终端:minicom
1.给内核打KDB的Patch
说明:
(1) KDB的内核patch只支持官方标准内核,如果使用一些发行版修改后的内核,可能需要手动修改一些地方才能编译通过并且运行起来。
(2) KDB的内核patch是与内核版本对应的。
a. 下载内核patch
ftp://oss.sgi.com/www/projects/kdb/download/
下载相应的内核版本的patch
b. 打Patch
gunzip .gz
patch -p1 < patch.kdb
如果是一些发行版修改过的kernel,有可能需要手动修改一些代码。
c. 编译安装内核
确保kernel hacking中的kdb相关选项被打开,编译,安装,更换内核。
2.配置系统允许串口登录
a. 修改/etc/inittab,增加如下行
S0:23:respawn:/sbin/agetty-L 9600 ttyS0 vt102
b. 修改/etc/securetty,增加如下行以确认串口可以使用root登录:
ttyS0
c. 修改/boot/grub/menu.lst,增加如下两行与内核启动参数:
#splashimage=(hd0,1)/boot/grub/splash.xpm.gz #如果留下可能会影响串口工作,比如花屏蔽啥的
serial --unit=0 --speed=9600 --word=8--parity=no --stop=1
#串口参数,unit=0指使用COM1口,speed指波特率,word指传输位宽,parity指奇偶校验,stop指停止位
terminal --timeout=10 console serial
#终端超时时间为10
#hiddenmenu
title Red Hat Enterprise Linux AS (XXX-kdb)
root (hd0,1)
kernel /boot/vmlinuz-XXX-kdb ro root=/dev/sdaX
console=tty1console=ttyS0,9600 #指定console
initrd /boot/initrd-XXX-kdb.img
3.使用串口登录测试机并调用
使用minicom或windows的超级终端连接,不要设错波特率之类的,发送KDB后即陷入调试状态。后续将记录使用KDB的一些心得。
4. 参考资料
http://oss.sgi.com/projects/kdb/
相关文章推荐
- 配置和使用linux内核调试环境(基于虚拟机)
- 串口调试利器--Minicom配置及使用详解.md
- 使用kdb和kgdb调试Linux内核(2)
- minicom的使用和配置(实现串口调试)(同样适用于虚拟机设置)
- 串口调试利器--Minicom配置及使用详解
- 使用kdb和kgdb调试Linux内核(1)
- 使用串口线真机调试Linux内核
- linux内核关于uart2配置为RTS引脚时,串口无法使用的问题
- 使用eclipse+gdb进行arm板嵌入式linux远程调试的配置方法
- 配置Flex Builder 使用Firefox进行调试
- Windows CE 5.0模拟器调试串口的环境配置
- 使用qemu调试linux内核
- Linux下使用minicom进行串口调试(DB9三芯)
- 【转】linux下usb转串口线的使用 和 关于VMware虚拟机下串口配置的使用技巧
- 如何配置才能使用InterDev 来调试ASP代码 zt
- keil MDK 中使用虚拟串口调试串口
- 使用zend studio配置Xdebug调试PHP教程
- Linux下使用minicom进行串口调试(DB9三芯)
- 2440 ADS的配置使用及调试
- 关于VMware虚拟机下串口配置使用技巧