jueves, 12 de febrero de 2015

Virtualizar una raspberry pi con raspbian en qemu (Ubuntu 14.04)

Mientras espero la llegada de una Rasberry Pi 2 que tengo pedida, puedo ir probando los sistemas para este cacharrito mediante un programa de virtualización que es completamente libre: qemu.

Raspberri Pi virtualizada con qemu en Ubuntu 14.04


¿Y como consigo esto? Siguiendo los pasos que describo a continuación:

Instalación de qemu

Lo podemos instalar desde el entorno gráfico usando el Centro de software o synaptic (buscando el paquete qemu-system-arm).
sudo apt-get install qemu-system-x86 qemu-system-arm aqemu

Preparación (raspbian)

  • Creamos la carpeta "raspberry_pi" en $HOME
  • Descargamos kernel-qemu y lo copiamos a la carpeta "raspberri_pi"
  • Descargamos la última versión de raspbian (o la distro que queramos probar) y lo copiamos también en la carpeta "raspberri_pi".
  • Lanzamos el emulador con un comando como éste:
qemu-system-arm -kernel $HOME/raspberry_pi/kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda $HOME/raspberry_pi/2015-01-31-raspbian.img
Esto ejecutará el sistema en modo monousuario y con el teclado en inglés, algo a tener en cuenta en los puntos siguientes.
  • Editamos el archivo /etc/ld.so.preload y le ponemos una almohadilla en la línea que hay para comentarla:
#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so
  • Añadimos las siguientes líneas al archivo /etc/udev/rules.d/90-qemu.rules :
KERNEL=="sda", SYMLINK+="mmcblk0"
KERNEL=="sda?", SYMLINK+="mmcblk0p%n"
KERNEL=="sda2", SYMLINK+="root"
  • Creamos un nuevo archivo /etc/X11/xorg.conf para tener al menos 800x600 de resolución:
Section "Screen"
Identifier "Default Screen"
SubSection "Display"
Depth 16
Modes "800x600" "640x480"
EndSubSection
EndSection
  • Salimos tecleando 'exit'

Ejecución normal

Para ejecutarlo tecleamos el siguiente comando:
qemu-system-arm -kernel $HOME/raspberry_pi/kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda $HOME/raspberry_pi/2015-01-31-raspbian.img
Al final nos tiene que salir la aplicación para configurar los parámetros del sistema o el login, si nos sale en su lugar un prompt con una almohadilla #, tecleamos exit para continuar.
Evidentemente lo más cómodo es hacer un script que lance este chorizaco, o ponerlo dentro de un acceso directo en el escritorio.

Otras consideraciones

  • Si cambias en el comando la memoria por 512 en lugar de 256 no funciona, así que deja 256.
  • También se puede virtualizar en otros sistemas operativos, simplemente haciendo lo que se describe aquí con la versión de qemu correspondiente.
  • Puedes montar la imagen descargada para inyectar o extraer archivos con el siguiente comando (lógicamente con la emulación parada):
sudo mount $HOME/raspberry_pi/2015-01-31-raspbian.img -o offset=62914560 /mnt

Fuentes e información adicional

4 comentarios:

  1. Muy buena idea para probar los sistemas antes de comprar. :)

    ResponderEliminar
  2. See http://blogduyax.madyanne.fr/emuler-la-raspbian-avec-qemu.html (on French sorry)

    ResponderEliminar
  3. Yo he conseguido virtualizar pero tengo un 88% ocupado en la memoria SD virtual y no puedo instalar casi nada, ¿cómo la puedo hacer más grande?

    Otro problema es que cuando arranca sale un error porque no encuentra el archivo /lib/modules/3.10.26+ y tengo que teclear exit para continuar el arranque.

    Uso Ubuntu 14.04 de 64 bits.

    He probado aumentar la partición dentro del disco duro una vez aumentado con estos comandos:
    sudo losetup -f --show 8graspi.img
    sudo gparted /dev/loop0

    Pero en las particiones me sale un icono de error y si miro la información dice que no puedo ver el contenido porque falta algunos paquetes por instalar que tengo instalados.

    ResponderEliminar
  4. Para pinchos wifi usb
    http://mitchtech.net/realtek-wireless-dongle-rt30on-the-raspberry-pi/

    ResponderEliminar