Ex. 0
# [host] instalam git, vim și bridge-utils:
sudo apt install git vim wget bridge-utils
# [host] instalam toolchain-ul necesar pentru a cross-compila programe pentru RaspberryPi:
sudo apt install gcc-aarch64-linux-gnu
# [host] instalam QEMU:
sudo apt install qemu-user # Pentru user-mode emulation
sudo apt install qemu-system-aarch64 # Pentru system-mode emulation
sudo apt install qemu-utils # Pentru utilitare precum qemu-nbd
Ex. 1
# [host] aflam parametrul pentru placa Raspberry Pi
qemu-system-aarch64 -machine ? | grep raspi
# parametrul este '-machine raspi3b'
# [host] aflam parametrul pentru procesorul Cortex-A53
qemu-system-aarch64 -machine raspi3b -cpu ? | grep -i cortex
# parametrul este '-cpu cortex-a53'
Ex. 2
# [host] compilam pentru RaspberryPi
aarch64-linux-gnu-gcc -static hello.c -o hello
# [host] afisam informatiile despre continutul fisierului rezultat
file hello
# setul de instructiuni este ARM, 64 biti
# [host] rulam cu QEMU si emulam procesorul Cortex A53
qemu-aarch64 -cpu cortex-a53 ./hello
# [host] rulam direct
./hello
# va fi eroare, doar daca nu avem instalat qemu-user:
#
# cosmin@cosmin-ubuntu22:~/Downloads/debian$ ./hello
# bash: ./hello: cannot execute binary file: Exec format error
#
# Dar odata instalat qemu-user, QEMU se inregistreaza automat ca intrepretor pentru executabilele non-native
# pentru mai multe detalii vedeti documentatia acestui feature https://www.kernel.org/doc/Documentation/binfmt_misc.txt
Ex. 3
# [host] Downloadati imaginea de Debian pentru Raspbery Pi3b+
https://raspi.debian.net/tested/20220808_raspi_3_bookworm.img.xz
# [host] Extrageti imaginea de RPI3 cu:
xz -d $IMAGINE.xz
# [host] Urmam pasii din laborator:
student@ubuntu:~/debian$ sudo losetup --show -fP 20220808_raspi_3_bookworm.img
/dev/loop0
student@ubuntu:~/debian$ sudo mkdir /mnt/debian
student@ubuntu:~/debian$ sudo mount /dev/loop16p1 /mnt/debian
mount: /mnt/debian: special device /dev/loop16p1 does not exist.
student@ubuntu:~/debian$ sudo mount /dev/loop0p1 /mnt/debian
student@ubuntu:~/debian$ cp /mnt/debian/vmlinuz-5.18.0-3-arm64 .
student@ubuntu:~/debian$ cp /mnt/debian/initrd.img-5.18.0-3-arm64 .
cp /mnt/debian/bcm2837-rpi-3-b.dtb .
student@ubuntu:~/debian$ ls
20220808_raspi_3_bookworm.img bcm2837-rpi-3-b.dtb initrd.img-5.18.0-3-arm64 vmlinuz-5.18.0-3-arm64
student@ubuntu:~/debian$ sudo umount /mnt/debian
student@ubuntu:~/debian$ sudo losetup -d /dev/loop0
# [host] Facem resize la disk-ul de Debian ARM64
student@ubuntu:~/debian$ qemu-img resize 20220808_raspi_3_bookworm.img 4G
# [host] Porniti Qemu
qemu-system-aarch64 \
-machine raspi3b \
-kernel vmlinuz-5.18.0-3-arm64 \
-initrd initrd.img-5.18.0-3-arm64 \
-dtb bcm2837-rpi-3-b.dtb \
-sd 20220808_raspi_3_bookworm.img \
-append "console=ttyS1 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4" \
-nographic \
-serial null \
-serial stdio \
-monitor none
Ex. 4
# [host] Instalam masina virtuala de Debian
virt-install \
--name rpi3-qemu-si \
--arch aarch64 \
--machine virt \
--os-variant debian11 \
--boot kernel=vmlinuz-5.18.0-3-arm64,initrd=initrd.img-5.18.0-3-arm64,kernel_args="console=ttyAMA0 root=/dev/vda2 rw rootwait rootfstype=ext4" \
--vcpus 4 \
--nographic \
--feature acpi=off \
--disk 20220808_raspi_3_bookworm.img
# Daca nu merge cu --os-variant debian11, puteti incerca cu debian10
Ex. 5
# [host] Rulati "virsh edit rpi3-qemu-si"
# 8 procesoare
8
# 32GB RAM
33554432
33554432
Ex. 6
# [host] Înainte de realizarea configurațiilor de rețea, dezactivați conectarea automată din setările sistemului de operare (Settings → Network → Wired → Connect Automatically (off)) și puneți placa de rețea a mașinii virtuale Ubuntu in modul de NAT (Devices → Network → Network Settings). Dacă folosiți o rețea wired și nu vă merge cu NAT atunci setați pe modul Bridged Adapter.
# [host] Instalati libvirt-daemon-system pentru a ca virbr0 sa fie creat automat
sudo apt install libvirt-daemon-system
# [host] cream directorul /etc/qemu si fisierul /etc/qemu/bridge.conf:
sudo mkdir /etc/qemu
sudo vim /etc/qemu/bridge.conf
---> allow virbr0
# [host] rulam sistemul emulat cu interfata de retea legata la reteaua fizica
sudo qemu-system-aarch64 \
-machine raspi3b \
-kernel vmlinuz-5.18.0-3-arm64 \
-initrd initrd.img-5.18.0-3-arm64 \
-dtb bcm2837-rpi-3-b.dtb \
-sd 20220808_raspi_3_bookworm.img \
-append "console=ttyS1 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4" \
-device usb-net,netdev=net0 \
-netdev bridge,br=virbr0,id=net0 \
-nographic \
-serial null \
-serial stdio \
-monitor none
# [guest] test conectivitatea la internet
ping www.google.com
Ex. 7
# [host] copiem executabilul pe guest
scp hello pi@raspberrypi.local:
# [guest] rulam executabilul
./hello