miércoles, 12 de febrero de 2014

Emular Hardware con Qemu -RaspberryPi-

Emular la Raspberry-pi, o practicamente cualquier máquina. 
En Linux
--
Todos para uno y uno para todos


No se puede correr el Sistema Operativo de una Raspberry Pi en un pc x86 corriente y moliente utilizando una simple máquina virtual como pudiera ser VirtualBox o VMWare, ya que la arquitectura del procesador de la RP es ARM y las maquinas virtuales “normales” solo permiten ejecutar un S.O. diseñado para la misma clase de procesador que tiene nuestra maquina.

Para poder hacer esto vamos a servirnos de Qemu, un programa que permite emular directamente el Hardware de practicamente cualquier maquina.

Haré la explicación trabajando con Ubuntu, pero debería ser similar para cualquier otro sistem linux... con las típicas diferencias dependiendo de la distribución (yum en lugar de apt-get y demás).

Empecemos:



Muchas de las cosas que voy a hacer ahora se podrían conseguir sin usar la terminal, pero... bueno, ya sabeis...

1) Abrimos una terminal. Para ello pulsamos las teclas Ctrl+Alt+t.

2) Navegamos hasta el escritorio. Mi sistema está en inglés así que donde pongo Desktop deberías escribir Escritorio si el vuestro está en español:

cd Desktop

3) Ahora creamos una nueva carpeta:

mkdir Raspberrypi

4) Y ponemos en ella la imagen del Sistema Operativo que queramos usar, en mi caso pondré Fedora-Remix-14, pero podeis usar el que querais (Raspbian, Archlinux, RMBC...). 
Para bajarte la imagen más nueva lo mejor es que uses el navegador que quieras; ve a la web oficial de Raspberry-pi, bajate la imagen y pegala en la carpeta que creaste.

5) Ahora vamos a instalar Git, una herramienta que utilizaremos para luego instalar y configurar Qemu más cómodamente.

sudo apt-get install git

6) Una vez instalado git entramos en nuestra carpeta Raspberrypi:

cd Raspberrypi/

7) E instalamos Qemu:

git clone git://git.linaro.org/qemu/qemu-linaro.git

8) Comprobamos que está en la carpeta todo lo que necesitamos:

ls

Deberíamos ver una carpeta llamada quemu y un .zip con la imagen del SO

9) Como vamos a utilizar Qemu para emular la RP no hace falta que consideremos otras configuraciones mas que la de ARM.

./configure --target-list=arm-softmmu

   9b) Si al realizar el paso anterior nos da este error

   zlib check failed
         Make sure to have the zlib libs and headers installed.

   Significa que no tenemos instaladas las librerías o c abeceras necesarias para construir Qemu. Si esto      pasa haz lo siguiente:
   
   sudo apt-get --no-install-recommends -y build-dep qemu
   sudo apt-get --no-install-recommends -y build-dep qemu
 
   Y repite el paso 9)

   9c) Si aparece un error diciendo algo sobre DTC

  ERROR: DTC not present. Your options:
  (1) Preferred: Install the DTC devel package
  (2) Fetch the DTC submodule, using:
  git submodule update --init dtc

   Es porque ubuntu parece que no soporta el paquete DTC devel. Intenté instalar device-tree-compiler      y libfdt-dev, pero no funcionó, asi que lo mejor es instalar el modulo que necesita Qemu con:

   git submodule update –init dtc

   Hazlo y repite el paso 9)


10) Ahora toca montarlo todo:

make

Si tu PC tiene varios procesadores puedes hacer que vaya un poco más rápido modificando un poco la orden:

make -j 8

Yo puse 8 porque mi PC tiene  8 procesadores, pero tu debes usar el numero que tengas.

11) Y ahora completamos la instalacion de Qemu.

sudo make install

12) Toca trabajar con la imagen. Empecemos descargando esta imagen del kernel preparada para Qemu. http://www.linuxleech.com/downloads/ y copiandola en nuestra carpeta Raspberrypi.


----A TRABAJANDO CON .IMG

A1) Hay que descomprimir la imagen:

gzip -d NOMBRE-DE-TU-ARCHIVO.img.gz

A2) Toca ahora crear un espacio de memoria. Esto puede tardar, asi que paciencia:

dd if=/dev/zero of=rootfs.ext3 count=6M

Escribiendo count=6M (6.000.000) obtenemos unos 3.2Gb, lo cual es suficiente, pero si quieres más espacio solo tienes que cambiarlo por un numero mayor

A3) Ahora hay que formatear el archivo que acabamos de crear usado ext3:

/sbin/mkfs.ext3 rootfs.ext3

A4) Vamos a crear un par de directorios para poder montar la imagen y rootfs.ext3:

mkdir original

mkdir final

A5) Necesitamos encontrar el offset del root file system de la imagen. Para ello:

fdisk -l NOMBRE-DE-TU-ARCHIVO.img

Te interesa el número marcado. (correspondiente al inicio del img2).

A6) Ahora podemos montar la imagen con:

sudo mount -o loop,offset=$[206848*512] raspberrypi-NOMBRE-DE-TU-ARCHIVO.img original

Nota que 206848 es el numero que buscamos antes, debes usar el tuyo.

A7) Es el momento de motnar el archivo que creamos antes.

sudo mount -o loop rootfs.ext3 final

A8) Tenemos que copiar el contenido de la imagen montada en original a final. Paciencia:

sudo cp original/* final -a

A9) Ahora que ya está hecho hay que desmontarlo todo:

sudo umount original

sudo umount final


---- B TRABAJANDO CON .ZIP (NOOBS)

NOOBS no viene como una imagen (.img). Cuando descargamos el SO para la Raspberry-pi nos encontremos con un .zip que, para usar con la RP, bastaría con descomprimir y pegar en la tarjeta SD previamente formateada.

B1) Tenemos que descomprimir el NOOBS, para ello:

cd ..

unzip NOMBRE-DE-TU-ARCHIVO.zip

B2) Toca ahora crear un espacio de memoria. Esto puede tardar, asi que paciencia:

dd if=/dev/zero of=rootfs.ext3 count=6M

Escribiendo count=6M (6.000.000) obtenemos unos 3.2Gb, lo cual es suficiente, pero si quieres más espacio solo tienes que cambiarlo por un numero mayor

B3) Hay que formatear el archivo que acabamos de crear usado ext3:

/sbin/mkfs.ext3 rootfs.ext3

B4) Tenemos que crear un directorio para poder montar el archivo que acabamos de crear:

mkdir final

B5) Es el momento de motnar el archivo que creamos antes.

sudo mount -o loop rootfs.ext3 final

Puedes comprobar que ha salido bien abriendo la carpeta y pulsando Ctrl+h. Debe haber una carpeta dentro llamada lost+found. Vuelve a pulsar Ctrl+h

B6) Ahora debes copiar todo el contenido que surgió al descomprimir NOOBS a Final

Volvemos al modo grafico. Abrelo, copialo todo y pegalo dentro de final

B7) Cuando se termine de copiar ya puedes desmontar final:

sudo umount final


Y ya debería estar todo listo. Ahora toca lanzar Qemu y rezar por que todo haya salido bien:

qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -hda rootfs.ext3 -kernel LLKImage -append "root=/dev/sda" -serial stdio -redir tcp:2255::22

Puedes usar otras configuraciones, pero esa es la de RP ver.A.

Fuente: 1

No hay comentarios:

Publicar un comentario