mingyanguo 发表于 2006-06-19 18:17

使用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上的,没时间维护就关掉了,帖过来吧.

assiss 发表于 2006-06-19 18:19

楼主工作了?
为什么关掉BLOG啊,仅仅是因为没时间维护?

ktrudger 发表于 2006-06-19 18:30

哦 我也安装qemu看看。
port安装要装好多相关的东西啊
网速又慢....

mingyanguo 发表于 2006-06-19 18:54

原帖由 assiss 于 2006-6-19 18:19 发表
楼主工作了?
为什么关掉BLOG啊,仅仅是因为没时间维护?
马上就离校去工作了:)
BLOG确实是没时间维护了:)

雨丝风片 发表于 2006-06-19 20:24

原帖由 mingyanguo 于 2006-6-19 18:54 发表

马上就离校去工作了:)
BLOG确实是没时间维护了:)

哪儿有那么夸张?偶们都是边工作边维护。。。:mrgreen:

gvim 发表于 2006-06-19 20:50

呵,我现在才感觉到,有时候力不从心啊。很多时间都不属于自己......

mingyanguo 发表于 2006-06-19 21:21

原帖由 雨丝风片 于 2006-6-19 20:24 发表


哪儿有那么夸张?偶们都是边工作边维护。。。:mrgreen:
主要是不想在这些形式上的东西花时间,呵呵.而且,感觉现在也没什么东西可以写.有点时间出去玩玩,或者灌水,:em06::em06:

雨丝风片 发表于 2006-06-19 21:24

原帖由 mingyanguo 于 2006-6-19 21:21 发表

有点时间出去玩玩

这个是最重要的,工作了,最缺的和最想念的就是这个。:mrgreen:

mingyanguo 发表于 2006-06-19 22:21

原帖由 雨丝风片 于 2006-6-19 21:24 发表


这个是最重要的,工作了,最缺的和最想念的就是这个。:mrgreen:
关键要有好玩伴:em15::em15:

ktrudger 发表于 2006-06-20 09:04

为什么我按照楼主的做法,到这一步确出了错:
# mount /dev/md0s1a /mnt
mount: /dev/md0s1a: No such file or directory


操作系统是FreeBSD6.1
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 使用QEMU调试FreeBSD/Linux内核