现在的位置: 首页 > 综合 > 正文

使用kgdb进行Linux内核调试(未完成!)

2013年10月03日 ⁄ 综合 ⁄ 共 1179字 ⁄ 字号 评论关闭

Linux内核调试


本篇文章将介绍如何进行Linux的内核调试,我们的环境如下:

主机:Ubuntu 11.04

虚拟机:VirtualBox的Ubuntu11.04


首先做如下准备工作:

1.

主机和虚拟机之间要可以共享文件,我用的是Samba,参见:http://blog.csdn.net/htttw/article/details/7216149

2. 

主机和虚拟机要可以通过串口通信,参见:http://blog.csdn.net/htttw/article/details/7221510



本次实验就相当于对之前实验的小小总结啦~~



准备完之后,就可以开始了:



1.

首先我们先准备好内核镜像bzImage和Busybox文件系统initrd.gz,制作方法可以参考:

http://blog.csdn.net/htttw/article/details/7215858


这里我们为了加快编译bzImage的速度,所以精简了Linux内核,具体参考:http://blog.csdn.net/htttw/article/details/7262239



2.

在主机上打开minicon:

minicon



3.

第一步的两个文件准备好后就可以启动虚拟机了,出现grub菜单,以前的实验都是按“c”后进入grub命令模式,然后输入“linux”,“initrd”来指定内核镜像和文件系统,这对于本实验是不够的,我们还需要把虚拟机的输出信息通过串口送到我们的主机上,但我摸索了很久还是没有找到如何在grub命令模式下设置串口的命令,所以,我们换另一钟方法:

在grub菜单中选择一项菜单项,按“e”编辑该菜单项,把原有的命令全部删除,然后输入以下语句:

linux /boot/bzImage console=tty0 console=ttyS0, 115200
initrd /boot/initrd.gz

就可以了,然后按F10启动。



4.

这样的话,在我们主机的minicom中就会出现虚拟机从串口输出的信息啦~~

而且,在虚拟机进入Busybox后,直接在主机的minicom中输入命令就可以直接操作虚拟机啦,如图~~


以上的操作全部在主机的minicom中完成


5





由于我的笔记本没有串口,所以在gdb中执行target remote /dev/ttyS0时会出错!错误信息:/dev/ttyS0 输入/输出错误,所以我们可以把命名管道/tmp/vbox重定向到某个端口,然后就可以啦,我们使用socat命令:

sudo apt-get install socat
socat tcp4-listen:8888 /tmp/vbox

表示把命名管道/tmp/vbox的输出重定向到tcp的8888端口

然后在gdb中输入:

set remotebaud 115200

target remote tcp:localhost:8888

就可以了

后面呢?


抱歉!评论已关闭.