Estoy tratando de seguir varias guías en Internet para emular Raspberry Pi en mi máquina Fedora 22. He encontrado esta pregunta: Emular raspbian con QEMU y lo usé para encontrar kernel-qemu para agarrar un kernel. Lo descargué 2015-09-24-raspbian-jessie.img
de la buena gente de Raspberry Pi.
Cuando trato de correr qemu-system-arm
me da pánico en el núcleo. ¿Se me escapa algo?
Aquí está la qemu-system-arm
línea de comando que escribí:
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
Seguido por los mensajes del kernel:
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)
Respuestas:
Como @dastaan dijo, la versión del kernel debe coincidir con el archivo img. Estaba tratando de usar un archivo de imagen de versión de kernel 4.1 con un kernel 3.18.
Ahora que estoy usando la imagen adecuada, funciona.
¡Gracias!
Editar: Hacer que esto funcione es bastante sencillo: tome la imagen de https://github.com/dhruvvyas90/qemu-rpi-kernel/ , luego descargue la imagen de Raspian correspondiente que desee en https://www.raspberrypi.org/ descargas / raspbian / . Actualmente, Jessie y Wheezy están en ambos lugares, pero no hay garantía en el futuro de que el núcleo apropiado estará disponible en ese sitio de Github. En cualquier caso, no estaba tan impresionado con la velocidad, así que estoy buscando poner un Pi real en el puerto de red con cable de mi computadora portátil y alimentarlo a través de una batería auxiliar de teléfono celular de 5200 mAh, y usar VNC en la computadora portátil como una pantalla.
No conseguí que Jessie trabajara; ese era el problema: tenía un kernel de Wheezy y una imagen de Jessie, pero no tenía un kernel de Jessie.
fuente
Siéntase libre de echar un vistazo a mi núcleo habilitado para qemu: https://github.com/diederikdehaas/raspbian-kernel
En los mensajes de confirmación puede encontrar descripciones detalladas sobre qué y cómo se cambiaron las cosas.
La mayor parte se basó en este artículo: https://web.archive.org/web/20131210001638/http://xecdesign.com/compiling-a-kernel/
fuente
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, núcleo de vainilla
Pasos:
Compile QEMU 2.9.0 de la fuente:
Descargue la imagen y extraiga el kernel y dts de ella:
Descarga la imagen y descomprímela:
Monta la segunda imagen de la partición. La forma más fácil es:
Esto solo funciona con lo último
losetup
en Ubuntu 16.04, otros métodos en: /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576Esto imprime un dispositivo de bucle, por ejemplo:
entonces hacemos:
Correr:
Luego puede iniciar sesión en el terminal que se muestra en su terminal host.
Limitaciones actuales:
-M raspi2
se agregó en QEMU 2.6.0, y Ubuntu 16.04 solo tiene QEMU 2.5.0, por lo que tenemos que compilar QEMU desde la fuente. Pero esto no es difícil.Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, kernel modificado
Este método utiliza el
-M versatilepb
que está presente en QEMU 2.5.0 de Ubuntu 16.04.La desventaja es que debe descargar un kernel modificado (consulte Emulación con Qemu: ¿por qué el kernel adicional? ), Y modificar la imagen, por lo que es menos representativo del sistema real.
Descargar: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
Elegimos
4.4.12
ya que esa es la versión del kernel en la imagen Raspbian.El proceso para generar esa gota de kernel se describe en el repositorio en: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
¿Por qué se necesita esta imagen de kernel adicional? Emulación con Qemu: ¿por qué el kernel adicional?
Modifique la imagen Raspbian como se menciona en: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Resumen:
Monte la imagen tal como lo hicimos para el
-M raspi2
, pero use la segunda partición en lugar de la primera:Edita la imagen:
Correr:
[fallido] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, núcleo de vainilla
En este Ubuntu más nuevo, QEMU 2.8.0 es el predeterminado, por lo que no necesitamos compilar QEMU desde la fuente
-M raspi2
. Sin embargo, 2.8.0 se bloquea en el arranque después del mensaje:Esto demuestra que
-M raspi2
aún es inestable .[fallido] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, núcleo de vainilla
En esta imagen más nueva, usando el mismo método para 2016-05-27, el núcleo entra en pánico al arrancar con:
bztsrc/raspi3-tutorial
RPI3 metal desnudo en QEMUhttps://github.com/bztsrc/raspi3-tutorial es un buen conjunto de ejemplos que simplemente funcionan en QEMU, comenzando ultra rápido en: Cómo hacer la emulación QEMU para imágenes de Raspberry Pi de metal desnudo
fuente
losetup
es demasiado complicado. En su lugar, solo puede usarfdisk -l your-image.img
, y luego usar el desplazamiento de la partición en lamount
opción-o loop,offset=$((512*YOUR_OFFSET))
.La mayoría de las guías están desactualizadas y contienen enlaces rotos. Debe usar un núcleo parcheado que coincida con la versión raspbian que está usando.
La siguiente guía funciona a partir de febrero de 2017. Cuenta con un script que se encarga de cambiar la imagen raspbian para que se ejecute en QEMU, y también comparte su conexión de red con raspbian automáticamente.
https://ownyourbits.com/2017/02/06/raspbian-on-qemu-with-network-access/
fuente
Puede descargar mi kernel personalizado (4.1.7) para Raspbian Jessie en mi github, polaco1782 . Siga las instrucciones en los archivos doc.
fuente
fstab
las entradas mmcblk.