Difference between revisions of "QEMU"

From eLinux.org
Jump to: navigation, search
(Resources)
(5 intermediate revisions by 3 users not shown)
Line 3: Line 3:
 
QEMU is a generic and open source machine emulator and virtualizer, originally developed by Fabrice Bellard.
 
QEMU is a generic and open source machine emulator and virtualizer, originally developed by Fabrice Bellard.
  
When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performances.
+
When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performance.
  
When used as a virtualizer, QEMU achieves near native performances by executing the guest code directly on the host CPU. A host driver called the QEMU accelerator (also known as KQEMU) is needed in this case. The virtualizer mode requires that both the host and guest machine use x86 compatible processors.
+
When used as a virtualizer, QEMU achieves near native performances by executing the guest code directly on the host CPU. Host KVM support is utilized in this case. The virtualizer mode requires that both the host and guest machine use the same instruction set.
  
[http://www.qemu.org Qemu project web site]
+
[http://www.qemu.org QEMU project web site]
  
 
= Use in embedded projects =
 
= Use in embedded projects =
QEMU is increasingly used to provide an emulator for embedded processors, for testing
+
QEMU is increasingly used to provide an emulator for embedded processors, for testing embedded Linux without the need for actual hardware.
embedded Linux without the need for actual hardware.
 
  
The [http://free-electrons.com/docs/elfs/ Embedded Linux From Scratch] presentation by Michael Opdenacker
+
The [http://free-electrons.com/docs/elfs/ Embedded Linux From Scratch] presentation by Michael Opdenacker has great information about setting up QEMU with embedded Linux.
has great information about setting up QEMU with embedded Linux.
 
  
Also, [http://impactlinux.com/fwl/ Firmware Linux] uses QEMU as part of a "native" build environment to
+
Also, [http://landley.net/aboriginal/ Aboriginal Linux] uses QEMU as part of a "native" build environment to eliminate cross-compilation problems.
eliminate cross-compilation problems when building for Embedded Linux distributions for non-X86 platforms.
 
  
 
= Supported architectures =
 
= Supported architectures =
Line 23: Line 20:
 
The following architectures are supported as target architectures for system emulation:
 
The following architectures are supported as target architectures for system emulation:
  
* x86
+
* [http://qemu.weilnetz.de/qemu-doc.html#QEMU-PC-System-emulator x86]
* [http://www.nongnu.org/qemu/qemu-doc.html#SEC65 ARM] (ARM Integrator/CP, ARM Versatile, ARM Realview, X-Scale based PDAs, Palm Tungsten, Nokia N800/N810 tablets, Luminary boards, etc.)
+
* [http://qemu.weilnetz.de/qemu-doc.html#ARM-System-emulator ARM and AArch64] ("Virt", ARM Integrator/CP, ARM Versatile, ARM Realview, X-Scale based PDAs, Palm Tungsten, Nokia N800/N810 tablets, Luminary boards, etc.)
* [http://www.nongnu.org/qemu/qemu-doc.html#SEC65 Sparc32] and [http://www.nongnu.org/qemu/qemu-doc.html#SEC63 Sparc64]
+
* [http://qemu.weilnetz.de/qemu-doc.html#Sparc32-System-emulator Sparc32] and [http://qemu.weilnetz.de/qemu-doc.html#Sparc64-System-emulator Sparc64]
* [http://www.nongnu.org/qemu/qemu-doc.html#SEC61 PowerPC]
+
* [http://qemu.weilnetz.de/qemu-doc.html#PowerPC-System-emulator PowerPC]
* [http://www.nongnu.org/qemu/qemu-doc.html#SEC61 MIPS]
+
* [http://qemu.weilnetz.de/qemu-doc.html#MIPS-System-emulator MIPS]
* [http://www.nongnu.org/qemu/qemu-doc.html#SEC66 Coldfire]
+
* [http://qemu.weilnetz.de/qemu-doc.html#ColdFire-System-emulator Coldfire]
  
Support for new boards or new peripherals can added relatively easily in Qemu, the APIs being quite simple to understand and use.
+
Support for new boards or new peripherals can added relatively easily in QEMU, the APIs being quite simple to understand and use.
  
 
= Resources =
 
= Resources =
 
* [http://wiki.qemu.org/download/qemu-doc.html QEMU Emulator User Documentation]
 
* [http://wiki.qemu.org/download/qemu-doc.html QEMU Emulator User Documentation]
* [http://www.bellard.org/qemu/qemu-tech.html QEMU Internals] (broken link --[[User:Klausfpga|Klausfpga]] 16:48, 14 May 2009 (UTC) )
+
* [http://qemu.weilnetz.de/qemu-tech.html QEMU Internals]
* [http://wiki.qemu.org/KQemu/TechDoc QEMU Accelerator Technical Documentation]
+
* [http://tuxology.net/2008/12/14/embedded-emulator/ Building an embedded Linux system emulator using QEMU]
* [http://tuxology.net/2008/12/14/embedded-emulator/ Building an embedded Linux system emulator using Qemu]
 
 
* [http://vm-kernel.org/blog/2008/12/15/linux-is-running-on-qemu-omap3/ QEMU for OMAP3] ([[BeagleBoard]])
 
* [http://vm-kernel.org/blog/2008/12/15/linux-is-running-on-qemu-omap3/ QEMU for OMAP3] ([[BeagleBoard]])
 
* [[QEMUonARM|QEMU on ARM]]
 
* [[QEMUonARM|QEMU on ARM]]
 +
* [http://cronicasredux.blogspot.co.uk/2011/09/installing-and-running-debian-armel-on.html QEMU for the Raspberry Pi] - also see [http://www.raspberrypi.org/forum/projects-and-collaboration-general/emulating-a-raspi-on-windows discussion]
  
 
= Some quick useful tips =
 
= Some quick useful tips =
Line 66: Line 63:
 
* -nographic = don't use graphics, and redirect serial I/O to console
 
* -nographic = don't use graphics, and redirect serial I/O to console
 
* -no-reboot = exit instead of rebooting
 
* -no-reboot = exit instead of rebooting
 +
 +
== Resize filesystem image ==
 +
Not enough space to install anything after you're up and running? Here's how to resize the image.
 +
 +
Host:  qemu-img resize rootfs_debian6_rpi.ext4 +1G
 +
QEMU:  sudo resize2fs /dev/sda  // Be careful not to run this on your host machine
 +
 +
The online resize2fs may corrupt the filesystem so here's an alternative.
 +
[http://www.cnx-software.com/2012/03/08/instructions-to-run-raspberry-pi-fedora-14-remix-in-qemu/#comment-6900 resize using loopback device]
  
 
[[Category:QEMU]]
 
[[Category:QEMU]]

Revision as of 14:29, 22 August 2014

Introduction

QEMU is a generic and open source machine emulator and virtualizer, originally developed by Fabrice Bellard.

When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performance.

When used as a virtualizer, QEMU achieves near native performances by executing the guest code directly on the host CPU. Host KVM support is utilized in this case. The virtualizer mode requires that both the host and guest machine use the same instruction set.

QEMU project web site

Use in embedded projects

QEMU is increasingly used to provide an emulator for embedded processors, for testing embedded Linux without the need for actual hardware.

The Embedded Linux From Scratch presentation by Michael Opdenacker has great information about setting up QEMU with embedded Linux.

Also, Aboriginal Linux uses QEMU as part of a "native" build environment to eliminate cross-compilation problems.

Supported architectures

The following architectures are supported as target architectures for system emulation:

Support for new boards or new peripherals can added relatively easily in QEMU, the APIs being quite simple to understand and use.

Resources

Some quick useful tips

How to build a rootfs.img

Here are the steps for building a rootfs.img, assuming you busybox built on your host, for the target archictecture:

mkdir /mnt/rootfs
mount -o loop rootfs.img /mnt/rootfs
rsync -a busybox/_install/ /mnt/rootfs
chown -R root:root /mnt/rootfs/
sync
umount

Some sample command lines

I got these from Rob Landley at OLS 2008:

qemu -kernel linux-2.6.26/arch/i386/boot/bzImage -hda rootfs.img -append "console=ttyS0 root=/dev/hda" -nographic
qemu -kernel linux-2.6.26/arch/i386/boot/bzImage -hda rootfs.img -append "console=ttyS0 root=/dev/hda init=/bin/ash" -nographic
qemu -kernel linux-2.6.26/arch/i386/boot/bzImage -hda rootfs.img -append "console=ttyS0 root=/dev/hda panic=1" -nographic -no-reboot
killall qemu

Interesting options

  • -kernel <file> = specify the kernel image to use for booting
  • -hda <file> = specify
  • -nographic = don't use graphics, and redirect serial I/O to console
  • -no-reboot = exit instead of rebooting

Resize filesystem image

Not enough space to install anything after you're up and running? Here's how to resize the image.

Host:  qemu-img resize rootfs_debian6_rpi.ext4 +1G
QEMU:  sudo resize2fs /dev/sda  // Be careful not to run this on your host machine

The online resize2fs may corrupt the filesystem so here's an alternative. resize using loopback device