博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

How to Develop Xen

Posted on 2010-01-28 17:06  Superymk  阅读(1793)  评论(0编辑  收藏  举报

编写Xen的第一个程序 (转载注明出处:所有内容均为Superymk原创,版权归作者所有)

需要修改什么

  • 这里均以Xen-3.4.2为例,需要注意以下几点
    • 一般来说,导出函数,也就是头文件放在xen/include/对应地方,关于xen自己的一般是asm下
    • .c文件放在相应arch下
    • 别忘了修改.c文件同目录的makefile

需要include什么

  • 新编写的文件需要include <xen/lib.h>,像这样:
#include <xen/lib.h>

怎么编译安装

  • 编译命令
make xen
或者在xen目录下
make

强烈建议编译前先clean一下,以消除可能的future timestamp造成的不能增量编译的问题

进入xen目录
make clean
  • 安装命令
make install-xen
或者直接找到xen/xen.gz 然后copy到/boot下

或者用这个脚本(把它放在~bin下)

rm /boot/xen-3.4.2.gz
cp -f /root/Joan/xen-3.4.2/xen/xen.gz /boot/xen-3.4.2.gz
reboot

怎样调试Xen

串口调试

  • 使用串口调试的话要这样配置menu.lst
    title Xen Dom0, kernel 2.6.18.8-xen
root (hd0,0)
kernel /xen-3.4.gz dom0_mem=512M crashkernel=128M@32M loglvl=all guest_loglvl=all debug_stack_lines=80 com1=115200,8n1 iommu=1
module /vmlinuz-2.6.18.8-xen ro root=/dev/VolGroup00/LogVol00 xencons=ttyS0,115200
module /initrd.img-2.6.18.8-xen

也可参考[1]http://en.opensuse.org/How_to_Capture_Xen_Hypervisor_and_Kernel_Messages_using_a_Serial_Cable

打印调试

  • 打印调试使用到了dprintk宏,使用时需要引用<xen/Config.h>
  • 查看输出可在dom0下console中输入 xm dmesg查看

How to enlarge xen ring buffer

1.Xen Ring Buffer的作用

Xen Ring Buffer用来打印Xen Hypervisor的一系列调试信息

2.怎样扩大Ring Buffer

如果遇到不能完整展示Ring Buffer内容的情况,可以通过修改xen代码来扩大ring buffer
Xen的ring buffer大小是hard code进去的,比较悲剧
参考自http://article.gmane.org/gmane.comp.emulators.xen.user/45026
修改/xen-3.4.2/tools/python/xen/lowlevel/xc/xc.c第1014行:

static PyObject *pyxc_readconsolering(XcObject *self,
PyObject *args,
PyObject *kwds)
{
unsigned int clear = 0, index = 0, incremental = 0;
char _str[32768], *str = _str; <---here (设置太大了容易把堆栈炸了)
unsigned int count = 32768; <---here

#define _CONRING_SIZE 16384 <---here
#define CONRING_IDX_MASK(i) ((i)&(conring_size-1))

对于后者xen已经添加参数:conring_size,推荐使用参数修改
PS:对于custom_param这种类似的都说明后面的是xen的可在command line设置的参数。