0
我對虛擬化非常陌生,最近我一直在嘗試熟悉VMM的運行方式以及如何實現超級調用。在kvm中實現自定義超級調用
談到我計劃在我的Ubuntu桌面上安裝的KVM中實現新的超級調用,並且可以從客戶環境調用。通過這種超級調用,我打算只返回一個字符串說「Hello World」 。在這一點上,我對如何實現這一目標毫無頭緒。如果你能指導我如何去實現這樣的hypercall,那將是非常有幫助的。謝謝!
我對虛擬化非常陌生,最近我一直在嘗試熟悉VMM的運行方式以及如何實現超級調用。在kvm中實現自定義超級調用
談到我計劃在我的Ubuntu桌面上安裝的KVM中實現新的超級調用,並且可以從客戶環境調用。通過這種超級調用,我打算只返回一個字符串說「Hello World」 。在這一點上,我對如何實現這一目標毫無頭緒。如果你能指導我如何去實現這樣的hypercall,那將是非常有幫助的。謝謝!
您可以在用戶程序中使用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;
}