Simular Raspbian OS en QEMU para Windows

La virtualización de plataformas de desarrollo permite estudiar y experimentar con ambientes particulares de formas más económicas. En este caso construiremos un ambiente basado en procedores ARM y el sistema operativo Raspbian, para trabajar con dispositivos Raspberry Pi de forma virtual utilizando QEMU en Windows 10.

Para construir nuestro ambiente de trabajo, necesitamos primero descargar algunos recursos. Todos ellos se encuentran disponibles de forma gratuita gracias a sus autores y las comunidades de desarrollo de código abierto y libre que las desarrollan. La lista a continuación se basa en las últimas versiones disponibles al escribir esta guía, que son:

  • Una imagen de Raspbian OS, la versión más reciente basada en Debian Buster del 14 de febrero del 2020, disponible acá.
  • El emulador QEMU, la versión más reciente del 1ro de febrero del 2020, disponible acá.
  • Una copia del kernel Linux para el emulador, la versión 4.19.50 Buster, disponible acá.
  • También se debe descargar el archivo versatile-pb-buster.dtb que acompaña al kernel en el mismo enlace anterior.

Emulador QEMU

El instalador del emulador QEMU se puede utilizar para instalar el programa o para extraer las herramientas del emulador sin modificar el sistema operativo. En este ejercicio seguiremos la segunda opción, con el fin de poder utilizar diferentes versiones del emulador según lo pueda necesitar el usuario y poder copiar fácilmente la máquina virtual entre computadoras. De esta forma también tendremos un ambiente portable. Para realizar esto, se requiere una herramienta de descompresión capaz de leer los contenidos del instalador. 7-zip tiene esta capacidad, se puede descargar de este enlace.

Parar abrir y extraer el archivo instalador de QEMU con 7-zip, el método más fácil es dar click derecho sobre el archivo instalador y elegir la opción del menú contextual de 7-Zip que dice Extraer archivos..., donde se elige la ubicación para la extracción. Si el menú contextual no está disponible, se puede abrir directamente en 7-zip, esto es abriendo la aplicación desde el menú de programas, navegando a la ubicación del instalador descargado y presionando las teclas Ctrl + Av Pag.

Instalador de QEMU visualizado en el programa de compresión 7-zip

Para el ejemplo, QEMU será extraído en la carpeta qemu, dentro de la carpeta VMs, disponible en el disco D: de la computadora, esto es D:/VMs/qemu/. En esta misma carpeta también se deben colocar los archivos del kernel que se descargaron, sin aplicar modificaciones.

Para evitar un mensaje de error futuro, y para no instalar otras aplicaciones, si no usar el mínimo de herramientas portables necesarias, creamos un archivo vacío en la dirección [UbicaciónQEMU]/lib/gdk-pixbuf-2.0/2.10.0 con el nombre loaders.cache que puede ser un archivo de texto vacío renombrado al valor indicado. En nuestro ejemplo, el archivo sería D:/VMs/qemu/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache en su ubicación completa. Recuerde comprobar que el archivo no tiene extensiones adicionales.

Preparación de la imagen

Primeramente extraer la imagen del archivo compreso ZIP descargado. Con el que se consigue tener el archivo 2020-02-13-raspbian-buster-full.img o similar, dependiendo de la versión que se haya descargado (en todos los comandos debe asegurarse de utilizar el nombre correspondiente a su versión). Este último lo moveremos a la misma ubicación en donde se extrajo QEMU. Dado que el archivo compreso queda intacto, puede cuidarlo como un respaldo en caso que deba iniciar la configuración nuevamente o quiera tener más de un ambiente configurado.

El archivo descompreso tiene por extensión img. Este es un formato de respaldo para dispositivos de almacenamiento, en este particular es un respaldo en crudo o RAW. Esta imagen de Raspbian OS viene preparada para ser escrita en una memoria SD y expandir la partición a su tamaño máximo disponible la primera vez que se enciende un dispositivo con esta tarjeta como dispositivo de arranque. En nuestro ambiente emulado, no tenemos una tarjeta SD física, pero sí tenemos un dispositivo virtual al que está asociada la partición de almacenamiento virtual. Nuestro dispositivo es la imagen propiamente descargada, este es el dispositivo de almacenamiento principal que usará nuestro Raspberry Pi emulado.

En esta imagen hay espacio suficiente para contener la información de particiones, configuración de arranque y archivos del sistema operativo, con algo de espacio libre que le permita ejecutar con el mínimo de recursos. Para tener espacio para almacenar nuestros propios archivos, instalar nuevos programas y en general que el sistema operativo funcione correctamente, primero vamos a extender el espacio configurado en la imagen. Además que, opcionalmente, se puede cambiar el formato en crudo al formato QCOW2 de codificación que mejora la estabilidad del sistema. QEMU tiene una herramienta específica para gestionar este tipo de archivos, incluyendo modificaciones a su configuración. Le podemos agregar tanto espacio como sea requerido, pero posiblemente con 2-6 GB es suficiente en gran variedad de escenarios.

Vamos a ejecutar el comando:

qemu-img convert -f raw -O qcow2 [ImagenOriginal] [NuevaImagen]
qemu-img resize [NuevaImagen] +[CapacidadAgregada]

En nuestro ejemplo, como tenemos todos los archivos en la misma dirección, primeramente hay que ubicarse en la carpeta donde fueron extraídas las herramientas de QEMU, para lo cual se ejecutan los siguientes comandos:

cd D:\VMs\qemu\
qemu-img convert -f raw -O qcow2 2020-02-13-raspbian-buster-full.img raspbian-buster.qcow
qemu-img resize raspbian-buster.qcow +6G

Comandos de qemu-img para la imagen

Configuración de inicio

Para iniciar la máquina virtual, usamos el programa qemu-system-arm.exe. Como este programa requiere varios parámetros de arranque, vamos a crear un archivo de ejecución por lotes, para que esté el comando disponible cada vez que se utilice con solo un doble-click o una llamada sencilla en la línea de comandos. Este archivo puede crearse como un archivo txt vacío, que luego se cambia su extensión por bat. Un ejemplo, sería agregar al archivo raspbian-buster.bat un comando como el siguiente:

qemu-system-arm -kernel [KernelLinux] -drive "file=[NuevaImagen],index=0,media=disk,format=qcow" -append "root=/dev/sda2 panic=1 filesystem=ext4 rw" -cpu arm1176 -m 256 -M versatilepb -dtb [DTBKernelLinux] -no-reboot -netdev user,id=eth0,[OpcionesRed] -net nic,netdev=eth0 -serial stdio

 Modificando los parámetros con los de nuestro ejemplo, se vería de la siguiente forma:

qemu-system-arm -kernel kernel-qemu-4.19.50-buster -drive "file=raspbian-buster.qcow,index=0,media=disk,format=qcow2" -append "root=/dev/sda2 panic=1 filesystem=ext4 rw" -cpu arm1176 -m 256 -M versatilepb -dtb versatile-pb-buster.dtb -no-reboot -netdev user,id=eth0,hostfwd=tcp::22022-:22,hostfwd=tcp::59010-:5901 -net nic,netdev=eth0

Cada parámetro tiene un efecto importante que se puede revisar en la documentación de QEMU, pero en particular nos interesan las opciones de red, en las que se redireccionan puertos de la computadora local a la computadora virtual de forma que nos podamos comunicar con esta. En particular el puerto 22 se habilita para utilizar SSH y el 5901 para utilizar un escritorio virtual por medio de VNC. Más información en el artículo Configuración y optimización de Raspbian en QEMU.

No comments

Comentarios en artículos

No comments

Nobody has submitted a comment yet.