Instalando la maquina virtual y emulando el Raspberry Pi (en Qemu)
primeros pasos
Ha llegado la hora de ponernos manos al tema. Como aún le falta un poco de camino a mi Raspberrypi, voy a usar una maquina virtual en Qemu, para ir probando programillas, configuraciones y esas cosas. Al lioComo soy un poco vago, he seguido las instrucciones de este blog. He cambiado algunas cosas que os pongo a continuación.
En mi caso voy a arrancar Qemu en un equipo con Ubuntu, estos son los pasos que he seguido:
mkdir -p /usr/src/qemu cd /usr/src/qemu
Y ahora bajamos la versión más estable de Qemu y compilamos:
wget http://wiki.qemu.org/download/qemu-1.0.tar.gz tar xzvf qemu-1.0.tar.gz cd qemu-1.0 ./configure --target-list=arm-softmmu,arm-linux-user make sudo make install
A mi no me molestaron las dependencias, supongo que tengo el 99% de los paquetes disponibles instalados :) Si te da algún problema, no dudes en consultarme.
Lo siguiente es descargar el kernel que vamos a usar para arrancar la imagen del RaspberryPi:
mkdir ~/rpi cd ~/rpi wget http://unicorn.drogon.net/rpi/zImage
y ahora bajamos desde este enlace, la imagen de Debian que tan amablemente nos han preparado los chicos del RaspberryPi. Os recomiendo el .torrent, baja en 2 minutos. Descomprimimos:
unzip Debian-descargado.zipArrancamos a continuación Qemu y le indicamos los parámetros necesarios:
qemu-system-arm -M versatilepb -cpu arm1176 -m 192 -hda debian6-19-04-2012.img -kernel zImage -append "root=/dev/sda2" -serial stdio -redir tcp:2222::22
Esto nos abre una ventanita nueva, donde veremos como va arrancando nuestro sistema Debian:
Cuando te aburras de esperar (como me pasó a mi), te darás cuenta que en la ventana del Qemu sale un mensaje que pone algo como "siéntete libre de cerrar esta sesión". Solo pasa la primera vez, supongo que despliega el árbol de directorio y hace las primeras configuraciones, cierralo. Ahora si, volvemos a arrancar la máquina virtual, ahora con un par de parámetros extra:
qemu-system-arm -M versatilepb -cpu arm1176 -m 192 -hda debian6-19-04-2012.img -kernel zImage -append "root=/dev/sda2" -serial stdio -redir tcp:2222::22 -nographic -curses
Esperamos unos segundos y ¡¡LISTO!! ya tenemos nuestro sistema Debian tuneado para el RaspberryPi:
Debian GNU/Linux 6.0 raspberrypi ttyAMA0 raspberrypi login:
El usuario es "pi" y la clave es "raspberry" POR FAVOR cámbiala:
pi@raspberrypi:~$sudo su root@raspberrypi:/home/pi# passwd pi Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully root@raspberrypi:/home/pi# passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Claves cambiadas, ahora vamos a cambiarle el nombre a la maquina:
root@raspberrypi:/home/pi# vim /etc/hostname bash: vim: command not found
Vaya tela ... instalamos el vim entonces:
root@raspberrypi:/home/pi# apt-get install vim
Y ahora editamos los siguientes archivos, cambiando el nombre al que más nos guste, en mi caso rsspi:
root@raspberrypi:/home/pi# vim /etc/hostname root@raspberrypi:/home/pi# vim /etc/hostsPara probar lo que llevamos, reiniciamos:
root@raspberrypi:/home/pi# reboot
Debian GNU/Linux 6.0 rsppi ttyAMA0 rsppi login:¡¡Perfecto!!. Para hacer las primeras configuraciones, me gusta llevar controlados (más o menos) los paquetes que tiene instalado, para ver los paquetes instalados en una distribución basada en Debian:
dpkg -l
Y pufffff, queda un poco ridículo tener una pantalla tan grande y que se vea todo en un cachito ¿verdad?, ajustamos:
export COLUMNS=157 export LINES=57 export ROWS=157 reset && clearVeamos ahora la lista de paquetes instalados:
dpkg -l | grep ^ii
Muchos, demasiados, voy a empezar borrando todos los referentes al servidor x (entorno gráfico), mi RaspberryPi será 100% por consola (aunque seguro que vuelvo a reinstalar la mitad de los paquetes). Para ser veloz como un juanker de las pelis, usaré un poco de magia:
aptitude remove $(echo $(dpkg -l | grep ^ii | grep -e x11 -e xserver | awk '{ print $2 }'))
Seguro que aquí mi amigo Javi lo haría más eficiente, pero ¡oye! es una sola línea.
Bueno pues ya tenemos nuestra imagen limpia, tuneada y lista para hacer las primeras instalaciones. La idea es tener el archivo .img listo para volcar a una tarjeta SD cuando me llegue el Raspberry, a ver si me ahorro un poco de tiempo.
Hasta el siguiente post!.
Hola, estoy en la parte del configure, pero me da el siguiente error. ¿Que pasa?
ResponderEliminarroot@usuario-1011PX:/usr/src/qemu/qemu-1.0# ./configure .target-list=arm-softmmu,arm-linux-user
ERROR: unknown option .target-list=arm-softmmu,arm-linux-user
Hola, gracias por la observación, era un fallo, ya lo he corregido, la línea queda así:
Eliminar./configure -target-list=arm-softmmu,arm-linux-user
Acabo de probar de nuevo, pero me da de nuevo error. A lo mejor es por mi ordenador si en en el tuyo funxiona.
ResponderEliminarroot@usuario-1011PX:/usr/src/qemu/qemu-1.0# ./configure -target-list=arm-softmmu,arm-linux-user
ERROR: unknown option -target-list=arm-softmmu,arm-linux-user
Gracias de todos modos.
jeje, perdona, la linea es:
Eliminar./configure --target-list=arm-softmmu,arm-linux-user
Gracias por la correccion, ahora por lo menos el comando esta bien, pero me da otro error con zib.
Eliminarroot@usuario-1011PX:/usr/src/qemu/qemu-1.0# ./configure --target-list=arm-softmmu,arm-linux-user
Error: zlib check failed
Make sure to have the zlib libs and headers installed.
He mirado con aptitude search zlib que me salia, pero me salen un monton, ¿Cual debo instalar?
Gracias por tu atencion
necesitamos la libreria de desarrollo (development), buscamos con:
Eliminarapt-cache search zlib | grep dev
y mirando un poco los resultados, la que necesitamos es:
zlib1g-dev
Gracias de nuevo. Ahora me dice que compile algo, pero qemu no puede ser porque esto lo ago precisamente para compilarlo.
Eliminarroot@usuario-1011PX:/usr/src/qemu/qemu-1.0# ./configure --target-list=arm-softmmu,arm-linux-user
glib-2.0 required to compile QEMU
bienvenido al apasionante mundo de las compilaciones ;) ahora te esta pidiendo las librerias (lib) de desarrollo (development) de glib-2.0 Las buscamos con:
Eliminarapt-cache search glib | grep dev
y de entre el listado la que queremos es:
libglib2.0-dev
Puedes acelerar un poco el tema de las dependencias, si antes de compilar ejecutas:
apt-get build-dep qemu
pero es como hacer un poco de "trampas"
Muchas gracias, ya me funciona.
EliminarSiento haberte hecho perder el tiempo pero es la primera vez que compilo.
nada hombre, esperemos que no sea la última vez que compilas ;)
EliminarSiento molestarte de nuevo, pero al intentar arrancar qemu me da el siguiente error. Solo he cambiado debian por la imagen que me he descargado de raspbian.
Eliminarusuario@usuario-1011PX:~/.rpi$ qemu-system-arm -M versatilepb -cpu arm1176 -m 192 -hda 2012-07-15-wheezy-raspbian.img -kernel zImage -append "root=/dev/sda2" -serial stdio -redir tcp:2222::22
oss: Could not initialize DAC
oss: Failed to open `/dev/dsp'
oss: Reason: No such file or directory
oss: Could not initialize DAC
oss: Failed to open `/dev/dsp'
oss: Reason: No such file or directory
audio: Failed to create voice `lm4549.out'
zImage: No such file or directory
qemu: could not load kernel 'zImage'
parece que lo que te falla es la localización de los archivos ¿no? zImage es un archivo, tienes que descargarlo según las instrucciones que he puesto en el post. Mira a ver si lo as descargado en otro directorio o algo por el estilo.
EliminarBuenas tardes,
ResponderEliminarHe seguido tus pasos, solo que la versión de qemu que he instalado es la 1.2.1, no sé si he hecho mal...
El caso es que, después de instalar todas las dependencias que me ha ido pidiendo, he conseguido compilar qemu.
El problema lo tengo a la hora de arrancarlo:
------------------------------------------------------------------
# qemu-system-arm -M versatilepb -cpu arm1176 -m 192 -hda 2012-10-28-wheezy-raspbian.img -kernel zImage -append "root=/dev/sda2" -serial stdio -redir tcp:2222::22 -nographic -curses
Curses support is disabled
------------------------------------------------------------------
Le quito la opción "-curses" y:
------------------------------------------------------------------
# qemu-system-arm -M versatilepb -cpu arm1176 -m 192 -hda 2012-10-28-wheezy-raspbian.img -kernel zImage -append "root=/dev/sda2" -serial stdio -redir tcp:2222::22 -nographic
chardev: opening backend "stdio" failed
qemu: could not connect serial device to character backend 'stdio'
------------------------------------------------------------------
Le quito también la opción "-serial stdio" y:
------------------------------------------------------------------
# qemu-system-arm -M versatilepb -cpu arm1176 -m 192 -hda 2012-10-28-wheezy-raspbian.img -kernel zImage -append "root=/dev/sda2" -redir tcp:2222::22 -nographic
QEMU 1.2.1 monitor - type 'help' for more information
(qemu) QEMU 1.2.1 monitor - type 'help' for more information
(qemu)
oss: Could not initialize DAC
oss: Failed to open `/dev/dsp'
oss: Reason: No such file or directory
oss: Could not initialize DAC
oss: Failed to open `/dev/dsp'
oss: Reason: No such file or directory
audio: Failed to create voice `lm4549.out'
Uncompressing Linux... done, booting the kernel.
pflash_write: Unimplemented flash cmd sequence (offset 0000000000000000, wcycle 0x0 cmd 0x0 value 0xf000f0)
pflash_write: Unimplemented flash cmd sequence (offset 0000000000000000, wcycle 0x0 cmd 0x0 value 0xf0)
Debian GNU/Linux wheezy/sid rpi ttyAMA0
rpi login:
------------------------------------------------------------------
Parece que arranca, solo que al ponerle el usuario "pi" y password "raspberry", me ignora y me lo vuelve a pedir.
El usuario y la password son correctos, ya que esa imagen arrancada desde una Raspberry PI, funciona...
¿Me podrías echar una mano con esto?
Saludos y gracias,
Ramses
Un comentario a lo anterior, lo estoy montando sobre un VM OpenVZ con Debian 7.0.1:
ResponderEliminar# cat /etc/issue
Debian GNU/Linux wheezy/sid \n \l
Saludos,
Ramses
Hola, me ha salido todo casi a la primera (he tenido que cambiar el nombre del archivo debian6-19-04-2012.img, porque en la web han colgado una mas actual de nombre "2012-12-16-wheezy-raspbian.zip" y las correspondi4ntes lineas del comando qemu-system-arm), pero me surge el siguiente problema:
ResponderEliminarPero cuando estoy en el paso "Esperamos unos segundos y ¡¡LISTO!! ya tenemos nuestro sistema Debian tuneado para el RaspberryPi:", no me deja entrar con el usuario "pi" y su clave "raspberry", no me deja entrar, he probado tambien con el usuario "root" y clave "root", y tampoco. ¿sabes cual puede ser el problema?
hola, tiene que ser usuario pi y clave raspberry. Si no es esa, tiene que venir en alguna documentación adjunta. Si es raspbian, tiene que ser esa, seguro.
EliminarHola jsbsan,
ResponderEliminarEso es lo mismo que me pasa a mi, y que he comentado más arriba, que no me acepta el usuario y password de acceso, me pide continuamente la password de nuevo.
No he encontrado solución, por favor, si la encuentras, o alguien tiene alguna idea, que lo postee por aquí...
Saludos y gracias,
Ramses
Este comentario ha sido eliminado por el autor.
ResponderEliminarLlego tarde pero...
ResponderEliminarBajando la imagen del kernel de zImage del artículo, se me reproducía el error, no me logueaba.
$ qemu-system-arm -k es -M versatilepb -cpu arm1176 -m 192 -hda 2013-09-25-wheezy-raspbian.img -kernel zImage -append "root=/dev/sda2" -serial stdio -redir tcp:2222::22
Uncompressing Linux... done, booting the kernel.
Raspbian GNU/Linux 7 rpi ttyAMA0
rpi login: pi
Password:
Raspbian GNU/Linux 7 rpi ttyAMA0
rpi login: pi
Password:
Raspbian GNU/Linux 7 rpi ttyAMA0
rpi login:
Bajando una imagen de kernel de este site: http://xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way/
me ha funcionado a la primera.
El link a la imagen del kernel: http://xecdesign.com/downloads/linux-qemu/kernel-qemu
Lógicamente hay que cambiar el nombre del kernel al pasarlo como parámetro, o se renombra a zImage o se cambia el valor de '-kernel':
$ qemu-system-arm -k es -M versatilepb -cpu arm1176 -m 192 -hda 2013-09-25-wheezy-raspbian.img -kernel kernel-qemu -append "root=/dev/sda2" -serial stdio -redir tcp:2222::22
Uncompressing Linux... done, booting the kernel.
Raspbian GNU/Linux 7 (none) ttyAMA0
(none) login: pi
Password:
Linux (none) 3.2.0 #1 Sun Jan 29 03:14:15 CST 2012 armv6l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law