用qemu调试linux内核

本文在ubuntu 16.04 lts 中实做完成,如果用其他发行版,可能需要的软件包名称会有细微区别。

安装软件包

$ sudo apt-get install bridge-utils uml-utilities vtun qemu

配置tun网络

tun/tap 建立一个与qemu内系统可以通信的网络,由上一步中的 bridge-utils 和 vtun 包提供,所涉及命令如下:

$ sudo /etc/init.d/vtun start
$ sudo chmod a+rw /dev/net/tun
$ sudo brctl addbr br0
$ sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0 up
$ sudo tunctl -b -u 1000 -t tap0
$ sudo ifconfig tap0 0.0.0.0 promisc

注意 tunctl 命令中的 -u 参数,它是用户ID,系统默认第一个用户的ID是1000,根据实际的用户ID填写。

测试qemu能否正常工作

执行命令:

$ qemu-system-x86_64 -kernel kernels/ubuntu/linux-4.4.0/arch/i386/boot/bzImage -net nic,model=rtl8139 -net tap,ifname=tap0,script=no -initrd rootfs.ext2

如图所示,系统正常启动了:

在qemu中的系统中设置与br0同一网段的ip,看网络是否正常:

网络已经正常。

通过qemu的gdb-stub调试

启动qemu:

$ qemu-system-x86_64 -kernel kernels/ubuntu/linux-4.4.0/arch/i386/boot/bzImage -net nic,model=rtl8139 -net tap,ifname=tap0,script=no -initrd rootfs.ext2 -S -s

在另一个终端中打开gdb,输入以下命令:
这里写图片描述
到此就可以开始调试了。qemu 调试环境到此就搭建完成。
下面再看一下如何使用kgdb的环境。

kgdb 环境

用下面命令启动系统:

$ qemu-system-x86_64 -kernel kernels/ubuntu/linux-4.4.0/arch/i386/boot/bzImage -net nic,model=rtl8139 -net tap,ifname=tap0,script=no -initrd rootfs.ext2 -serial "stdio" -serial "pty" --append '$console kgdbwait kgdboc=ttyS1'

qemu 系统停止在如图位置:

此时注意终端上的pty设备,这将在gdb中用到:

现在另外开一个终端输入以下命令:
这里写图片描述
qemu 中的系统将正常启动。要触发调试,可以输入命令:

$ echo g > /proc/sysrq-trigger

如图所示:

自此可以开始调试了。
Happy debugging !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值