实现Xen半虚拟化环境下前后端设备的注册(一)

前言

在Xen 半虚拟环境下增加新的设备,首先需要将新设备进行注册,前后端设备的注册可通过3步完成。

v 对配置文件进行解析,获取虚拟设备的信息

v 根据获取的虚拟设备信息将设备写入到XenStore上

v XenBus遍历XenStore目录,将前后端设备注册到XenBus总线

备注:前后端设备既可以在XenBus初始化时加载,也可以通过Hotplug的方式加载。虚拟机启动时会初始化XenBus总线,在初始化过程中将遍历XenStore读取所有前端设备信息,然后注册前端设备到XenBus总线,后端设备则通过Hotplug方式注册到XenBus总线。

具体实现过程如下:

(一)解析配置文件,获取自定义设备信息

配置文件中关于自定义设备的信息如下

mydevice=[‘example=zxm’]

在之前的博客中提到过配置文件的编写,可参考博客:http://blog.csdn.net/ysbj123/article/details/49497059

配置文件中虚拟机的配置信息是由一条条包含等号的字符串表示,等号左边代表配置项,等号右边代表选项信息。对配置文件的解决,就是将配置文件中的这些字符串进行提取,然后将提取到的信息保存到配置文件字典中,格式为键值对。

接下来就是代码追踪阶段了,关于Xen源码分析的资料网上很少,所以我通过一层层的追踪代码,最终找到了正确解析配置文件的方法。

首先从创建半虚拟机命令入手:xl create myexample -c

1Xl_cmdtable.c

查看cmdtable: main_create( )函数用来实现xl create 命令

2. Xl_cmdimpl.c

main_create( ):位于Xl_cmdimpl.c

v  定义一个libxl_domain_config 类型变量 d_config;

n  Libxl_domain_config_init:

n  Libxl_domain_create_info

rc = create_domain( );

create_domain( )

v  初始化配置文件变量:

n  Libxl_domain_config_init()

3. _libxl_types.C

Libxl_domain_config_initlibxl_domain_config *p):

v  Libxl_domain_config 在_libxl_types.h中定义

n  typedef struct libxl_domain_config{

Libxl_domain_create_info c_info;

Libxl_domain_build_info b_info;

Int num_disks;

Libxl_device_disk *disks;

......

//添加自定义设备mydevice;

int num_mydevices;

libxl_device_mydevice *mydevices;

......

}

v  分别初始化libxl_domain_create_info c_info、libxl_domain_build_info b_info;

n  Lib_domain_create_info_init(p->c_info);

n  Libxl_domain_build_info_init(p->b_info);

4.  回到Xl_cmdimpl.C

Parse_config_data():

v 添加XLU_ConfigList *mydevices;

v 添加解析代码

If(!Xlu_cfg_get_list(config,”disk”,&vbds,0,0)){

  ........

//解析代码

buf=xlu_cfg_get_listitem(mydevice,d_config->num_mydevice);

......

d_config->mydevice = (libxl_device_mydevice *)realloc(d_config->mydevices,sizeof(libxl_device_mydevice)*(d_config->num_mydevices+1));

libxl_device_mydevice_init(mydevice);

p=strtok(buf2,",");

......

}

回到create_domain():

Start:

       ret=libxl_domain_create_new(...);

5、libxl_create.c

do_domain_create(.....);

init_domain_create(......);

至此,配置文件的解析结束。接下来是将介绍如何将设备信息写入Xenstore。

你可能感兴趣的:(虚拟化)