发信人: judicious (无法无天的), 信区: KernelTech
标 题: 在Debian下从源代码构造可以进行调试的UML
发信站: BBS 水木清华站 (Sat Feb 26 15:01:05 2005), 转信
由于从.deb构造的user-mode-linux不能作为可以调试的内核(没有导出内核符号),所以我需要从源代码打造可以调试的user-mode -linux.我使用的内核是2.4.24,使用的UML的patch是2.4.24-3.使用2.4.18内核时,编译有问题的。(2005-01- 16补充了使用gdb调试内核的方法)
1从源代码编译user-mode-linux,基本上根据UML的HOWTO就可以了(http://user-mode-linux.sourceforge.net/UserModeLinux-HOWTO.html)
shell下:
a下载内核源代码到path,我用的是2.4.24(我用2.4.18编译了N便过不去)
apt-get install kernel-source-2.4.24
b解压kernel source:
debian:path#tar -xvjf kernel-source-2.4.24.tar.bz2
b下载UML的patch到kernel-source,我用的是2.4.24-3(我用2.4.24-3编译了一次没过去)
http://prdownloads.sourceforge.net/user-mode-linux/uml-patch-2.4.24-3.bz2
d debian:path/kernel-source-2.4.24#bzcat uml-patch-2.4.24-3.bz2
e make menconfig ARCH=um
不用作任何修改,或者可以根据你自己的需要定制内核
f make linux ARCH=um(不用make dep)
内核编译完成,在源码树的顶端生成linux,这个就是UML,是一个应用程序
2 下载根文件系统(root file system)到/mnt
http://puzzle.dl.sourceforge.net/sourceforge/user-mode-linux/Debian-3.0r0.ext2.bz2
3 shell下:
#:cd /mnt
4 #:bunzip2 Debian-3.0r0.ext2.bz2
5 #:dd if=/dev/zero of=Debian-3.0r0.ext2 bs=1 count=0 seek=536870912
6 #:/sbin/e2fsck -f Debian-3.0r0.ext2
7 #:/sbin/resize2fs -p Debian-3.0r0.ext2
8 linux ubd0=Debian-3.0r0.ext2 devfs=mount
系统应该可以起来了
9 关于调试
提供三种方法:
调试方法一(这是fiasco@smth大虾提供的方法,我试过但是没有成功):
a 启动gdb linux,得到这个进程的PID
b linux ubd0=Debian-3.0r0.ext2 devfs=mount debug gdb-pid=PID
然后再gdb那个进程就可以像调试普通程序那样调试内核了
调试方法二:
a gdb linux
b gdb>set args ubd0=Debian-3.0r0.ext2 devfs=mount //设置程序运行的参数
现在就可以向调试一个普通的应用程序那样调试内核了(呵呵,这个linux本身就是个普通程序:-))
调试方法三
a linux ubd0=Debian-3.0r0.ext2 devfs=mount debug gdb-pid=PID
b 使用ps -a获得上一步linux运行的pid
shell下:
gdb
att pid
ok,现在也可以像调试普通程序一样调试了,但是这个方法没有方法二好,因为你执行att pid的时候,你无法控制程序运行的位置
good luck
by judicious
附两个有用链接:
http://deb.riseup.net/miscellaneous/uml/
http://now.ohah.net/en/User_Mode_Linux
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.118.70.*]
标 题: 在Debian下从源代码构造可以进行调试的UML
发信站: BBS 水木清华站 (Sat Feb 26 15:01:05 2005), 转信
由于从.deb构造的user-mode-linux不能作为可以调试的内核(没有导出内核符号),所以我需要从源代码打造可以调试的user-mode -linux.我使用的内核是2.4.24,使用的UML的patch是2.4.24-3.使用2.4.18内核时,编译有问题的。(2005-01- 16补充了使用gdb调试内核的方法)
1从源代码编译user-mode-linux,基本上根据UML的HOWTO就可以了(http://user-mode-linux.sourceforge.net/UserModeLinux-HOWTO.html)
shell下:
a下载内核源代码到path,我用的是2.4.24(我用2.4.18编译了N便过不去)
apt-get install kernel-source-2.4.24
b解压kernel source:
debian:path#tar -xvjf kernel-source-2.4.24.tar.bz2
b下载UML的patch到kernel-source,我用的是2.4.24-3(我用2.4.24-3编译了一次没过去)
http://prdownloads.sourceforge.net/user-mode-linux/uml-patch-2.4.24-3.bz2
d debian:path/kernel-source-2.4.24#bzcat uml-patch-2.4.24-3.bz2
e make menconfig ARCH=um
不用作任何修改,或者可以根据你自己的需要定制内核
f make linux ARCH=um(不用make dep)
内核编译完成,在源码树的顶端生成linux,这个就是UML,是一个应用程序
2 下载根文件系统(root file system)到/mnt
http://puzzle.dl.sourceforge.net/sourceforge/user-mode-linux/Debian-3.0r0.ext2.bz2
3 shell下:
#:cd /mnt
4 #:bunzip2 Debian-3.0r0.ext2.bz2
5 #:dd if=/dev/zero of=Debian-3.0r0.ext2 bs=1 count=0 seek=536870912
6 #:/sbin/e2fsck -f Debian-3.0r0.ext2
7 #:/sbin/resize2fs -p Debian-3.0r0.ext2
8 linux ubd0=Debian-3.0r0.ext2 devfs=mount
系统应该可以起来了
9 关于调试
提供三种方法:
调试方法一(这是fiasco@smth大虾提供的方法,我试过但是没有成功):
a 启动gdb linux,得到这个进程的PID
b linux ubd0=Debian-3.0r0.ext2 devfs=mount debug gdb-pid=PID
然后再gdb那个进程就可以像调试普通程序那样调试内核了
调试方法二:
a gdb linux
b gdb>set args ubd0=Debian-3.0r0.ext2 devfs=mount //设置程序运行的参数
现在就可以向调试一个普通的应用程序那样调试内核了(呵呵,这个linux本身就是个普通程序:-))
调试方法三
a linux ubd0=Debian-3.0r0.ext2 devfs=mount debug gdb-pid=PID
b 使用ps -a获得上一步linux运行的pid
shell下:
gdb
att pid
ok,现在也可以像调试普通程序一样调试了,但是这个方法没有方法二好,因为你执行att pid的时候,你无法控制程序运行的位置
good luck
by judicious
附两个有用链接:
http://deb.riseup.net/miscellaneous/uml/
http://now.ohah.net/en/User_Mode_Linux
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.118.70.*]