From 18dd86feaa0477ca16e4196b035a79bdbb248611 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 22 Oct 2024 17:05:05 +0800 Subject: [PATCH] vmm:qemu support aarch64 Signed-off-by: liuxu --- vmm/sandbox/src/qemu/config.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/vmm/sandbox/src/qemu/config.rs b/vmm/sandbox/src/qemu/config.rs index ce2df24f..bd6fcf73 100644 --- a/vmm/sandbox/src/qemu/config.rs +++ b/vmm/sandbox/src/qemu/config.rs @@ -21,7 +21,7 @@ use std::{ }; use containerd_sandbox::error::{Error, Result}; -#[cfg(target_arch = "x86_64")] +#[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))] use lazy_static::lazy_static; use sandbox_derive::{CmdLineParamSet, CmdLineParams}; use serde::{Deserialize, Serialize}; @@ -40,10 +40,11 @@ const DEFAULT_QEMU_PATH: &str = "/usr/bin/qemu-system-x86_64"; #[cfg(target_arch = "aarch64")] const DEFAULT_QEMU_PATH: &str = "/usr/bin/qemu-system-aarch64"; -#[cfg(target_arch = "x86_64")] +#[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))] lazy_static! { static ref SUPPORTED_MACHINES: HashMap = { let mut sms = HashMap::new(); + #[cfg(target_arch = "x86_64")] sms.insert( "microvm-pci".to_string(), Machine { @@ -51,6 +52,7 @@ lazy_static! { options: None, }, ); + #[cfg(target_arch = "x86_64")] sms.insert( "pc".to_string(), Machine { @@ -58,6 +60,14 @@ lazy_static! { options: Some("accel=kvm,kernel_irqchip=on".to_string()), }, ); + #[cfg(target_arch = "aarch64")] + sms.insert( + "virt".to_string(), + Machine { + r#type: "virt".to_string(), + options: Some("usb=off,accel=kvm,gic-version=3".to_string()), + }, + ); sms }; } @@ -155,7 +165,7 @@ impl QemuVMConfig { } else { return Err(Error::InvalidArgument("cpu model".to_string())); } - #[cfg(target_arch = "x86_64")] + #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))] if let Some(machine) = SUPPORTED_MACHINES.get(&self.machine_type) { result.machine = machine.clone(); } else { @@ -163,9 +173,9 @@ impl QemuVMConfig { "machine_type not supported!".to_string(), )); } - #[cfg(not(target_arch = "x86_64"))] + #[cfg(not(any(target_arch = "x86_64", target_arch = "aarch64")))] return Err(Error::Unimplemented( - "cpu other than x86 not supported".to_string(), + "cpu other than x86 or aarch64 not supported".to_string(), )); if !self.firmware_path.is_empty() { result.bios = Some(self.firmware_path.to_string());