Jak podłączyć kartę SD z systemem Raspberry Pi do komputera z systemem Linux i uruchomić system operacyjny w emulatorze?
Dlaczego VMWare nie działa?
Jakie są ograniczenia tej metody?
Powiązane: Emulacja na komputerze z systemem Windows
Jak podłączyć kartę SD z systemem Raspberry Pi do komputera z systemem Linux i uruchomić system operacyjny w emulatorze?
Dlaczego VMWare nie działa?
Jakie są ograniczenia tej metody?
Powiązane: Emulacja na komputerze z systemem Windows
Odpowiedzi:
Tak, jest to całkowicie możliwe. Jednak w rzeczywistości jest trochę inaczej niż myślisz.
Karta SD zawiera obraz systemu operacyjnego. I działa poprzez nadmuchanie tego obrazu, gdy urządzenie jest włączone.
Oczekuję, że już wiesz, że flashujesz ten obraz na kartę SD, aby stworzyć działający system. Jednak przed flashowaniem obrazu możesz się z nim pobawić za pomocą QEMU , który jest emulatorem procesora i pozwala nam emulować zestaw instrukcji ARM.
W ten sposób wszelkie zmiany dokonane w obrazie (instalacja, kompilacja itp.) Będą nadal dostępne po flashowaniu go na kartę SD.
Omówię teraz sposób użycia QEMU do załadowania obrazu. Będę demonstrować z obrazem Arch Linux, ale proces powinien być taki sam, niezależnie od tego.
Będziesz musiał nabyć QEMU dla swojego systemu. QEMU powinien mieć tylko jeden wymóg, aby urządzenia wejściowe działały, musisz mieć zainstalowany pakiet programistyczny SDL, który powinien być dostępny w menedżerze pakietów.
Zalecam pobranie pakietu za pomocą zwykłego menedżera pakietów:
Łuk :
sudo pacman -S sdl qemu
Ubuntu :
Nowsze wersje (od 14.04) mają pakiet:
sudo apt-get install qemu-system-arm
W przypadku starszych wersji:
sudo apt-get install libsdl-dev
sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install qemu-system
Samodzielne budowanie QEMU
Alternatywnie możesz samodzielnie zbudować QEMU. Jest to świetne, jeśli chcesz wypróbować nową wersję, ale może być powolna i być przygotowanym na wiele błędów podczas kompilacji! Pamiętaj, że jeśli budujesz QEMU z ich strony internetowej, musisz go skompilować do obsługi ARM. Najpierw sprawdź repozytoria dystrybucji. Można to zrobić w ten sposób;
mkdir rpi-emu && cd rpi-emu
wget http://wiki.qemu.org/download/qemu-1.1.0-1.tar.bz2
tar xvjf qemu-1.1.0-1.tar.bz2
cd qemu-1.1.0-1
./configure –target-list=arm-softmmu,arm-linux-user
make
sudo make install
Sprawdź, czy masz wsparcie ARM za pomocą:
qemu-system-arm --version
QEMU emulator version 1.0,1, Copyright (c) 2003-2008 Fabrice Bellard
Pracujemy z Arch Linux, więc będziemy używać obrazu Arch Arm. Ale zamień to na to, z czym chcesz pracować, a może masz już obraz. W takim przypadku pomiń ten krok.
wget http://anorien.csc.warwick.ac.uk/mirrors/raspberrypi.org/images/archlinuxarm/archlinuxarm-29-04-2012/archlinuxarm-29-04-2012.zip
unzip archlinuxarm-29-04-2012.zip
Aby QEMU działało, potrzebujemy również obrazu jądra (który byłby w pliku .img).
Uwaga: Nie sądzę, aby ten krok był konieczny dla Debiana. Ktoś proszę potwierdzić.
Na szczęście dostępne są prekompilowane obrazy i możesz użyć tego z tego miejsca ( bezpośrednie pobieranie ).
DO ZROBIENIA: Zademonstrować tutaj, jak skompilować obraz jądra?
Powinieneś teraz mieć:
Maszynę wirtualną można teraz uruchomić za pomocą następującego długiego polecenia:
qemu-system-arm -kernel zImage -cpu arm1176 -M versatilepb -serial stdio -append "root=/dev/sda2" -hda archlinuxarm-29-04-2012.img -clock dynticks
Zauważ, że dzięki tej metodzie będziesz mieć tylko kilkaset megabajtów pamięci (cokolwiek na obrazie jest zapasowe). Wirtualny dysk twardy można utworzyć, postępując zgodnie z instrukcją użytkownika QEMU .
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 27.05.2016, jądro wanilii
Skompiluj QEMU 2.9.0 ze źródła:
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`
Pobierz obraz i wyodrębnij z niego jądro i dts:
Pobierz obraz i rozpakuj go:
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
unzip 2016-05-27-raspbian-jessie.zip
Zamontuj drugi obraz partycji. Najprostszym sposobem jest:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
Działa to tylko z najnowszą losetup
wersją Ubuntu 16.04, innymi metodami na: https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576
Wyświetla to urządzenie pętli, np .:
/dev/loop0
więc robimy:
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
Biegać:
./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 \
;
Następnie możesz zalogować się do terminala wyświetlanego na terminalu hosta.
Obecne ograniczenia:
-M raspi2
został dodany w QEMU 2.6.0, a Ubuntu 16.04 ma tylko QEMU 2.5.0, więc musimy skompilować QEMU ze źródła. Ale to nie jest trudne.Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, zmodyfikowane jądro
Ta metoda wykorzystuje, -M versatilepb
który jest obecny w QEMU 2.5.0 Ubuntu 16.04.
Minusem jest to, że musisz pobrać zmodyfikowane jądro (patrz Emulowanie za pomocą Qemu: dlaczego dodatkowe jądro? ) I zmodyfikować obraz, aby był mniej reprezentatywny dla prawdziwego systemu.
Wybieramy, 4.4.12
ponieważ jest to wersja jądra na obrazie Raspbian.
Proces generowania tego obiektu blob jądra opisano w repozytorium pod adresem : https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
Dlaczego ten dodatkowy obraz jądra jest potrzebny: Emulacja za pomocą Qemu: dlaczego dodatkowe jądro?
Zmodyfikuj obraz Raspbian, jak wspomniano na stronie : https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulations-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Podsumowanie:
Zamontuj obraz tak, jak zrobiliśmy to dla -M raspi2
, ale użyj drugiej partycji zamiast pierwszej:
sudo mount /dev/loop0p2 /mnt/rpi
Edytuj obraz:
# 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
Biegać:
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
[nieudane] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 27.05.2016, jądro wanilii
W tym nowszym Ubuntu QEMU 2.8.0 jest domyślna, więc nie musimy kompilować QEMU ze źródła -M raspi2
. Jednak 2.8.0 zawiesza się przy starcie po komunikacie:
Console: switching to colour frame buffer device 100x30
To pokazuje, jak niestabilny -M raspi2
jest nadal.
[nieudane] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, jądro wanilii
Na tym nowszym obrazie, przy użyciu tej samej metody dla 27.05.2016, jądro wpada w panikę podczas rozruchu z:
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
RPI3 bare metal na QEMU
https://github.com/bztsrc/raspi3-tutorial to dobry zestaw przykładów, które działają tylko na QEMU, ultraszybkie rozpoczęcie pracy: Jak wykonać emulację QEMU dla nagich obrazów Raspberry Pi
Nie możesz zrobić tego, co sugerujesz, ponieważ Raspberry Pi ma inną architekturę procesorów niż większość komputerów. Podczas gdy większość komputerów PC jest oparta na architekturze x86, RPi jest komputerem opartym na ARM.
Jest to ten sam powód, dla którego nie można uruchomić na przykład Microsoft Windows na RPi.
VmWare nie będzie działać, ponieważ może wirtualizować tylko systemy operacyjne oparte na x86 (32-bitowe i 64-bitowe). Istnieją inne emulatory, które mogą wirtualizować ARM, takie jak QEMU, ale są one uruchomione w pełnej emulacji oprogramowania bez natywnej obsługi wirtualizacji procesora, więc można oczekiwać, że będą one działać bardzo wolno.
Możesz łatwo wypróbować symulator Raspberry Pi dołączony do czujnika, wiersza poleceń i edytora plików na iotify.io. Sprawdź naszą dokumentację na https://docs.iotify.io/, aby rozpocząć różne projekty, system operacyjny i zapoznać się ze środowiskiem pracy Raspberry Pi.