超级调用实现总结

35 篇文章 2 订阅

超级调用实现总结

这两天的目标是实现一个超级调用,其中遇到了很多问题以及还没有弄清楚的现象,这里将所有过程记录一下,试图发现背后的根本原因。

实践过程

环境:dom0(Ubuntu14.04) + domU(Debian)

过程记录

  • 设置系统调用号(使用的是reversed for client 的39)

    xen/include/public/xen.h
    
    #define __HYPERVISOR_print_string
    
  • 更新系统调用

    /xen/arch/x86/x86_64/entry.S
    .quard do_print_string
  • 定义函数头文件

    /xen/include/asm-x86/hypercall.h
    extern int do_print_string(char* message);
  • 定义函数

    /xen/arch/x86/mm.c

  • 使用

    添加该hypercall

    xen/arch/x86/hvm/hvm.c
    HYPRTCALL(do_print_string)

    编写测试程序Hypervisor_test.c

    本人是在/home/documents文件夹下。编写的。

实验现象

1.dom0 + print_string

超级调用实现原理

重启前:fd=3;ret=-1

重启后:fd=3;ret=1;并且输入sudo xl md之后可以看到函数中printk()的记录;表示超级调用成功。

make install和重启之间的区别在于:
make install只是将Xen重新安装,但是底层的寄存器和内存的内容还是没有修改,重启的时候会重新加载Xen。

2.dom0 + create_sim

全虚拟化下的超级调用

invalid operands (*und* and *abs* sections) for *

错误原因还没有找到,这个报错信息是说符号”*”使用有问题…….

在实现过程中与原教程之家的区别有这么几点:

  • Xen版本:4.0.1&&4.4.0
  • Dom-U和Dom-0版本的不同:Fedora+Ubuntu&&Ubuntu+Debian
  • 有一两个文件所在的路径不精准。涉及到位数的不同

3.domU + print_message

超级调用实现原理

domU没有编译:编译测试C代码的时候找不到

open:no such file or directory

确实是没有/proc/xen/privcmd;但是dom0中是有的。

可能的原因是:domU里边没有安装相应驱动?

compile and install the xen tools in the guest

……继续做。。。

4.domU + create_sim

全虚拟化下的超级调用

invalid operands (*und* and *abs* sections) for *

错误原因还没有找到,这个报错信息是说符号”*”使用有问题…….

待实现

Making a New Hypercall && Invoking It from userland via Privcmd

这篇也是在dom0里边发出的超级调用。不同的是,使用privcmd的方式不同,他没有直接open(“/proc/xen/privcmd”)而是把测试代码放在已有的文件中,利用该文件下的privcmd……

疑问

1.dom0的虚拟化类型

dom0属于PV还是HVM?。。。。目前的感觉是PV

技能GET

1.创建/启动/删除 dom

编写xxx.cfg

查看:sudo xl list
启动:sudo xl create xxx.cfg
删除:sudo x
查看日志信息:sudo xl dm
Xen:xl&&xm。分别是两种不同的xen中的命令。
xm:命令行工具,接收用户输入通过 xml rpc 传递到 Xend。

2.scp/tar/debian网络信息

#从服务器上下载文件
scp username@servername:/path/filename /var/www/local_dir(本地目录)
#上传本地文件到服务器
scp /path/filename username@servername:/path   

tar -cf archive.tar foo bar(create tar/compress files)
tar -xf archive.tar(extracst files)

ip address

3.gcc编译

64bit-platform

gcc test.c -o test_m32 -m32     #32bit,intel 80386
gcc test.c -o test_xm32 -mx32   #32bit,x86_64
gcc test.c -o                   #64bit,x64
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值