编写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设置的参数。