From 5130e819ca8aef8111ac3581520402ea46566666 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Fri, 20 Jan 2017 16:54:54 +0100 Subject: meta-intel: enable qemu and select more suitable virtual machine options Although the machines definitions in meta-intel are meant to target real hardware, begin able to start the resulting images under qemu is nevertheless useful for testing. Doing that via runqemu depends on a per-image runqemu.conf that describes how to run qemu for the image. Ineriting qemuboot.bbclass in image recipes with QB_ variables set for the current architecture via overrides creates that file. The new qemuboot-intel.inc was copied from OE-core's qemuboot-x86.inc and adapted to the three common machines in meta-intel: $ diff ../openembedded-core/meta/conf/machine/include/qemuboot-x86.inc conf/machine/include/qemuboot-intel.inc 3,5c3,5 < QB_SYSTEM_NAME_x86 = "qemu-system-i386" < QB_CPU_x86 = "-cpu qemu32" < QB_CPU_KVM_x86 = "-cpu kvm32" --- > QB_SYSTEM_NAME_intel-core2-32 = "qemu-system-i386" > QB_CPU_intel-core2-32 = "-cpu coreduo" > QB_CPU_KVM_intel-core2-32 = "-cpu kvm32" 7,9c7,13 < QB_SYSTEM_NAME_x86-64 = "qemu-system-x86_64" < QB_CPU_x86-64 = "-cpu core2duo" < QB_CPU_KVM_x86-64 = "-cpu kvm64" --- > QB_SYSTEM_NAME_intel-corei7-64 = "qemu-system-x86_64" > QB_CPU_intel-corei7-64 = "-cpu Nehalem" > QB_CPU_KVM_intel-corei7-64 = "-cpu kvm64" > > QB_SYSTEM_NAME_intel-quark = "qemu-system-i386" > QB_CPU_intel-quark = "-cpu coreduo" > QB_CPU_KVM_intel-quark = "-cpu kvm32" For performance reasons, runqemu uses virtio for the boot disk. The kernel therefore must have the necessary drivers enabled. This may also be useful when running a meta-intel machine image on other virtual platforms and therefore the default kernel configuration gets changed to enable virtio. However, OE-core's qemu.inc also enables various other tweaks for running under qemu, like deriving the wired Ethernet address from the kernel boot parameters. This is probably less desirable for a meta-intel machine and thus not enabled in the new qemu-intel.inc. The downside is that the resulting images then come up without assigned IP address when used under qemu. Distros which want that feature can still add it to their images by copying settings from OE-core's qemu.inc. Signed-off-by: Patrick Ohly Signed-off-by: California Sullivan --- conf/machine/include/meta-intel.inc | 7 +++++++ conf/machine/include/qemu-intel.inc | 16 ++++++++++++++++ conf/machine/include/qemuboot-intel.inc | 20 ++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 conf/machine/include/qemu-intel.inc create mode 100644 conf/machine/include/qemuboot-intel.inc (limited to 'conf') diff --git a/conf/machine/include/meta-intel.inc b/conf/machine/include/meta-intel.inc index fd0a792a..21587fb0 100644 --- a/conf/machine/include/meta-intel.inc +++ b/conf/machine/include/meta-intel.inc @@ -36,3 +36,10 @@ EFI_PROVIDER ?= "rmc-boot" # Add general MACHINEOVERRIDE for meta-intel MACHINEOVERRIDES =. "intel-x86-common:" + +# Definition of (more or less) suitable virtual machines. +require conf/machine/include/qemuboot-intel.inc + +# Ensure that the extra tools needed by qemu are built when building images +# and tweak machine definition to make the result more usable under qemu. +require conf/machine/include/qemu-intel.inc diff --git a/conf/machine/include/qemu-intel.inc b/conf/machine/include/qemu-intel.inc new file mode 100644 index 00000000..db8b2b3d --- /dev/null +++ b/conf/machine/include/qemu-intel.inc @@ -0,0 +1,16 @@ +# Similar to meta/conf/machine/include/qemu.inc but influences the +# distro content (in particular the kernel) less than qemu.inc. + +# Ensure that qemu gets built when building images. +EXTRA_IMAGEDEPENDS += "qemu-native qemu-helper-native" + +# runqemu uses virtio, so we have to enable the corresponding +# kernel drivers. +KERNEL_FEATURES += "cfg/virtio.scc" + +# Other useful extensions which are not enabled by default: +# rng-tools to take advantage of qemu's virtio-rng-pci device. +# MACHINE_EXTRA_RRECOMMENDS += "rng-tools" + +# Creates the necessary .qemuboot.conf file for each image. +IMAGE_CLASSES += "qemuboot" diff --git a/conf/machine/include/qemuboot-intel.inc b/conf/machine/include/qemuboot-intel.inc new file mode 100644 index 00000000..82a72aca --- /dev/null +++ b/conf/machine/include/qemuboot-intel.inc @@ -0,0 +1,20 @@ +# For runqemu +IMAGE_CLASSES += "qemuboot" +QB_SYSTEM_NAME_intel-core2-32 = "qemu-system-i386" +QB_CPU_intel-core2-32 = "-cpu coreduo" +QB_CPU_KVM_intel-core2-32 = "-cpu kvm32" + +QB_SYSTEM_NAME_intel-corei7-64 = "qemu-system-x86_64" +QB_CPU_intel-corei7-64 = "-cpu Nehalem" +QB_CPU_KVM_intel-corei7-64 = "-cpu kvm64" + +QB_SYSTEM_NAME_intel-quark = "qemu-system-i386" +QB_CPU_intel-quark = "-cpu coreduo" +QB_CPU_KVM_intel-quark = "-cpu kvm32" + +QB_AUDIO_DRV = "alsa" +QB_AUDIO_OPT = "-soundhw ac97,es1370" +QB_KERNEL_CMDLINE_APPEND = "vga=0 uvesafb.mode_option=640x480-32 oprofile.timer=1 uvesafb.task_timeout=-1" +# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy +QB_OPT_APPEND = "-vga vmware -show-cursor -usb -usbdevice tablet -device virtio-rng-pci" +QB_SLIRP_OPT = "-net nic,model=e1000 -net user,hostfwd=tcp::2222-:22" -- cgit v1.2.3-54-g00ecf