目录
GitHub - BillXiang/kvmsample: minivm based on kvm
本项目主要用 Rust 重写了 kvmsample, 用于学习 Rust 以及基本 KVM 操作.
-
打开 KVM
fn kvm_init() -> Kvm {
const KVM_DEVICE:&str = "/dev/kvm";
let kvm_path = CString::new(KVM_DEVICE).unwrap();
Kvm::new_with_path(&kvm_path).unwrap()
}
-
创建虚拟机
let vm_fd = Kvm::create_vm(kvm).unwrap();
-
分配内存
let ram_size = ram_size as u64;
let ram_start = unsafe {
libc::mmap(
null_mut(),
ram_size as usize,
libc::PROT_READ | libc::PROT_WRITE,
libc::MAP_ANONYMOUS | libc::MAP_SHARED | libc::MAP_NORESERVE,
-1,
0
) as *mut u8
};
let mem = kvm_userspace_memory_region {
slot: 0,
flags: KVM_MEM_LOG_DIRTY_PAGES,
guest_phys_addr: 0,
memory_size: ram_size,
userspace_addr: ram_start as u64
};
unsafe {
vm_fd.set_user_memory_region(mem).unwrap();
}