快速业务通道

通过虚拟机调试linux 内核

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-30

思路是,通过网络(pc的pxe特性)下载grub到虚拟机,然后下载vmlinux(实质是tftp)到虚拟机,可以调试内核. 其中的串口虚拟,主要是打印可以显示到主机的minicom中.

1. 虚拟串口
Go to the settings of your virtual machine, then at the "Serial Ports" and enable "Port 1". Use port number COM1, port mode ''Host Pipe'', check ''Create Pipe'' and enter a path, e.g. /home/qianjiang/temp/test/myserial

2. 验证串口
主机端运行minicom,端口设置为
unix#/home/qianjiang/temp/test/myserial

虚拟机端可以,
stty ispeed 115200 ospeed 115200 -F /dev/ttyS0
echo ok > /dev/ttyS0

这时主机端的minicom将显示"ok".
如果cat /dev/ttyS0, 那么minicom端的输入将显示到虚拟机中

3. 设置内核的输出信息端口
vi /boot/grub/grub.cfg
增加:console=ttyS0,115200 loglevel=7 earlyprintk=ttyS0,115200
内核参数参考: Documentation/kernel-parameters.txt
这样重启虚拟机,可以在minicom中看到内核打印信息


4. grub
参考GNU GRUB Manual: http://www.gnu.org/software/grub/manual/grub.html
第一件事是修改grub配置,以便进入grub menu和命令行:
方法是修改/etc/default/grub如下,然后运行update-grub.
GRUB_CMDLINE_LINUX_DEFAULT="splash console=ttyS0,115200 loglevel=7 earlyprintk=ttyS0,115200"
GRUB_HIDDEN_TIMEOUT_QUIET=false

5. 下面要解决的事情是,网络装载.
观察到virtualbox支持PXE, 即网络启动.但是调试NAT PXE Boot花了很长时间也没搞定.
采用本地主机(Ubuntu)架设tftp服务器,然后通过命令修改PXE访问的tftp服务器.
VBoxManage modifyvm "kernel-debug" --nattftpserver1 192.168.1.106
VBoxManage modifyvm "kernel-debug" --nattftpfile1 vmname.pxe
上面的命令实际上是通知vb内置的dhcp服务器,设置pxe需要访问的tftp服务器和文件.
这样在tftpboot下面放置vmname.pxe就能启动了.

6. 启动映像(grub pxe)
参考http://www.gnu.org/software/grub/manual/grub.html#Network
. 生成grub pxe需要的启动映像到tftpboot目录
grub-mknetdir --net-directory=/home/qianjiang/tftpboot/
. 初始启动映像的设置
VBoxManage modifyvm "kernel-debug" --nattftpfile1 /boot/grub/i386-pc/core.0
按理这样设完后,就可以启动了,但是一直提示找不到文件,直接进入grub rescue>
怀疑是tftp服务器的问题,参考了一个网页.
运行sudo apt-get install tftpd-hpa,解决了这个问题
note: tftp可以查看/var/log/syslog; grub可以用insmod和echo等命令

把vmlinuz,initrd.img拷贝到tftpboot/boot下面
然后在grub命令行里可以执行:
#linux /boot/vmlinuz
#initrd /boot/initrd.img
注意,要用正确的映像,可以从安装的包里面获得.

好了,到现在,就可以通过虚拟机来调试内核了...........
如果想用串口,就贯通起来即可


附. socat(Socket Cat)
socat -d -d /home/qianjiang/temp/test/myserial pty
命令行的意思是,把myserial的数据导给pty
---------------------------------------
2011/07/05 14:48:38 socat[22421] N opening connection to AF=1 "/home/qianjiang/temp/test/myserial"
2011/07/05 14:48:38 socat[22421] N successfully connected from local address AF=1 "d\xA7b\xAE\xDE\xAE\x18\xD9~\xA7a\xAE\xDE\xAEK\xC5\x06\bb\xAE\xDE\xAE"
2011/07/05 14:48:38 socat[22421] N successfully connected via
2011/07/05 14:48:38 socat[22421] N PTY is /dev/pts/4
2011/07/05 14:48:38 socat[22421] N starting data transfer loop with FDs [3,3] and [4,4]
---------------------------------------
,数据导向pty后,可以看出是/dev/pts/4,这时也可以通过minicom打开/dev/pts/4和虚拟机的串口进行交互.
这个在后面提到的使用kgdb有用.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号