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.img
od dobrych ludzi z Raspberry Pi.
Kiedy próbuję uruchomić qemu-system-arm
, wpadam w panikę jądra. Czy czegoś brakuje?
Oto qemu-system-arm
wiersz 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 <[email protected]>
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)
Odpowiedzi:
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.
źródło
Zapraszam do zapoznania się z moim jądrem z włączoną funkcją Qemu: https://github.com/diederikdehaas/raspbian-kernel
W wiadomościach zatwierdzających można znaleźć szczegółowe opisy tego, co i jak się zmieniło.
Większość z nich została oparta na tym artykule: https://web.archive.org/web/20131210001638/http://xecdesign.com/compiling-a-kernel/
źródło
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 27.05.2016, jądro wanilii
Kroki:
Skompiluj QEMU 2.9.0 ze źródła:
Pobierz obraz i wyodrębnij z niego jądro i dts:
Pobierz obraz i rozpakuj go:
Zamontuj drugi obraz partycji. Najprostszym sposobem jest:
Działa to tylko z najnowszymi
losetup
wersjami Ubuntu 16.04, innymi metodami pod adresem : /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576Wyświetla to urządzenie pętli, np .:
więc robimy:
Biegać:
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
W tej metodzie wykorzystuje
-M versatilepb
się 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.
Pobierz: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
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
Streszczenie:
Zamontuj obraz tak, jak zrobiliśmy to dla
-M raspi2
, ale użyj drugiej partycji zamiast pierwszej:Edytuj obraz:
Biegać:
[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:To pokazuje, jak niestabilny
-M raspi2
jest 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:
bztsrc/raspi3-tutorial
RPI3 bare metal na QEMUhttps://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
źródło
losetup
jest zbyt skomplikowana. Zamiast tego możesz po prostu użyćfdisk -l your-image.img
, a następnie użyć przesunięcia do partycji wmount
opcji-o loop,offset=$((512*YOUR_OFFSET))
.Większość przewodników jest nieaktualna i zawiera uszkodzone linki. Musisz użyć łatanego jądra, które pasuje do używanej wersji Raspbian.
Poniższy przewodnik działa od lutego 2017 r. Zawiera skrypt, który zajmuje się zmianą obrazu raspbian w celu uruchomienia na QEMU, a także automatycznie dzieli twoje połączenie sieciowe z raspbian.
https://ownyourbits.com/2017/02/06/raspbian-on-qemu-with-network-access/
źródło
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.
źródło
fstab
wpisy mmcblk.