Emulating Raspberry Pi with QEMU (2023)

Download the Raspberry Pi operating system
-Creating images of the Raspberry Pi operating system
-Boot Raspberry Pi OS on QEMU
SD card size has been increased to around 8GB
Connect to Raspberry Pi OS via SSH
-Habilitar SSH no Raspberry Pi
-Connection to Rpi via SSH (with password)
-Connection to Rpi via SSH (no password)

Well, a simple internet search yields so many links, so let me leave a few things out.

As you have already seen, the steps for such an emulation. None of them really worked for me directly, so here are the steps that worked.

These instructions can be executed on a native Linux system or on aSubsistema do Windows para Linux (WSL)🇧🇷 They cannot run on Windows.

Download and unzip the Raspberry Pi OS

Download the Rapberry Pi operating system fromhere🇧🇷 I chose the Raspberry Pi OS 32-bit lite edition because I only need to work in the terminal. Of course, everything mentioned below also works for the desktop edition.

curl <link-to-raspios> -o raspios.img.xz
xz -dk raspios.img.xz # Let's keep the consistency of the original image
# after unpacking

Mount the image to a specific mount directory

sudo mkdir /mnt/rpi
sudo losetup -f --show -P $(pwd)/raspios.img
sudo mount /dev/loop<no>p1 /mnt/rpi

Extract the kernel and all dtb files from the image

