reference http://wiki.xenproject.org/wiki/Xen_Serial_Console
最近在自己写一个xen的调度器,写了一个简单的调度器之后就迫不及待地编译,然后安装,重启。但是dom0一直没有启动,肯定是自己写的调度器有问题。
接下来就是调试了。可是初始化调度器,启动dom0都是系统启动时候进行的,对这个阶段执行的代码进行调试时很困难的,现在我能够使用的只有printk。于是我在代码感兴趣的地方都加了printk,以追踪代码到底是怎么执行的,获取一些关键的变量值等等。但是问题又来了,在系统启动的时候那些打印的信息往往是一闪而过,最后停顿在出问题的地方,所以那些自己感兴趣的信息往往闪过去了,往往是看不到的。
一开始我想了一个很笨的方法,在printk下面加一句while(1){},一旦我要的信息打印出来了,系统就停顿了,后来的信息就打印不出来了。但是这样有一个很明显的缺点,就是每次都要经过“加while->编译->安装->重启->看输出信息->把前面的while删掉->在后面想要的地方加while”这一系列的循环,工作量很大,不过用这种方法帮助我纠正了不少错误。
后来得知可以把xen的启动信息用串口输出到另一台机器。具体见这篇文章http://wiki.xen.org/wiki/Xen_Serial_Console。
上述方法需要两台机器才能完成,我不想用两台电脑,太麻烦了。况且我的xen是安装在vmware的虚拟机里面的,我想把虚拟机里面的系统的启动信息通过虚拟串口发送到我宿主机的串口接收工具中。
我的环境:
vmware 客户机:fedora 19 (用来做xen的dom0)
宿主机:win7
过程:
1.用vmware添加一个虚拟的serial port并设置。 虚拟机设置->hardware->add->serial port,有三个选项,我用的是named pipe。注意红色划线处选上。
2.下载一个putty,设置putty并open。
3.测试串口通信。启动虚拟机里的fedora19,在终端中输入echo hello > /dev/ttyS1。 这里我用的是ttyS1设备,还有一个ttyS0设备。向ttyS0写消息的时候putty没有收到,由此推测,虚拟机的虚拟串口com_1对应了fedora里的ttyS1.
4. 测试串口通信成功,接下来可以配置fedora的grub了。这里我没有完全按照的xen wiki 上的配置(ttyS0)做,当然我试了,没有成功。首先在这里需要知道的是,这里用的是虚拟机虚拟出来的串口com_1,在fedora里面就可能不是对应ttyS0了,上面也测试了,实际上是对应了ttyS1。
获取ttyS相关信息,在终端输入dmesg | grep ttyS*,0x2f8是io端口,3是对应的中断,在这里我们需要注意的是ttyS1的信息:
接下来配置grub(vi /etc/default/grub),com2=之后的信息根据自己的机器写,写完后保存:
5. 终端中输入“grub2-mkconfig -o /boot/grub2/grub.cfg”,重新生成grub配置文件。
6. 打开putty,设置好serial line,先不要open打开连接,等一会启动xen时再open。
重新启动fedora,将光标移动到xen启动选项,不要按enter,我们先不启动。
这时候点击putty的open按钮,开始监听串口信息。
在虚拟机里按enter,启动xen hypervisor。这时候xen的启动信息,putty都能捕获到。
putty显示的
ps:需要linux启动信息的朋友也可以通过这种方法获取启动信息,只是grub需要对应修改,请参考http://ubuntuforums.org/showthread.php?t=2197743。
第一篇文章到此结束,欢迎评论~