0. # [host] instalam git, vim și bridge-utils: sudo apt-get update sudo apt-get install git sudo apt-get install vim sudo apt-get install bridge-utils # [host] instalam toolchain-ul necesar pentru a cross-compila programe pentru RaspberryPi: git clone --depth=1 https://github.com/raspberrypi/tools.git export PATH="/home/osboxes/tools/arm-bcm2708/arm-linux-gnueabihf/bin:$PATH" # [host] instalam QEMU: sudo apt-get install qemu sudo apt-get install qemu-system-arm 1. # [host] aflam parametrul pentru placa Versatile PB qemu-system-arm -machine help | grep Versatile/PB # parametrul este '-machine versatilepb' # [host] aflam parametrul pentru procesorul ARM1176JZ-F qemu-system-arm -machine versatilepb -cpu help | grep arm1176 # parametrul este '-cpu arm1176' qemu-system-arm -machine versatilepb -cpu arm1176 2. # [host] compilam pentru RaspberryPi arm-linux-gnueabihf-gcc -static hello.c -o hello # [host] afisam informatiile despre continutul fisierului rezultat file hello # setul de instructiuni este ARM, 32 biti # [host] rulam cu QEMU si emulam procesorul ARM1176 qemu-arm -cpu arm1176 hello # [host] rulam direct ./hello # la instalare, 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 3. # [host] downloadam kernelul, rootfs-ul si device tree file-ul # [host] rulam distributia in QEMU sudo qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -drive "file=2021-05-07-raspios-buster-armhf-lite.img,if=none,media=disk,format=raw,id=disk0" -device "virtio-blk-pci,drive=disk0,disable-modern=on" -dtb qemu-rpi-kernel/versatile-pb-buster-5.4.51.dtb -kernel qemu-rpi-kernel/kernel-qemu-5.4.51-buster -append "root=/dev/vda2 panic=1" -no-reboot 4. # [host] rulam distributia cu o interfata seriala sudo qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -drive "file=2021-05-07-raspios-buster-armhf-lite.img,if=none,media=disk,format=raw,id=disk0" -device "virtio-blk-pci,drive=disk0,disable-modern=on" -dtb qemu-rpi-kernel/versatile-pb-buster-5.4.51.dtb -kernel qemu-rpi-kernel/kernel-qemu-5.4.51-buster -append "root=/dev/vda2 panic=1" -serial stdio -no-reboot # a aparut un al doilea ecran de login in terminalul din care am rulat QEMU (stdio) 5. # [host] rulam distributia cu -nographic sudo qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -drive "file=2021-05-07-raspios-buster-armhf-lite.img,if=none,media=disk,format=raw,id=disk0" -device "virtio-blk-pci,drive=disk0,disable-modern=on" -dtb qemu-rpi-kernel/versatile-pb-buster-5.4.51.dtb -kernel qemu-rpi-kernel/kernel-qemu-5.4.51-buster -append "root=/dev/vda2 panic=1" -nographic -no-reboot # output-ul de bootare apare doar in terminalul din care am dat comanda 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] cream si configuram bridge sudo brctl addbr virbr0 sudo brctl addif virbr0 sudo ip address flush dev sudo dhclient virbr0 # [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-arm -M versatilepb -cpu arm1176 -m 256 -drive "file=2021-05-07-raspios-buster-armhf-lite.img,if=none,media=disk,format=raw,id=disk0" -device "virtio-blk-pci,drive=disk0,disable-modern=on" -dtb qemu-rpi-kernel/versatile-pb-buster-5.4.51.dtb -kernel qemu-rpi-kernel/kernel-qemu-5.4.51-buster -append "root=/dev/vda2 panic=1" -no-reboot -nographic -net nic,model=smc91c111,netdev=bridge -netdev bridge,br=virbr0,id=bridge # verificam conectivitatea dintre guest si host. La acest exercitiu, cel putin asta ar trebui sa existe [guest] ping 7. # [geust] porinim serverul de ssh sudo raspi-config # [host] copiem executabilul pe guest scp hello pi@: # [guest] rulam executabilul ./hello