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