Chociaż każdy może zakupić Raspberry Pi w całkiem niskiej cenie to czasem może zdarzyć się sytuacja, że zajdzie potrzeba emulacji tego mini komputerka na maszynie wirtualnej. Poniżej pokaże jak emulować Raspberry Pi na QEMU.

Instalacja QEMU

apt-get install qemu-system

Obraz img

Obraz jak zawsze można pobrać ze strony raspberrypi.org

Montowanie obrazu

Do pliku mount wklej poniższy skrypt, który zamontuje druga partycje z obrazu. Obraz img dla RPI ma zawsze dwie partycje boot i root.

Pamiętak o tym aby zamienić *.img na nazwę jeśli w katalogu masz więcej niż jeden obraz IMG.

#!/bin/bash
where=/mnt
for i in $(file *.img|gawk 'BEGIN {RS="startsector"} NR > 1 {
print $0*512}');do
    mount -o rw,offset=$i *.img $where
    where=/media
done
df

Odpal skrypt mount

root@host:/home/hdd/rpi-vm# ./mount
 Filesystem     1K-blocks      Used Available Use% Mounted on
 udev             8141260         0   8141260   0% /dev
 tmpfs            1631936     18108   1613828   2% /run
 /dev/dm-1      229350628 142183784  75493452  66% /
 tmpfs            8159676       304   8159372   1% /dev/shm
 tmpfs               5120         4      5116   1% /run/lock
 tmpfs            8159676         0   8159676   0% /sys/fs/cgroup
 /dev/sda1         240972    103448    125083  46% /boot
 tmpfs            1631936        64   1631872   1% /run/user/1000
 /dev/loop0         61384     20312     41072  34% /mnt
 /dev/loop1       6374456    896492   5190576  15% /media

Wyłącz linie w pliku: /media/etc/ld.so.preload
nano /media/etc/ld.so.preload

#/usr/lib/arm-linux-gnueabihf/libarmmem.so

Odmontuj obraz.

umount /media

Powiększanie obrazu

Aby można było pracować na systemie po uruchomieniu trzeba powiększyć partycje.

qemu-img resize 2016-02-26-raspbian-jessie-lite.img +5G
WARNING: Image format was not specified for '2016-02-26-raspbian-jessie-lite.img' and probing guessed raw.
 Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
 Specify the 'raw' format explicitly to remove the restrictions.
 Image resized.

Po takiej akcji już można odpalić system, do tego trzeba pobrać zmodyfikowany kernel, który leży normalnie na partycji boot.

git clone https://github.com/polaco1782/raspberry-qemu

Odpalamy pierwszy raz system przez QEMU
qemu-system-arm -kernel raspberry-qemu/kernel-qemu -cpu arm1176 -m 256 -M versatilepb -hda 2016-02-26-raspbian-jessie-lite.img -append „root=/dev/sda2 rootfstype=ext4”

Aby powiększyć partycję trzeba ją usunąć i dodać na nowo. Do tego należy użyć fdisk. Tą akcje robimy już na wirtualnym systemie.

Poniżej sekwencja wprowadzania komend w fdisk

fdisk /dev/sda
d
n
p
2
2 x enter
w

Po usunięciu i utworzeniu partycji na nowo. Trzeba zrestartować system.

reboot

Po uruchomieniu i zalogowaniu należy rozszerzyć system plików

resize /dev/sda2

Należy jeszcze usunąć wpis boot w fstabie i zamienić mmcblk na sda

nano /etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime,nodiratime  0       1

Tak ma wyglądać wpis:

nano /etc/fstab
proc            /proc           proc    defaults          0       0
/dev/sda2  /               ext4    defaults,noatime,nodiratime  0       1

 

Sieć, dostęp po www i ssh

Aby dostać się na port 22 i np. 80 maszyny wirtualnej należy zrobić taki wewnętrzny portforward przy pdpalaniu QEMU

ssh na porcie 8022, www na porcie 8080

qemu-system-arm -kernel raspberry-qemu/kernel-qemu -cpu arm1176 -m 256 -M versatilepb -hda 2016-02-26-raspbian-jessie-lite.img -append "root=/dev/sda2 rootfstype=ext4" -redir tcp:8022::22 -redir tcp:8080::80

Koniec

Mam nadzieje że ta któtka instrukcja pomoże wam szybko testować obrazy raspbiana dla RPI. Jak by co dawajcie znać w komentarzach.