2019-02-22 16:04:35 +00:00
|
|
|
// Copyright © 2019 Intel Corporation
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
//
|
|
|
|
|
|
|
|
extern crate kvm_ioctls;
|
|
|
|
|
|
|
|
use kvm_ioctls::*;
|
2019-02-28 13:16:58 +00:00
|
|
|
use std::path::Path;
|
|
|
|
pub mod vm;
|
2019-02-22 16:04:35 +00:00
|
|
|
|
2019-02-28 13:16:58 +00:00
|
|
|
use self::vm::{Result, Vm};
|
2019-02-22 16:04:35 +00:00
|
|
|
|
2019-02-28 13:16:58 +00:00
|
|
|
struct Vmm {
|
|
|
|
kvm: Kvm,
|
|
|
|
}
|
2019-02-22 16:04:35 +00:00
|
|
|
|
2019-02-28 13:16:58 +00:00
|
|
|
impl Vmm {
|
|
|
|
fn new() -> Result<Self> {
|
|
|
|
let kvm = Kvm::new().expect("new KVM instance creation failed");
|
|
|
|
Ok(Vmm { kvm })
|
|
|
|
}
|
|
|
|
}
|
2019-02-22 16:04:35 +00:00
|
|
|
|
2019-02-28 13:16:58 +00:00
|
|
|
pub fn boot_kernel(kernel: &Path) -> Result<()> {
|
|
|
|
let vmm = Vmm::new()?;
|
|
|
|
let mut vm = Vm::new(&vmm.kvm, kernel)?;
|
2019-02-22 16:04:35 +00:00
|
|
|
|
2019-02-28 14:26:30 +00:00
|
|
|
let entry = vm.load_kernel()?;
|
|
|
|
vm.start(entry)?;
|
2019-02-22 16:04:35 +00:00
|
|
|
|
2019-02-28 13:16:58 +00:00
|
|
|
Ok(())
|
2019-02-22 16:04:35 +00:00
|
|
|
}
|