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

6 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
  5. ¿Cómo podría configurar el wifi en Qemu?.
    Desearía usar el wifi que tiene instalado el portátil que uso.

    ResponderEliminar
    Respuestas
    1. ¿No te puedes conectar como si estuvieras conectado por cable?

      Eliminar