Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 27-05-2016, kernel vanilla
Passos:
Compile o QEMU 2.9.0 da fonte:
sudo apt-get build-dep qemu-system-arm
git clone --recursive git://git.qemu-project.org/qemu.git
cd qemu
git checkout v2.9.0
./configure
make `nproc`
Faça o download da imagem e extraia o kernel e o dts:
Baixe a imagem e descompacte-a:
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
unzip 2016-05-27-raspbian-jessie.zip
Monte a segunda imagem da partição. A maneira mais fácil é:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
Isso funciona apenas com as losetup
versões mais recentes do Ubuntu 16.04, outros métodos em: /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576
Isso imprime um dispositivo de loop, por exemplo:
/dev/loop0
assim fazemos:
sudo mkdir /mnt/rpi
sudo mount /dev/loop0p1 /mnt/rpi
cp /mnt/rpi/kernel7.img bcm2709-rpi-2-b.dtb .
sudo umount /mnt/rpi
sudo losetup -d /dev/loop0
Corre:
./arm-softmmu/qemu-system-arm \
-M raspi2 \
-append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2" \
-cpu arm1176 \
-dtb bcm2709-rpi-2-b.dtb \
-sd 2016-05-27-raspbian-jessie.img \
-kernel kernel7.img \
-m 1G \
-smp 4 \
-serial stdio \
;
Você pode fazer login no terminal exibido no terminal host.
Limitações atuais:
-M raspi2
foi adicionado no QEMU 2.6.0 e o Ubuntu 16.04 possui apenas o QEMU 2.5.0, portanto, precisamos compilar o QEMU a partir da fonte. Mas isso não é difícil.
- a GUI mostra, mas não está respondendo ao mouse / teclado, testado no SDL e no VNC. Porém, a CLI funciona perfeitamente. Então, você também pode usar a imagem Lite, que agora é GUI.
- sem rede
Ubuntu 16.04, QEMU 2.5.0, Raspbian 27/05/2016, kernel modificado
Este método usa o -M versatilepb
que está presente no QEMU 2.5.0 do Ubuntu 16.04.
A desvantagem é que você precisa fazer o download de um kernel modificado (consulte Emulando com o Qemu: por que o kernel extra? ) E modificar a imagem, para que seja menos representativo do sistema real.
Faça o download: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
Nós escolhemos 4.4.12
uma vez que essa é a versão do kernel na imagem Raspbian.
O processo para gerar esse blob do kernel está descrito no repositório em: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
Por que essa imagem extra do kernel é necessária: Emulando com o Qemu: por que o kernel extra?
Modifique a imagem Raspbian conforme mencionado em: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Resumo:
Monte a imagem da mesma maneira que fizemos para o -M raspi2
, mas use a segunda partição em vez da primeira:
sudo mount /dev/loop0p2 /mnt/rpi
Edite a imagem:
# Comment out the line present there with #
sudo vim /mnt/rpi/etc/ld.so.preload
# Comment out the lines of type: "/dev/mmcblk*"
sudo vim /mnt/rpi/etc/fstab
Corre:
sudo apt-get install qemu-system-arm
qemu-system-arm \
-kernel kernel-qemu-4.4.12-jessie \
-cpu arm1176 \
-m 256 \
-M versatilepb \
-no-reboot \
-serial stdio \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
-hda 2016-05-27-raspbian-jessie.img
[falhou] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 27-05-2016, kernel vanilla
Neste Ubuntu mais recente, o QEMU 2.8.0 é o padrão, portanto, não precisamos compilar o QEMU da fonte para -M raspi2
. No entanto, 2.8.0 trava na inicialização após a mensagem:
Console: switching to colour frame buffer device 100x30
Isso mostra o quão instável -M raspi2
ainda é.
[falhou] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 16/08/2017, kernel vanilla
Nesta imagem mais recente, usando o mesmo método para 27/05/2016, o kernel entra em pânico na inicialização com:
Please append a correct "root=" boot option; here are the available partitions:
...
[ 4.138114] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
bztsrc/raspi3-tutorial
Metal desencapado RPI3 em QEMU
https://github.com/bztsrc/raspi3-tutorial é um bom conjunto de exemplos que funcionam apenas no QEMU, iniciando com ultra-rápida em: Como fazer a emulação QEMU para imagens Raspberry Pi bare metal