debugging the linux kernel under ubuntu 11.04

以前有一段时间,因为某些原因,一直在使用windows xp,在上面用vmware装了一个CentOS5.5,后来升级到5.6,就一直在上面做一些内核的开发,在上面编译内核,在上面debug 内核。这样做有一个麻烦的事情,就是有时候时间比较紧的话,就会不方便,比如说早上起来时间不多,7点起来,8点要去上班,一个小时的时候,起来看看别人回的邮件,要改一个patch,然后resend,因为去公司就不能上网了,就算在公共上网区的话,发patch也不好,用web gmail又会破坏补丁的格式,也不合适,所以就只能在早上这个时间及时地改完patch然后发上去,这样就得先开系统,然后看邮件,然后开虚拟机,然后改patch,再提交上去,时间经常是不够用,总是觉得很麻烦。从4月ubuntu 11.04出来后,换上了,然后就是前面的麻烦都省去了,相当不错,改代码也快了,编译起来也快不少。很给力。

看代码,改代码,用vim就相当好了,加上cscope,只要make O=../latest V=1 cscope生成.out的cscope tag文件,看代码的时候加进去就OK,挺不错的。

debug的时候,可以用qemu,这样很方便,在host上修改,编译,然后在qemu上test。非常方便。

可以编译一个qemu,也可以直接在ubuntu直接安装。

apt-get install qemu qemu-pxe

然后可以去qemu官网上下一个disk img,也可以自己做一个disk img,然后自己安装一个,但是这样比较麻烦,对于debug kernel来说我觉得也不需要多少,用这个就可以了。

下一个linux-0.2.img.bz2,解压出来。linux-0.2.img

为了方便,写一个shell:

$cat qemu.sh 

#!/bin/bash

qemu-system-x86_64 -s -S -hda ./linux-0.2.img -append "root=/dev/sda1 console=ttyS0 console=tty0" -serial file:./kernel.log -kernel $1 -initrd $2  

可以不加-S选项,直接运行,加上-S后,可以在另一个终端下用gdb连接。

  
  
. / qemu.sh vmlinuz - 2.6 . 39 + initrd - 2.6 . 39 +

gdb
/ path / to / vmlinuz

(gdb)$target remote localhost:
1234

(gdb)$

嗯。这样就可以了。

前面vmlinuz-x.y.z,initrd-x.y.z,就是编译出来的kernel和initramfs。

  
  
make O = .. / latest V = 1 - j4

make O
= .. / latest V = 1 modules_install

cp ..
/ latest / arch / x86 / boot / bzImage .. / kernel_test / vmlinuz - 2.6 . 39 +

mkinitramfs
- k - o initrd.img - 2.6 . 39 + - v 2.6 . 39 +

嗯,就是这样。

ref:

http://wiki.qemu.org/Manual

http://people.debian.org/~aurel32/qemu/armel/

http://www.cs.swarthmore.edu/~newhall/unixhelp/qemu_guide.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值