¿Cómo puedo conectar una tarjeta SD que contiene un sistema operativo Raspberry Pi a mi PC con Linux y arrancar el sistema operativo en un emulador?
¿Por qué no funciona VMWare?
¿Cuáles son las limitaciones de este método?
Relacionado: Emulación en una PC con Windows
Respuestas:
Sí, esto es completamente posible. Sin embargo, en realidad es un poco diferente a cómo estás pensando.
Preámbulo
La tarjeta SD contiene una imagen del sistema operativo. Y funciona al inflar esta imagen cuando el dispositivo está encendido.
Como espero que ya sepas, flasheas esta imagen en la tarjeta SD para crear un sistema de trabajo. Sin embargo, lo que puede hacer antes de flashear la imagen es jugar con ella usando QEMU , que es un emulador de procesador , y nos permite emular el conjunto de instrucciones ARM.
De esta manera, cualquier cambio que realice en la imagen (instalación, compilación, etc.) seguirá estando allí después de que lo actualice a la tarjeta SD.
Ahora le explicaré cómo usar QEMU para cargar la imagen. Voy a demostrar con la imagen de Arch Linux, pero el proceso debería ser el mismo independientemente.
Usando QEMU
Requisitos previos
Necesitará adquirir QEMU para su sistema. QEMU solo debe tener un requisito, para que los dispositivos de entrada funcionen, debe tener instalado el paquete de desarrollo SDL, que debe estar disponible desde su administrador de paquetes.
Recomiendo descargar el paquete usando su administrador de paquetes regular:
Arco :
Ubuntu :
Las versiones más recientes (desde 14.04) tienen un paquete para ello:
Para versiones anteriores:
Construyendo QEMU usted mismo
Alternativamente, puede construir QEMU usted mismo. ¡Esto es genial si quieres probar una nueva versión, pero puede ser lenta y estar preparada para muchos errores durante la compilación! Tenga en cuenta que si construye QEMU desde su sitio web, debe compilarse para soporte ARM. Así que primero revisa tus repositorios de distribución. Esto se puede hacer así;
Verifique que tiene soporte ARM con:
Obteniendo la imagen
Estamos trabajando con Arch Linux, por lo que utilizaremos la imagen de Arch Arm. Pero reemplace esto con lo que desee para trabajar, o tal vez ya tenga una imagen. En cuyo caso, omita este paso.
Para que QEMU funcione, también necesitamos la imagen del núcleo (que estaría dentro del archivo .img).
Afortunadamente, hay imágenes precompiladas disponibles, y puede usar la que está aquí ( descarga directa ).
Iniciando la VM
Ahora deberías tener:
La máquina virtual ahora se puede iniciar utilizando el siguiente comando de largo aliento:
fuente
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, núcleo de vainilla
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: https://askubuntu.com/questions/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 extra del núcleo? Emulación con Qemu: ¿por qué el núcleo 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 solo funcionan en QEMU, comenzando ultra rápido en: Cómo hacer la emulación de QEMU para imágenes Raspberry Pi de metal desnudo
fuente
No puede hacer lo que sugiere, porque Raspberry Pi tiene una arquitectura de procesador diferente a la de la mayoría de las PC. Si bien la mayoría de las PC están basadas en x86, RPi es una computadora basada en ARM.
Esta es la misma razón por la que no puede ejecutar, por ejemplo, Microsoft Windows en RPi.
VmWare no funcionará, porque solo puede virtualizar sistemas operativos basados en x86 (32 bits y 64 bits). Hay otros emuladores que pueden virtualizar ARM, como QEMU, pero están ejecutando una emulación de software completa sin soporte de virtualización de CPU nativa, por lo que puede esperar que sean bastante lentos.
fuente
Puede probar fácilmente un simulador Raspberry Pi incluido con sensor, línea de comando y editor de archivos en iotify.io. Consulte nuestra documentación en https://docs.iotify.io/ para comenzar con los diferentes proyectos, sistemas operativos y familiarizarse con el entorno de trabajo de Raspberry Pi.
fuente