很重要!!请教Xen共享内存、超级调用和授权表的问题!!

udc577 2011-12-17 07:58:00
别的话不多说,直接将我的疑问说出来向各位大侠请教一下。

在项目中需要用到Xen的共享内存进行Domain之间的通信。查了一下资料,要用到授权表,所以就想先把授权表的基础操作搞明白。不过手上的一本《Xen虚拟化技术》(石磊等编著,华中科技大学出版社)对授权表操作涉及到的函数介绍得不详细。例如:

long grant_table_op(unsigned int cmd, XEN_GUEST_HANDLE(void) uop, unsigned int count);

这个超级调用的第二个参数具体是什么类型?

然后,我想写个小程序来执行查询授权表的操作。我初步猜测对于查询授权表来说,上面那个函数的第二个参数可能是gnttab_query_size_t结构体指针,于是那个测试小程序就写成这样:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <xen/grant_table.h>
#include <xen/arch-x86/xen.h>
#include <xenctrl.h>
#include <xen/sys/privcmd.h>

int main(int argc, char **argv)
{
gnttab_query_size_t *pGntQuery = (gnttab_query_size_t *)malloc(sizeof(gnttab_query_size_t));
int fd, ret;
privcmd_hypercall_t hcall = {__HYPERVISOR_grant_table_op, {GNTTABOP_query_size, pGntQuery, 1, 0, 0}};

printf("Before operation, domid_t: %d\n", pGntQuery->dom);

fd = open("/proc/xen/privcmd", O_RDWR);
if (fd < 0)
{
perror("Open privcmd failed");
exit(1);
}

ret = ioctl(fd, IOCTL_PRIVCMD_HYPERCALL, &hcall);
if (ret == -1)
{
perror("ioctl failed");
exit(1);
}

printf("After operation, domid_t: %d\n", pGntQuery->dom);

free(pGntQuery);
pGntQuery = NULL;

return 0;
}

上面这个程序主要是想在一下 Dom U 里查询它的授权表信息,将它的domid打印出来。由于在用户空间里不能使用超级调用,所以就借助privcmd内核驱动程序和ioctl系统调用。

在Xen方面我是一个菜鸟,而且目前貌似这方面的资料不多,例程就更少,所以很多东西都是靠猜,比如上面那个小程序。另外,这个问题与公司云计算项目有点关系,姑且把它发在IBM云计算论坛里,有不妥之处请各位见谅!

当然,最希望的是各位大侠能不吝赐教,万分感谢!!!
...全文
1970 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ming07061423 2013-11-24
  • 打赏
  • 举报
回复
可否请教一下Xen共享内存的建立流程,我最近在做一个硕士毕业设计,需要插入一个钩子函数监测Xen共享内存访问请求。一头雾水啊!盼赐教!!
yxf4970 2012-11-25
  • 打赏
  • 举报
回复
谢谢关注!问题未真正解决,后来借用了Xen源码tools目录里的代码来做共享内存的接口了.
udc577 2012-11-21
  • 打赏
  • 举报
回复
引用 2 楼 SoloRabbit 的回复:
XEN_GUEST_HANDLE是xen的hypercall使用的一个通用结构,一般来说类型根据cmd参数不同而不同,你这么用应该没错。。过了这么久也不知道你解决了问题没有。。
谢谢关注!问题未真正解决,后来借用了Xen源码tools目录里的代码来做共享内存的接口了。因时间原因,也没有去深究了……
SoloRabbit 2012-07-10
  • 打赏
  • 举报
回复
XEN_GUEST_HANDLE是xen的hypercall使用的一个通用结构,一般来说类型根据cmd参数不同而不同,你这么用应该没错。。过了这么久也不知道你解决了问题没有。。
udc577 2011-12-18
  • 打赏
  • 举报
回复
补充一下,Xen是4.0的。各位路过的大侠帮帮忙啊!!

1,151

社区成员

发帖
与我相关
我的任务
社区描述
该论坛主要探讨基于IBM云计算的开发技术,并为网友们提供自由交流的平台。
社区管理员
  • IBM云计算社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