Today, I will present how to install the Raspbian Linux distribution for Raspberry Pi on QEMU.
First, get the Ubuntu image and run it in a VM:
For the QEMU emulation you will need the following:
- A Raspbian Image: http://downloads.raspberrypi.org/raspbian/images/raspbian-2017-04-10/ (other versions might work, but Jessie is recommended)
- QEMU kernel: https://github.com/dhruvvyas90/qemu-rpi-kernel
Install the Raspbian:
Inside yout Ubuntu VM, create a new folder:
$ mkdir ~/qemu_vms
Download and place the Raspbian image to ~/qemu_vms/
Download and place the qemu-kernel to ~/qemu_vms/
$ sudoapt-get install qemu-system $ unzip <image-file>.zip $ fdisk -l <image-file>
You should see something like this:
You see that filesystem (.img2) starts at sector 92160. Now take that value and multiply it by 512, in this case it’s 512 * 92160 = 47185920 bytes. Use this value as an offset in the following command:
$ sudo mkdir /mnt/raspbian $ sudo mount -v -o offset=47185920 -t ext4 ~/qemu_vms/<your-img-file.img> /mnt/raspbian $ sudo nano /mnt/raspbian/etc/ld.so.preload
Comment out every entry in that file with ‘#’, save and exit with Ctrl-x>> Y.
$ sudo nano /mnt/raspbian/etc/fstab
If you see anything with mmcblk0 in fstab, then:
- Replace the first entry containing /dev/mmcblk0p1 with /dev/sda1
- Replace the second entry containing /dev/mmcblk0p2 with /dev/sda2, save and exit.
$ cd ~ $ sudo umount /mnt/raspbian
Now you can emulate it on Qemu by using the following command:
$ qemu-system-arm -kernel ~/qemu_vms/<your-kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda ~/qemu_vms/<your-jessie-image.img> -redir tcp:5022::22 -no-reboot
From the terminal, you need to start the SSH service so that you can access it from your host system (the one from which you launched the qemu).
Turn on SSH:
$ sudo service ssh start
Now you can SSH into it from host system with (default password – raspberry):
$ ssh [email protected] -p 5022
Troubleshooting SSH service:
If SSH doesn’t start in your emulator at startup by default, you can change that inside your Pi terminal with:
$ sudo update-rc.d ssh enable
If your emulated Pi starts the GUI and you want to make it start in console mode at startup, use the following command inside your Pi terminal:
$ sudo raspi-config />Select 3 - Boot Options />Select B1 - Desktop / CLI />Select B2 - Console Autologin
If your mouse doesn’t move in the emulated Pi, click <Windows>, arrow down to Accessories, arrow right, arrow down to Terminal, enter.
Resizing the Raspbian image:
Once you are done with the setup, you are left with a total of 3,9GB on your image, which is full. To enlarge your Raspbian image, follow these steps on your Ubuntu machine:
Create a copy of your existing image:
$ cp <your-raspbian-jessie>.img rasbian.img
Run this command to resize your copy:
$ qemu-img resize raspbian.img +6G
Now start the original raspbian with enlarged image as second hard drive:
$ sudo qemu-system-arm -kernel ~/qemu_vms/<kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda ~/qemu_vms/<your-original-raspbian-jessie>.img -redir tcp:5022::22 -no-reboot -hdb raspbian.img
Login and run:
$ sudo cfdisk /dev/sdb
Delete the second partition (sdb2) and create a New partition with all available space. Once new partition is creates, use Write to commit the changes. Then Quit the cfdisk.
Resize and check the old partition and shutdown.
$ sudo resize2fs /dev/sdb2 $ sudo fsck -f /dev/sdb2 $ sudo halt
Now you can start QEMU with your enlarged image:
$ sudo qemu-system-arm -kernel ~/qemu_vms/<kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda ~/qemu_vms/raspbian.img -redir tcp:5022::22