配置串口使用KDB调试Linux内核(2)
时间:2010-10-25 来源:icymoon
前一切描述了如何打kdb补丁,如何配置串口,本节将重点描述如何调试。
使用串口登录或PS/2键盘进入kdb调试
1. 陷入KDB
说明:陷入KDB的输入字符,是在kdb源码中指定,可以在编译内核前根据自己的需求修改。比如,超级终端使用的”<esc>KDB”就在kdbmain.c文件中指定为const char kdb_serial_str[] = "\eKDB"; |
系统启动后,/proc/sys/kernel/kdb为0则表明KDB被关闭,如果为1,则打开。
如果使用minicom或windows的超级终端连接,配置好波特率等参数,发送<esc>KDB后即陷入调试状态。
如果使用PS/2口键盘与显示器连接系统,按下<pasue break>即可陷入调试状态。
2. KDB常用命令
本节只是简要列出一些常用命令,关于高级用法,请参考KDB的相关文档。
(1) 内存的显示和修改
- md和mdr:显示内核内容;
- mm:修改内存内容;
(2) 寄存器的显示和修改
- rd:显示处理器寄存器内容;
- rm:修改寄存器内容;
- ef:显示指定地址处的exception frame;
(3) 堆栈跟踪
- bt:显示有关当前线程的堆栈的回溯信息注[1];
- btp:根据pid显示某进程的堆栈回溯信息;
- btc:显示当前活动cpu上的正在运行的进程的堆栈回溯信息;
- bta:显示某状态或全部进程的堆栈回溯信息;
注[1]:某些情况下,bt类命令无法显示堆栈信息。查找资料的解释如下:
显示堆栈信息的命令可以有选择地将堆栈帧地址作为参数。如果没有提供地址,那么它采用当前寄存器来回溯堆栈。否则,它假定所提供的地址是有效的堆栈帧起始地址并设法进行回溯。如果内核编译期间设置了 CONFIG_FRAME_POINTER 选项,那么就用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯。如果没有设置 CONFIG_FRAME_POINTER ,那么 bt 命令可能会产生错误的结果。
(4) 断点及运行
- ss:单步执行;
- go:系统继续运行;
- bp:设置断点;
- bc:删除断点;
- bd:禁止断点;
- be:启用断点;
- bl:列出所有断点;
(5) 其他
- id:以一个地址/符号作为参数,对从该地址开始的指令进行反汇编。
- reboot:重起系统
- dmesg:显示dmesg信息
- cpu <cpu id>:切换CPU/核
相关阅读 更多 +