2015-11-08 48 views
0

我對虛擬化非常陌生,最近我一直在嘗試熟悉VMM的運行方式以及如何實現超級調用。在kvm中實現自定義超級調用

談到我計劃在我的Ubuntu桌面上安裝的KVM中實現新的超級調用,並且可以從客戶環境調用。通過這種超級調用,我打算只返回一個字符串說「Hello World」 。在這一點上,我對如何實現這一目標毫無頭緒。如果你能指導我如何去實現這樣的hypercall,那將是非常有幫助的。謝謝!

回答

2

您可以在用戶程序中使用vmcall指令在KVM中進行超級調用。你需要在kvm中爲這個VMCALL編寫一個處理程序。如果你在客戶端運行代碼;

#define VMCALL_ID 100 
do_vmcall() 
{ 
    asm volatile ("vmcall" : "eax"(VMCALL_ID)); 
} 

它會在KVM中產生陷阱。 kvm將調用handle_vmcall函數。在handle_vmcall函數中,您需要編寫與此相對應的處理函數。

int handle_vmcall(struct kvm_vcpu *vcpu) 
{ 
    unsigned eax = kvm_read_register(vcpu, VCPU_REGS_RAX); 

    switch (eax) { 
     case VMCALL_ID: 
      BLAH; break; 
     default: BLAH; BLAH; 
    } 
    return 0; 
}