Xen中的工具libxc


libxc    是一个 C语言 库,它提供了一些简单易用的 API ,使用户程序可以方便的和 Hypervisor 进行通信。 它的工作原理很简单,主要封装了 dom0 中的 /proc/xen/privcmd /dev/xen/evtchn 以及 /dev/xen/gntdev 提供的 IOCTL 接口。 也就是说,我们本来可以直接通过上面这些内核级设备驱动进行相关的操作控制,但有了libxc之后,只需要调用其相应接口函数,由它负责数据结构的解析/封装,然后再与底层hypervisor通信。这就是为什么说xm发出命令之后,到达xend,而xend需要调用libxc再处理后才与底层hypervisor通信:libxc是一个接口库

看到有这样的解析,借鉴一下:

        /proc/xen/privcmd

1.         xc_interface_open()

打开/proc/xen/privcmd,获得文件描述符。

2.         xc_sysctl()

填充xen_sysctl结构体,发送ioctl请求。

3.         xc_interface_close()

关闭1中打开的文件描述

/dev/xen/evtchn

1.         xc_evtchn_open

2.         xc_evtchn_notify等函数

evtchn的操作比较简单,不需要填充结构体,一般指明远程Dom idport即可

3.         xc_evtchn_close

         /dev/xen/gntdev

1.         xc_gnttab_open

2.         xc_gnttab_map_grant_ref

3.         xc_gnttab_close


用来控制Xen内核的库,位于xen-../tools/libxc。包括两个部分:

一个是 libxenctrl,封装了各种Hypercall提供的功能,其函数列表在xenctrl.h中列出;
另一个是 libxenguest,提供在内核中创建domain的方法,其函数列表在xenguest.h中列出。

若在内核中通过修改hypercall的方式为Xen添加功能,需要在libxenctrl中进行封装。
libxc中的函数的第一个参数均为int xc_handler,这其实是一个句柄,这个句柄对应着dom0中与guest kernel进行交互的proc文件,即/proc/xen/privcmd。
libxc中进行Hypercall的调用可以利用do_domctl这个函数,这个函数的定义在xc_private.h中。do_domctl的第二个参数struct xen_domctl封装了一个hypercall的number and arguments。

如要在其中加入自己的新接口,需要在libxc目录下执行make install命令,之后,可以自己编写一个小型C程序,并引用<xenctrl.h>,在编译时加入参数-lxenctrl就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值