mkdir dtbs
cp /mnt/rpi/nucleo* .
cp /mnt/rpi/*.dtb dtbs

Remove the password for user "pi".

The latest versions ofRaspberry Pi OS no longer has default username and password combination like pi - raspberry🇧🇷 According to the documentation, the Raspberry Pi operating system also allows you to set the default password for the image you write.

Since in our case we manually downloaded the created image directly, we did not set a default password.

So since we mounted the kernel partition above, let's simply mount the Raspberry Pi root fs:

sudo umount /mnt/rpi
sudo mount /dev/loop<no>p2 /mnt/rpi

edit the file/mnt/rpi/etc/passwordto clear password for user "pi":

sudo vi /mnt/rpi/etc/passwd

Look for this line in the file:

(Video) Emulating ARM64 Raspberry Pi Image using QEMU

pi : x : 1000 : 1000 : , , : / start / pi : / bin / bash

and remove the 'x' after "pi:". Now save the file. By doing this you simply made it easier for us to log into the Raspberry Pi OS once QEMU boots with it. The line should now look like this:


Unmount image - you won't need it anymore

sudo umount /mnt/rpi
sudo losetup -d /dev/loop<nr>


Installing Qemu usually involves installing multiple packages on a Linux distribution. On Windows, a single download completely installs Qemu.

Typically, on Linux distributions, the following packages are required (tested on OpenSUSE, but these names are on Ubuntu as well):

sudo zypper instalar qemu qemu-arm qemu-tools

Building a QEMU Compatible Raspberry Pi OS Image

The Rpi image we downloaded above is a raw format image. Converting to qcow2 format makes it very efficient when used with QEMU and also takes up less space on the host computer.

In addition, we also increased the SD card size to 8GB so that we can use all the space to install additional software at runtime.

### Convert raw image to QEMU qcow2 format
qemu-img convert -f raw -O qcow2 raspios.img raspios.qcow
### Resize the image to 8 GB (should be a power of two)
qemu-img redimensioniert raspios.qcow 8G
### Remove existing Raspberry Pi OS RAW image so we can do this
### make no mistake and use.
rm -f raspios.img

Start the Raspberry Pi operating system

The following instructions work on both Windows and Linux (or WSL) systems. Of course, you won't be using them on Windows.sudobeforeqemu-system-arch64.

At the time of writing I'm using QEMU 7.0.0, but I've also been testing this since QEMU version 5.2, so I can guarantee it works at least since that version.

# Start QEMU with Rpi emulation
sudo qemu-system-aarch64 -M raspi3b -display none -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1" -dtb ./dtbs/bcm2710-rpi- 3-b-plus.dtb -sd raspios.qcow -kernel kernel8.img -m 1G -smp 4 -serial mon:stdio -usb -device usb-mouse -device usb-kbd -device usb-net,netdev=net0 - usuario netdev,id=net0,hostfwd=tcp::5555-:22

This will launch QEMU with the Raspberry Pi on the console. When prompted to sign in, just typepiand press <ENTER>. Now you can easily access the Raspberry Pi operating system terminal. You can get root shell just by typingbash-sudono command prompt.

Brief explanation of the command line

Okay, let's try to understand what actually happened above. Here is a brief explanation:

### We select the Raspberry Pi 3b
-M raspi3b
### Since we started with a lightweight image, we don't need QEMU graphics
- show none
### The path to the image on the SD card mounted on the emulator
### SD card. This image was the one we downloaded from
### Raspbery Pi site and also tweaked for 8G (i.e. a power of 2).
-sd raspios.qcow
### The device tree for the Raspberry Pi and kernel images.
### These were extracted from the first partition of
### Image above.
-dtb ./dtbs/bcm2710-rpi-3-b-plus.dtb -kernel kernel8.img
### Redirect all I/O messages to/from a serial console.
### Specifically, we also use "mon:" as an argument to -serial
### to ensure ctrl-c when used to stop a long run
Program ### in emulated Rpi does not exit QEMU.
### "mon:" passes Ctrl-C directly to the guest OS (in our
Case ###, the Rapberry Pi operating system).Note that this only works
###Linux (or WSL) systems: On Windows, QEMU will still exit.
-Serial Seg: stdio
### Pass in some kernel command lines: most importantly, these
The ### parameters redirect initial boot messages to the string
### terminal ttyAMA0 - this is the same terminal as that one
### You have accessed QEMU. Since we are redirecting all IO messages to
### previous series, we will see all the news (early release news
### and its entries) directly on the calling end device
### the QEMU. Also, we mentioned that rootfs resides on
### second partition in the image (remember we used the
### passwd file of this partition above?)
-agregar "rw earlyprintk loglevel=8 consola=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1"
### Memory and number of processors QEMU should use.
### For -smp, we could use $(nproc) on Linux/WSL systems,
### or the number returned by "gci $env:NUMBER_OF_PROCESSORS".
### on Windows machines.
-m 1G -smp 4
### Finally, we emulate all input devices as well as the network
### Devices such as USB devices. In addition, we also forward the
### Port 22 on guest (sshd port is listening).
### Port 5555 on host. This will allow us to participate
### Rapberry Pi OS from anywhere (including localhost).
-usb -device usb-ratón -device usb-kbd -device usb-net,netdev=net0 -user netdev,id=net0,hostfwd=tcp::5555-:22

After doing all this to start QEMU successfully, we will be faced with the following problem: The size of the SD card (where the operating system and files in the home directory of thepiuser) would be ridiculously small: around 1.6GB, and most of it is already used by the base system!

(Video) Resize Raspberry Pi image and emulate with QEMU

So now we need to increase the map size so that all useful work can be done with this emulated Rpi.

Now. create a file/etc/udev/rules.d/90-qemu.ruleson the Raspberry Pi guest OS:

sudo /etc/udev/rules.d/90-qemu.rules

Paste this content into the file:

NUCLEO=="sda", SYMLINK+="mmcblk0"
NUCLEO=="sda?", SYMLINK+="mmcblk0p%n"
NÚCLEO=="sda2", SYMLINK+="raíz"

Shut down QEMU now —sudo off -h now- and restart it with the command line as above.

After QEMU returns, log in aspiagain and start raspi-config as root:

sudo raspi-config

In the curse window that appears, select "Advanced Options":

Emulating Raspberry Pi with QEMU (1)

In the advanced options, select "Extend file system":

Emulating Raspberry Pi with QEMU (2)

This expands the file system to fill the original image size of about 8 GB. After resizing, you need to restart QEMU to use all the extended space.

Habilitar SSH no Raspberry Pi

The Raspberry Pi operating system does not allow SSH connections. The first thing we have to do is activate it with theraspi-configTool:

sudo raspi-config

Now you will see a curses tool. Use the arrow to select "Interface Options".

(Video) Emulating Raspberry Pi On Linux with QEMU - Part 1 - Setting it up!

Emulating Raspberry Pi with QEMU (3)

Press <ENTER> and select SSH:

Emulating Raspberry Pi with QEMU (4)

Select "Yes" in the dialog box that appears:

Emulating Raspberry Pi with QEMU (5)

Press <OK> and then <Done>. This will enable SSH on your Raspberry Pi. You can now connect to your emulated Rpi using SSH.

Connection via ssh (and with password)

Set a password for the pi user

Since we started QEMU with port 22 on the guest forwarded to 5555 on the host, we can just ssh into the Rpi OS from the host.

To do this, however, we must set the password for thepiUsers on Raspberry (remember we removed the password forpiuser above). We just set the password for pi usingpasswordcommand in the guest operating system.

Configure the SSH client

add this~/.ssh/configFile on your host:

(Video) An emulated Raspberry Pi on QEMU/Linux

IP des Hosts
Identity file ~/.ssh/rpikey
Host local do host
Benutzer pi
Porto 5555

Losidentity fileThe one shown above will be used if you choose to login via SSH without a password (see below).

Accessing the Raspberry Pi with ssh

Access the Rpi guest from the host with this SSH command:


Passwordless login via SSH keys

For passwordless SSH login, do the following (use these commands on HOST or RPI):

HOST:Generate SSH key:

We use a passwordless private key (hence the -N option below).

ssh-keygen -b 2048 -t rsa -q -N "" -f ~/.ssh/rpikey

HOST:Copy the public key to your rpi:

ssh-copia-id -i ~/.ssh/rpikey rpi

Note that the above command worked because you had already configured the ssh client with the username and port numbers in the~/.ssh/configfile (see above). Otherwise, use the following command (options-Page 5555and host identitypi@localhostshould be used for the entire remainder of the command if the SSH client is not set to~/.ssh/configbusiness hours):

ssh-copia-id -p 5555 -i ~/.ssh/rpikey pi@localhost

DPI:Enable Passwordless Guest OS on Rapberry Pi

Do this in the original QEMU terminal (not an ssh-connected terminal):

edit the file/etc/ssh/sshd_config:

sudo vi /etc/ssh/sshd_config

Add the following (or comment out the existing line and enter the value "no"):

Password Authentication No

optional,If you also want to login as root via SSH without a password, you must also enable this:

AllowRootLogin without password

After making these changes, restart your SSH server:

(Video) #07 - How To Emulate Firmware With QEMU - Hardware Hacking Tutorial

Restart sudo /etc/init.d/ssh

HOST:Connect to emulated Rpi without password!


There are many places where I got all this information. If something doesn't work out for you, additional information can be added from the original sources. The original sources of information are these:


Can QEMU emulate a Raspberry Pi? ›

Running qemu for the Raspberry PI 3 hardware

It will boot using the Raspberry PI 3 kernel provided by the kernel8. img file and will have a few boot options that configure the console and the root drive which for a Raspberry PI is the eMMC device located at /dev/mmcblk0p2 .

How to use QEMU to emulate Raspberry Pi? ›

  1. Install qemu-system-arm (on Ubuntu, "sudo apt-get qemu-system-arm") to allow the emulation of devices with arm processors like the Pi.
  2. Create an emulation project directory, "~/Projects/rpitest" to hold the emulation files.
  3. Clone the qemu-rpi-kernel repo to another directory using git.

What is the best way to emulate Raspberry Pi? ›

To emulate Raspberry Pi, download the Windows version of VMWare and install it by running the executable (.exe) file. After successfully installing the program, create a new virtual machine and open the Raspbian iso file to initiate the Raspberry Pi emulator.

Is QEMU faster than VirtualBox? ›

VirtualBox is faster and has a better UI than QEMU. It's also a good choice only for x86 and x64 architectures. Lastly, VirtualBox doesn't require advanced knowledge or experience.

Can QEMU emulate hardware? ›

Admins looking for an alternative tool for emulating hardware should consider QEMU, which supports x86, PowerPC, ARM and SPARC architectures. QEMU is an open source emulator and virtualization tool that specializes in emulating different CPU architectures.

Is QEMU better than VirtualBox on Windows? ›

Therefore, QEMU is recommended for advanced level users and for kernel developers. On the other hand, VirtualBox better suits the users who want to get multiple operating systems to run on a single machine without a dual boot hindrance.

Why is QEMU better? ›

QEMU Pros:

Close integration with KVM; More performant than VirtualBox. Free and open source. Can work as an emulator as well as a hypervisor.

Does QEMU use GPU? ›

It support Intel (Intel GVT-g, SR-IOV), NVIDIA (Nvidia VGPU, SR-IOV) and AMD (AMD SR-IOV). You have to create YAML configurations for each virtual machine. Currently Intel and NVIDIA GPUs are tested, with limited support for AMD.

How much RAM do I need for emulation? ›

But for users who are not intent on using the most recent of emulators (like those for the Wii U and PS3), 8GB or even 4GB of RAM is still likely to be enough.

Which is the No 1 emulator? ›

4Comparison of the Best Android Emulators
✅Android EmulatorSupported PlatformVersion
BlueStacksWindows 10, 11 + MacNougat 7.1.2
GameLoopWindows 7, 8, 10, MacNougat 7.1.2
LDPlayerWindows XP, XP3, 11, MACNougat 7.1.2
NoxplayerWindows, MacAndroid 4.0
4 more rows

What is the best emulator frontend for Raspberry Pi? ›

RetroPie. And finally, the one you've all been waiting for, RetroPie is the best-known emulation suite for the Raspberry Pi. In fact, RetroPie is now available through the Raspberry Pi Imager program, which makes downloading and setting it up as easy as a few mouse clicks on your Windows, MacOS, or Linux PC.

Is virtual machine better than the emulator? ›

In an emulator, the guest operating system does not run-on physical hardware. In contrast to virtual machines, emulators are sluggish. Emulators do not depend on the CPU while the VMs uses the CPU. Virtualization physically places a layer between hardware, unlike emulation, to control and access it.

Can QEMU emulate arm? ›

QEMU can emulate both 32-bit and 64-bit Arm CPUs. Use the qemu-system-aarch64 executable to simulate a 64-bit Arm machine.

What can you emulate with QEMU? ›

QEMU can boot many guest operating systems, including Linux, Solaris, Microsoft Windows, DOS, and BSD; it supports emulating several instruction sets, including x86, MIPS, 32-bit ARMv7, ARMv8, PowerPC, SPARC, ETRAX CRIS and MicroBlaze. KVM Hosting. Here QEMU deals with the setting up and migration of KVM images.

Should I use QEMU or KVM? ›

This means that KVM uses the hardware virtualization capabilities of the host machine's CPU to run virtual machines, while QEMU relies on software emulation to run virtual machines. As a result, KVM tends to be more efficient and performant than QEMU but is also more hardware-dependent.

Does QEMU use UEFI? ›

UEFI for x86 QEMU/KVM VMs is called OVMF (Open Virtual Machine Firmware). It comes from EDK2 (EFI Development Kit), which is the UEFI reference implementation.

Does QEMU use BIOS or UEFI? ›

Most Qemu software runs BIOS (Legacy) initialization software. In many cases, a user may want to run Qemu with UEFI instead of BIOS. Additionally, a user may prefer run Qemu in command line or graphically with Aqemu.

What is the difference between QEMU virtualization and emulation? ›

The Main Difference Between Virtualization and Emulation

In virtualization, you can directly access the hardware. The main difference between the virtual machine and emulator is that the virtual machine runs code directly with a different set of domains in use language. The basic emulation requires an interpreter.

Is QEMU a hypervisor or emulator? ›

QEMU is a machine emulator that can run operating systems and programs for one machine on a different machine.

Can QEMU emulate IOS? ›

Despite a few bugs, the final project seems quite functional, and iPhone OS 1.0 has been successfully emulated with QEMU – an open source virtualization platform. The system is completely navigable using a mouse and keyboard, and most pre-installed apps work just fine.

Why is QEMU faster? ›

QEMU/KVM is better integrated in Linux, has a smaller footprint and should therefore be faster. VirtualBox is a virtualization software limited to x86 and amd64 architecture. Xen uses QEMU for the hardware assisted virtualization, but can also paravirtualize guests without hardware virtualisation.

Is VMware better than QEMU? ›

According to the StackShare community, VMware vSphere has a broader approval, being mentioned in 87 company stacks & 147 developers stacks; compared to Qemu, which is listed in 4 company stacks and 6 developer stacks.

Can you run Windows 10 in QEMU? ›

Initial setup

Open up the Virtual Machine Manager and click on the upper left button to open the New VM window. The first thing you have to do is to select how you would like to install the operating system. In this case, we are using a Windows 10 ISO image. Click forward and choose the Windows 10 ISO you downloaded.

What is the difference between QEMU and QEMU KVM? ›

So to conclude: QEMU is a type 2 hypervisor that runs within user space and performs virtual hardware emulation, whereas KVM is a type 1 hypervisor that runs in kernel space, that allows a user space program access to the hardware virtualization features of various processors.

How long does it take to build QEMU? ›

It would take approximately 1 hour to complete the setup for configuring and running libvirt and qemu instances.

What are the minimum requirements for QEMU? ›

QEMU requires Mac OS X 10.5 or later, but it is recommended to use Mac OS X 10.7 or later.

Does QEMU support 3D acceleration? ›

Mesa main contains the VirGL 3D driver. QEMU 2.4 contained the initial virtio-gpu with no acceleration support. QEMU 2.5 contains 3D support only with the GTK3 frontend with GL enabled.

How to pass through GPU in QEMU? ›

To do that:
  1. Install clear Windows 10 somewhere (not in libvirt. ...
  2. Install all latest Windows 10 updates.
  3. Install AMD vga drivers.
  4. Reboot.
  5. Go again to the bare metal Windows 10 installation.
  6. Install GPU-Z.
  7. In GPU-Z in main tab, near BIOS version will be small button "Save ROM". ...
  8. Reboot into Gentoo.
Nov 27, 2022

Can I run Android on QEMU? ›

While QEMU does support booting other OS's, we don't use that functionality since Android is Linux.

What systems can QEMU emulate? ›

QEMU can boot many guest operating systems, including Linux, Solaris, Microsoft Windows, DOS, and BSD; it supports emulating several instruction sets, including x86, MIPS, 32-bit ARMv7, ARMv8, PowerPC, SPARC, ETRAX CRIS and MicroBlaze. KVM Hosting. Here QEMU deals with the setting up and migration of KVM images.

What CPUs can QEMU emulate? ›

QEMU can emulate both 32-bit and 64-bit Arm CPUs.

Is there an emulator for Raspberry Pi? ›

There are many different emulators for the Raspberry Pi with each of them having their own unique pros and cons. On this page, we highlight some of the best emulator packages that you can install. It includes RetroPie, Lakka, and RecalBox.

Where can I simulate Raspberry Pi? ›

Visual Designer for Raspberry Pi® is a breakthrough product allowing you to design, simulate and debug complete Raspberry Pi systems. For the first time users can create a Raspberry PI schematic and a controlling program and then simulate and debug the entire system in software.


1. Emulate Raspberry Pi on x86 Linux
(The Sleepy Penguin)
2. [arm64] emulate raspberry pi with qemu
(git switch SpeeDr00t)
3. Emulating ARM with Virt-Manager QEMU | Linux Guide
4. How to virtualise a Raspberry PI using qemu in linux and or unRAID
(Spaceinvader One)
5. Emulating Raspberry Pi Raspian Linux on Windows with QEMU
(Homeless Tech)
6. How to: Install and Run QEMU (Raspbian Emulator) on Windows
(Tim Smith)


Top Articles
Latest Posts
Article information

Author: Twana Towne Ret

Last Updated: 08/08/2023

Views: 5847

Rating: 4.3 / 5 (64 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Twana Towne Ret

Birthday: 1994-03-19

Address: Apt. 990 97439 Corwin Motorway, Port Eliseoburgh, NM 99144-2618

Phone: +5958753152963

Job: National Specialist

Hobby: Kayaking, Photography, Skydiving, Embroidery, Leather crafting, Orienteering, Cooking

Introduction: My name is Twana Towne Ret, I am a famous, talented, joyous, perfect, powerful, inquisitive, lovely person who loves writing and wants to share my knowledge and understanding with you.