Nie można emulować Raspberry Pi przy użyciu Qemu: Kernel Panic


15

Próbuję śledzić różne przewodniki w Internecie, aby emulować Raspberry Pi na moim komputerze Fedora 22. Znalazłem to pytanie: Emulowanie raspbian za pomocą QEMU i użyłem go do znalezienia kernel-qemu, aby złapać jądro. Pobrałem 2015-09-24-raspbian-jessie.imgod dobrych ludzi z Raspberry Pi.

Kiedy próbuję uruchomić qemu-system-arm, wpadam w panikę jądra. Czy czegoś brakuje?

Oto qemu-system-armwiersz poleceń, który wpisałem:

qemu-system-arm -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -kernel kernel-qemu -appc=2 console=ttyAMA0 rw" -hda 2015-09-24-raspbian-jessie.img -net nic -net user,hostfwd=tcp::9999-:22

Następnie komunikaty jądra:

sd 0:0:0:0: [sda] Attached SCSI disk
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@fluxnic.net>
eth0: SMC91C11xFD (rev 1) at d089a000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mousedev: PS/2 mouse device common for all mice
TCP cubic registered
NET: Registered protocol family 17
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input1
EXT2-fs (sda2): error: couldn't mount because of unsupported optional features (244)
EXT4-fs (sda2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (sda2): recovery complete
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 8:2.
devtmpfs: mounted
Freeing init memory: 120K
Kernel panic - not syncing: Attempted to kill init!
[<c0032bec>] (unwind_backtrace+0x0/0xf0) from [<c03064dc>] (panic+0x58/0x170)
[<c03064dc>] (panic+0x58/0x170) from [<c0044054>] (do_exit+0x5d0/0x68c)
[<c0044054>] (do_exit+0x5d0/0x68c) from [<c004435c>] (do_group_exit+0x40/0xb0)
[<c004435c>] (do_group_exit+0x40/0xb0) from [<c004ed48>] (get_signal_to_deliver+0x1a8/0x378)
[<c004ed48>] (get_signal_to_deliver+0x1a8/0x378) from [<c002f124>] (do_signal+0x90/0x518)
[<c002f124>] (do_signal+0x90/0x518) from [<c002fa64>] (do_notify_resume+0x48/0x54)
[<c002fa64>] (do_notify_resume+0x48/0x54) from [<c002cc38>] (work_pending+0x24/0x28)

2
Próbowałeś emulować świszczący obraz? Jeśli jądro z nim współpracuje, musi to być jessie.
— dhruvvyas90,

O rany! Tak, gdy jądro nie pasuje do obrazu, wszystko się psuje! Obraz świszczący działa ... Dzięki.
— Mike S

Odpowiedzi:


4

Jak powiedział @dastaan, wersja jądra musi pasować do pliku img. Próbowałem użyć pliku obrazu wersji jądra 4.1 z jądrem 3.18.

Teraz, gdy używam właściwego obrazu, działa.

Dzięki!

Edycja: Uruchomienie tego jest dość proste: Chwyć obraz z https://github.com/dhruvvyas90/qemu-rpi-kernel/ , a następnie pobierz odpowiedni obraz Raspian, który chcesz na https://www.raspberrypi.org/ pliki do pobrania / raspbian / . Obecnie Jessie i Wheezy działają w obu miejscach, ale w przyszłości nie ma gwarancji, że odpowiednie jądro będzie dostępne na tej stronie Github. W każdym razie nie byłem pod takim wrażeniem szybkości, więc patrzę na umieszczenie prawdziwego Pi na przewodowym porcie sieciowym mojego laptopa i zasilenie go przez baterię pomocniczą 5200 mAh i używanie VNC na laptopie jako wyświetlacz.

Nie zmusiłem Jessie do pracy; to był problem - miałem jądro Wheezy i obraz Jessie, ale nie miałem jądra Jessie.


1
Czy możesz dodać szczegółową odpowiedź na pytanie, jak to rozwiązałeś, używając najnowszego jądra? Pomoże innym użytkownikom próbującym emulować jessie. Dzięki.
— dhruvvyas90

3
Próbowałem jądra Jessie i obrazu Jessie, a one nie działają z tym samym błędem. Jądro 4.1 ( github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/… ) i regularne jessie post z maja 2015 od Raspbian.
— Michael McGarrah,

Bez obrazy, ale nie ma czegoś takiego jak jądro Jessie. Z raspbian netinstaller możesz wybrać instalację wheezy lub jessie, aw obu przypadkach instalowane jest dokładnie to samo jądro.
— Diederik de Haas,

Chociaż prawdą jest, że jądra mają nazwy według wersji, moim problemem nie było pobranie raspbian netinstaller. Moim problemem było dopasowanie plików graficznych dobrych ludzi z Raspberry Pi do odpowiedniej wersji jądra. Mam nadzieję, że w przyszłości ludzie, którzy wpadną na to pytanie, przejrzą moje komunikaty o błędach i zdadzą sobie sprawę z ich problemów.
— Mike S

@MichaelMcGarrah sprawił, że zadziałało po przeczytaniu wiki tego repozytorium: raspberrypi.stackexchange.com/a/53993/33424 Musisz trochę poprawić obraz Raspbian.
— Ciro Santilli 新疆 改造 中心 法轮功 六四 事件


1

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

wprowadź opis zdjęcia tutaj

Kroki:

  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 najnowszymi losetupwersjami Ubuntu 16.04, innymi metodami pod adresem : /ubuntu/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

W tej metodzie wykorzystuje -M versatilepbsię oprogramowanie QEMU 2.5.0 systemu 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

    Streszczenie:

    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
    

[błąd] 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ślnym, 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.

[błąd] 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


Twoja metoda losetupjest zbyt skomplikowana. Zamiast tego możesz po prostu użyć fdisk -l your-image.img, a następnie użyć przesunięcia do partycji w mountopcji -o loop,offset=$((512*YOUR_OFFSET)).
— Ruslan

-M raspi2 nie działa
— zhaofeng-shu33


-1

Możesz pobrać moje niestandardowe jądro (4.1.7) dla Raspbian Jessie na mój github, polaco1782 . Postępuj zgodnie z instrukcjami dotyczącymi plików doc.


1
Twoje jądro wysyła mnie do monitu w trybie awaryjnym za każdym razem, gdy próbuję emulować. Zrobiłem tak, jak jest napisane w pliku read me. (Zobacz ostatni post na -> raspberrypi.org/forums/viewtopic.php?t=112259 ) Czy możesz edytować swoją odpowiedź, aby pokazać krok po kroku, co zmieniłeś w podstawowym obrazie jessie, aby działało. Przyda się innym użytkownikom, ponieważ teraz, gdy obraz jessie jest aktywny, coraz więcej użytkowników będzie emulować jessie na qemu. Z góry dziękuję.
— dhruvvyas90,

Czy możesz rozszerzyć swoją odpowiedź, aby wyjaśnić, co jest niestandardowe w twoim jądrze?
— Greenonline,

Udało mi się rozwiązać problem, komentując fstabwpisy mmcblk.
— dhruvvyas90

@Greenonline Ponieważ qemu nie obsługuje platformy Rpi, konieczne jest dostosowanie konfiguracji jądra w celu emulacji rpi na Qemu. Nie możesz po prostu wziąć jądra Rpi i sprawić, by działało po wyjęciu z pudełka.
— dhruvvyas90,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.