[meta-intel] [PATCH v2 1/1] meta-intel: enable qemu and select more suitable virtual machine options

Patrick Ohly patrick.ohly at intel.com
Fri Jan 20 07:54:54 PST 2017


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 <patrick.ohly at intel.com>
---
 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

diff --git a/conf/machine/include/meta-intel.inc b/conf/machine/include/meta-intel.inc
index fd0a792..21587fb 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 0000000..db8b2b3
--- /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 0000000..82a72ac
--- /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"
-- 
git-series 0.9.1


More information about the meta-intel mailing list