Emulacja na komputerze z systemem Linux

48

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

Alex L.
źródło
Czy to nie pytanie o wirtualizację zamiast pytania o emulację?
Zoot
1
Nie podoba mi się emulacja do edycji wirtualizacji ... czy możemy o tym porozmawiać?
Alex Chamberlain,
2
Podstawowym problemem jest to, że Pi ma procesor ARM, który jest niezgodny z x86, co VMWare wie, jak uruchomić. Potrzebujesz emulatora.
Thorbjørn Ravn Andersen
Zauważ, że wersja Debiana dostosowana do wielu funkcji Raspbian (w tym środowiska pulpitu PIXEL i większości aplikacji) jest dostępna do pobrania ze strony internetowej Raspberry Pi
angussidney

Odpowiedzi:

52

Tak, jest to całkowicie możliwe. Jednak w rzeczywistości jest trochę inaczej niż myślisz.


Preambuła

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.


Korzystanie z QEMU

Wymagania wstępne

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

Uzyskiwanie obrazu

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?

Uruchamianie maszyny wirtualnej

Powinieneś teraz mieć:

  • Plik img, który możesz zweryfikować za pomocą dostarczonego sha1 (zalecane).
  • Obraz jądra (zImage).
  • QEMU dla ARM.

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 .

Jivings
źródło
To więcej, o co mi chodziło - dzięki! To świetna odpowiedź
Alex L
@Alex Nie ma problemu, daj mi znać, jeśli potrzebujesz mnie do opracowania. Powiedz mi także, czy obraz Debiana działa, a my możemy dodać go do instrukcji, jeśli jest inny.
Jivings
Jest dość dokładna solucja tutaj
Alex L
@Alex To dobrze, nie widziałem tego.
Jivings
2
Drugi jest zamknięty, więc wszystko, co mogę zrobić, to głosować, aby ponownie otworzyć
Jivings
8

Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 27.05.2016, jądro wanilii

wprowadź opis zdjęcia tutaj

  1. 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`
    
  2. Pobierz obraz i wyodrębnij z niego jądro i dts:

    1. 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
      
    2. Zamontuj drugi obraz partycji. Najprostszym sposobem jest:

      sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
      

      Działa to tylko z najnowszą losetupwersją 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
      
  3. 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 raspi2został 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.
  • GUI pokazuje, ale nie reaguje na mysz / klawiaturę, testowane zarówno na SDL, jak i VNC. Jednak CLI działa idealnie. Więc równie dobrze możesz użyć obrazu Lite, który ma teraz GUI.
  • brak sieci

Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, zmodyfikowane jądro

Ta metoda wykorzystuje, -M versatilepbktó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.

  1. Pobierz: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie

    Wybieramy, 4.4.12ponieważ 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?

  2. 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:

    1. Zamontuj obraz tak, jak zrobiliśmy to dla -M raspi2, ale użyj drugiej partycji zamiast pierwszej:

      sudo mount /dev/loop0p2 /mnt/rpi
      
    2. 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
      
  3. 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 raspi2jest 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

Ciro Santilli
źródło
2
Koleś, jesteś świetny!
Subin
4

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.

Społeczność
źródło
3
Mógłbyś to trochę więcej informacji na temat jak emulować raspi na x86 (tj QEMU)? Właśnie na tym chciałem skupić się na tym pytaniu, chociaż wyjaśnienie jest mile widziane.
Alex L
3
Przepraszam, że głosowałem w dół, ale to nie wyjaśnia, jak osiągnąć to, czego potrzebuje pytający.
G-.
Z drugiej strony odnosi się do innych punktów pytania, których nie ma inna odpowiedź. Myślę, że twoje opinie są niezapisane (nie jest tak, że to pytanie również prowadzi)
3
Nawet bez natywnej obsługi virt, powolność jest dość względna, ponieważ prawdopodobnie wirtualizujesz na maszynie o wiele potężniejszej niż malinowa pi
Kenneth Wilke
0

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.

wprowadź opis zdjęcia tutaj

iotify
źródło
1
Chociaż technicznie jest to odpowiedź, dość wyraźnie korzystasz z naszej witryny do bezpłatnych reklam. Chociaż to, co oferujesz, może być bezpłatne, nadal nie jest w porządku. Dziękujemy za wkład w rozwój społeczności, ale prosimy o przeniesienie reklamy w inne miejsce.
Darth Vader
4
@DarthVader: Ponieważ plakat oznajmił, że są powiązani z produktem, i to odpowiada na pytanie, jestem skłonny nazwać go akceptowalnym.
Jacobm001