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

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

就可以了



后面呢?



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值