XEN新增和呼叫Hypercall zz

2021-06-08 07:19:04 字數 2093 閱讀 3859

xen新增和呼叫hypercall (zz)

在linux系統中新增新的系統呼叫,一般需要三個步驟:

1. 註冊新的系統呼叫號

2. 更新系統呼叫表

3. 新增新函式

在xen中新增乙個 hypercall,類似於在linux中新增乙個系統調. 基本上也是上面幾個步驟。現在舉個具體的例子:

比如我們要在xen中新增乙個列印訊息的hypercall,引數有乙個,型別為char*, 代表我們要列印的訊息. 函式原型為:

do_print_string(char* message)

1. 首先註冊乙個hypercall呼叫號。

xen/include/public/xen.h

#define __hypervisor_kexec_op              37//原有超級呼叫

#define __hypervisor_print_string          38//新增超級呼叫號為38

2.更新系統呼叫表

/xen/arch/x86/x86_32/entry.s

entry(hypercall_table)

.long do_kexec_op

.long do_print_string

entry(hypercall_args_table)

.byte 2 /* do_kexec_op           */

.byte 1 /* do_print_string       */要寫在對應的位置

3. 定義函式標頭檔案

/xen/include/asm-x86/hypercall.h

extern int do_kexec(unsigned long op, unsigned arg1, xen_guest_handle(void) uarg);

extern int do_print_string(char * message);//處理函式宣告

4.定義函式(函式定義在合適的檔案中,這個例子採用mm.c)

/xen/arch/x86/mm.c

int do_print_string(char * message)

if(message)

printk("the message is :n%sn", message);

else printk("no message!n");

return 1;

重新編譯安裝

make dist

make install

重新製作img

mkinitrd -v -f initrd-.8-xen.img 2.6.18.8-xen

重啟呼叫新hypercall

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv)

int fd, ret;

char * message;

if (argc != 2)

fd = open("/proc/xen/privcmd", o_rdwr);

if (fd < 0) else

printf("fd = %dn", fd);

ret = ioctl(fd, ioctl_privcmd_hypercall, &hcall);

printf("ret = %dn", ret);

也可以採用載入模組的形式,在核心空間之間呼叫hypercall來測試。編譯該檔案,並測試如下:

gcc -o a hypercall_test.c

./a hello!

檢視日誌檔案,檢測是否新的hypercall安裝成功:(linux下的log 一般在/var/log/mesages,而xen下的日誌採用xm dm命令檢視)

Xen建立 Domain過程(函式呼叫關係)

從xm命令列開始到xen核心的函式呼叫過程 xm create vm config file xen3.4 或4.1 原始碼包 1 tools python xend xm main.py 2 tools python xend xm create.py 3 tools python xend xe...

Xen基本機制和策略

一.啟動頁和共享頁 啟動頁 由xen對映到guestos記憶體空間的乙個頁面,包括核心啟動所需的所有資訊。頁框位址,首個載入模組的位址,記憶體頁面數等資訊。vcpu狀態 是否有未處理的事件 guest os狀態,xen的事件通道。二.hypercall 1.利用int0x82陷阱。hypercall...

簡述KVM架構和Xen架構

暑假最後一篇更新,因為,明天我就回學校了。以下均為個人理解,如果有不對的地方還望各位dalao不吝賜教。虛擬化 虛擬化是通過hypervisor程式實現的,hypervisor的作用是將硬體虛擬化提供給多個作業系統使用,是虛擬化技術的核心。虛擬化分為兩種 1型虛擬化和2型虛擬化。kvm架構 先來看一...