使用QEMU调试FreeBSD/Linux内核
背景:调试FreeBSD内核时:
我们的内核代码存放的路径为/kerndebug/sys
我们要调试的内核的配置文件为/kerndebug/sys/i386/conf/KERNDEBUG
已经在QEMU中装好的FreeBSD的硬盘文件为/kerndebug/freebsd.img
具体步骤:
1.编译内核注意在/kerndebug/sys/i386/conf/KERNDEBUG中需要选项
makeoptions DEBUG=-g
$cd /kerndebug/sys/i386/conf
$config KERNDEBUG
$cd ../compile/KERNDEBUG
$make cleandepend
$make depend NO_MODULES=1
$make NO_MODULES=1
OK,现在我们得到两个文件kernel与kernel.debug
2.把kernel复制到/kerndebug/freebsd.img
#mdconfig -a -t vnode -f /kerndebug/freebsd.img
md0
#mount /dev/md0s1a /mnt
#保存从前的内核,也许并不需要保存
#mv /mnt/boot/kernel /mnt/boot/kernel.old
#mkdir /mnt/boot/kernel
#cp /kerndebug/sys/i386/compile/kernel
> /mnt/boot/kernel/
#umount /mnt
#mdconfig -d -u 0
3.开始调试内核
$qemu -hda /kerndebug/freebsd.img -s&
$cd /kerndebug/sys/i386/compile/KERNDEBUG
$gdb kernel.debug
(gdb)target remote localhost:1234
同样的道理,我们也可以调试Linux kernel。
背景:
新下载解压后的内核代码在/linux-2.6.15,基本系统使已经用Gentoo的base,
qemu的硬盘文件为/linux.img,gentoo的安装盘为gentoo.iso
1.编译内核
$cd /linux-2.6.15/
$make menuconfig
注意打开内核调试选项,把符号表编译进内核
$make
如果有modules,安装modules,注意不要覆盖了现在使用的modules。
$make modules_install
现在在/lib/modules/2.6.15/已经那装了关于modules的文件,并且得到了
两个文件,/linux-2.6.15/vmlinux /linux-2.6.15/arch/i386/boot/bzImge
2.把modules文件安装到硬盘文件linux.img
$qemu -cdrom gentoo.iso -hda linux.img -boot d&
在host机上起动sshd,在qemu中,挂载硬盘文件
#mount -t ext3 /dev/hda2 /mnt/gentoo
#mkdir /mnt/gentoo/lib/modules/2.6.15
#scp prime@xxx.xxx.xxx.xxx:/lib/modules/2.6.15/*
>/mnt/gentoo/lib/modules/2.6.15/
#umount /mnt/gentoo
#shutdown -h now
3.现在开始调试
$qemu -kernel
>/linux-2.6.15/arch/i386/boot/bzImage -append root=/dev/hda2
>-hda linux.img -s &
$cd /linux-2.6.15/
$gdb vmlinux
(gdb)target remote localhost:1234
OK,现在可以用gdb调试内核了,enjoy it!
=====================================
本来在blog上的,没时间维护就关掉了,帖过来吧. 楼主工作了?
为什么关掉BLOG啊,仅仅是因为没时间维护? 哦 我也安装qemu看看。
port安装要装好多相关的东西啊
网速又慢.... 原帖由 assiss 于 2006-6-19 18:19 发表
楼主工作了?
为什么关掉BLOG啊,仅仅是因为没时间维护?
马上就离校去工作了:)
BLOG确实是没时间维护了:) 原帖由 mingyanguo 于 2006-6-19 18:54 发表
马上就离校去工作了:)
BLOG确实是没时间维护了:)
哪儿有那么夸张?偶们都是边工作边维护。。。:mrgreen: 呵,我现在才感觉到,有时候力不从心啊。很多时间都不属于自己...... 原帖由 雨丝风片 于 2006-6-19 20:24 发表
哪儿有那么夸张?偶们都是边工作边维护。。。:mrgreen:
主要是不想在这些形式上的东西花时间,呵呵.而且,感觉现在也没什么东西可以写.有点时间出去玩玩,或者灌水,:em06::em06: 原帖由 mingyanguo 于 2006-6-19 21:21 发表
有点时间出去玩玩
这个是最重要的,工作了,最缺的和最想念的就是这个。:mrgreen: 原帖由 雨丝风片 于 2006-6-19 21:24 发表
这个是最重要的,工作了,最缺的和最想念的就是这个。:mrgreen:
关键要有好玩伴:em15::em15: 为什么我按照楼主的做法,到这一步确出了错:
# mount /dev/md0s1a /mnt
mount: /dev/md0s1a: No such file or directory
操作系统是FreeBSD6.1