openmoko: puesta en marcha


Hoy he leído casualmente una entrada de blog en donde se dan instrucciones precisas para instalar en Linux un entorno de desarrollo llamado openmoko, basado en un hardware virtualizado con un procesador ARM. Dado que estoy trabajando actualmente en el mundo de los sistemas embebidos y que la emulación es uno de los temas que me interesan me ha parecido una buena idea arremangarme y tratar de poner en marcha el sistema en mi vetusto Ubuntu Feisty. Sorprendentemente (o no) solamente he tardado veinte minutos …

En primer lugar me he bajado las fuentes del openmoko siguiendo las instrucciones del blog Ubuntu Life. Antes de eso me he tenido que instalar subversion (y subversion-tools y libsvn1) desde el Synaptic (sí, ya sé que hubiera sido igual de efectivo un apt-get), ya que no tenía el comando del cliente de subversion svn, necesario para ejecutar esta operación.

svn checkout https://svn.openmoko.org/trunk/src/host/qemu-neo1973

Tras un par de minutos se descargaron los aproximadamente 36 megas de código fuente. El siguiente paso era compilarlo todo. Pero antes había que asegurarse de que de lo hacía con la versión de compilador adecuada. Yo tenía instalada la versión gcc-4.1. Y necesitaba un compilador de la versión 3.x. Así que me instalé con el synaptic la gcc-3.4 (y gcc-3.4-base) Y de paso me instalé también el resto de paquetes que indican en el blog: libsdl1.2-dev, lynx, y netpbm. Tras esto se me encendió de nuevo la bombilla sobre la cabeza y me vino a la mente una palabra: qemu. Efectivamente, no lo tenía instalado. Así que recurrí a me querido synaptic, busqué con la clave qemu e instalé los paquetes necesarios (y algunos más): qemu, qemuctl, qemu-launcher, vgabios y kqemu-common.

Tras estos prolegómenos inicié el proceso:

cd qemu-neo1973
./configure –target-list=arm-softmmu –cc=/usr/bin/gcc-3.4
make

que me falló estrepitosamente ante la imposibilidad de encontrar una cabecera llamada zlib.h. Al instante comprendí que me faltaba un paquetillo más, que procedí a instalar (sí, con el synaptic): zlib (zlib1g y zlig1g-dev, siendo esta última la que contiene la cabecera faltante) Tras esto y algo más que un par de minutos se acabó la compilación con éxito. Era hora de bajarse los binarios y cargarlos en la NAND Flash virtual …

ubuntu@yerart:~/yo/temp/qemu-neo1973$ openmoko/download.sh
ubuntu@yerart:~/yo/temp/qemu-neo1973$ openmoko/flash.sh

con éxito total (sale un montón de información en pantalla que reproduzco en los comentarios de este artículo para no llenar de cosas que no pueden interesar en el artículo principal)

Y finalmente he ejecutado el comando que pone en marcha el emulador (es todo una línea, aunque aparezcan varias):

arm-softmmu/qemu-system-arm -M gta01 -m 130 -mtdblock openmoko/openmoko-flash.image -kernel openmoko/openmoko-kernel.bin -usb -show-cursor

La ventanita del emulador aparece, el procesador del portátil se pone al 100%, el ventilador se pone a girar y parece que va a despegar, y aparece un mensaje de boot con varias opciones.

pantalla de boot del emulador openmoko
pantalla de boot del emulador openmoko

Intento moverme con las teclas de cursor pare elegir el boot pero no consigo nada. Al par de minutos se me cierra la ventana. En el terminal de bash aparecen todos estos mensajes:

neo_gsm_switch: GSM disabled.
pcf_write: charging in Qualification Mode.
pcf_write: charge voltage 4.20V.
neo_lcd_rst_switch: LCD reset.
jbt6k74_command: Display on.
neo_vib_switch: Buzz, buzz.
neo_vib_switch: Vibrator stopped.
neo_bl_switch: LCD Backlight now on.
pcf_write: Power-off requested.

Tras intentarlo de nuevo y descubrir de forma intuitiva que con la tecla intro se mueve uno entre las opciones y con la tecla espacio se selecciona consigo arrancar el sistema (qtopia)

sistema arrancando el entorno gráfico
sistema arrancando el entorno gráfico

y ponerme en el menu principal.

primera pantalla tras el arranque del sistema
primera pantalla tras el arranque del sistema

En la pantalla se indica No Network. Este es el log que me ha salido en la pantalla del terminal desde el que he arrancado el emulador:

usb -show-cursor
neo_gsm_switch: GSM disabled.
pcf_write: charging in Qualification Mode.
pcf_write: charge voltage 4.20V.
neo_lcd_rst_switch: LCD reset.
jbt6k74_command: Display on.
neo_vib_switch: Buzz, buzz.
neo_vib_switch: Vibrator stopped.
neo_bl_switch: LCD Backlight now on.
s3c_timers_write: Bad register 0x40
neo_bl_intensity: LCD Backlight now at 20/64.
s3c_adc_write: Bad register 0x8
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
s3c_mmci_writew: Bad register 0x38
neo_bl_intensity: LCD Backlight now at 9/64.
neo_bl_intensity: LCD Backlight now at 15/64.

Le doy a uno de los botones (no me acuerdo si es la estrella) y me voy al teclado de números de marcado. Pone un mensaje de esperar un momento pero aparte de marcar los números no veo ninguna otra reacción.

teclado numérico del emulador openmoko
teclado numérico del emulador openmoko

Al darle al back me voy a una pantalla con el icono de una casa y la leyenda Home. En opciones aparece solamente la ayuda.

pantalla de home del emulador de openmoko
pantalla de home del emulador de openmoko

Si le doy otra vez a back me voy al Main Menu donde se encuentran toda la pléyade de iconos.

main menu en el emulador openmoko
main menu en el emulador openmoko

Pero no siempre es así y me muevo del teclado de números (ocasionalmente me pone running en la parte de arriba) a la pantalla de Home y no vuelvo a conseguir el Main Menu. ¿Cómo salgo de este bucle infinito? No sé como apagar estoooo …. En fin, cierro la ventana y ya está. Seguiremos experimentando.

5 comentarios en “openmoko: puesta en marcha

  1. Tal y como prometí voy a poner el chorreo de mensajes que me salieron al ejecutar los comandos para obtener y cargar el binario del sistema en la NAND Flash virtual del emulador.

    En primer lugar, al ejecutar openmoko/download.sh (que baja el binario desde el sitio de openmoko) me salió todo esto:

    Retrieving available builds list…
    Trying alternative sources
    Kernel is… uImage-2.6.24+svnr4301-r4251-r5-om-gta01.bin
    Root filesystem is… Openmoko-openmoko-qtopia-image-glibc-ipk-P1-Snapshot-20080721-om-gta01.rootfs.jffs2
    U-boot is… u-boot-gta01bv4-1.3.1+svnr4297+gitb29661fc1151077776454288051bc9a488351ce8-r3.bin
    –21:01:48– http://buildhost.automated.it/OM2007.2/uImage-2.6.24+svnr4301-r4251-r5-om-gta01.bin
    => `uImage-2.6.24+svnr4301-r4251-r5-om-gta01.bin’
    Resolving buildhost.automated.it… 87.117.198.17
    Connecting to buildhost.automated.it|87.117.198.17|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 1,763,156 (1.7M) [application/octet-stream]

    100%[====================================>] 1,763,156 106.02K/s ETA 00:00

    21:02:04 (108.25 KB/s) – `uImage-2.6.24+svnr4301-r4251-r5-om-gta01.bin’ saved [1763156/1763156]

    –21:02:04– http://buildhost.automated.it/OM2007.2/Openmoko-openmoko-qtopia-image-glibc-ipk-P1-Snapshot-20080721-om-gta01.rootfs.jffs2
    => `Openmoko-openmoko-qtopia-image-glibc-ipk-P1-Snapshot-20080721-om-gta01.rootfs.jffs2′
    Resolving buildhost.automated.it… 87.117.198.17
    Connecting to buildhost.automated.it|87.117.198.17|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 38,387,712 (37M) [text/plain]

    100%[====================================>] 38,387,712 103.01K/s ETA 00:00

    21:08:01 (105.14 KB/s) – `Openmoko-openmoko-qtopia-image-glibc-ipk-P1-Snapshot-20080721-om-gta01.rootfs.jffs2′ saved [38387712/38387712]

    –21:08:01– http://buildhost.automated.it/OM2007.2/u-boot-gta01bv4-1.3.1+svnr4297+gitb29661fc1151077776454288051bc9a488351ce8-r3.bin
    => `u-boot-gta01bv4-1.3.1+svnr4297+gitb29661fc1151077776454288051bc9a488351ce8-r3.bin’
    Resolving buildhost.automated.it… 87.117.198.17
    Connecting to buildhost.automated.it|87.117.198.17|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 218,884 (214K) [application/octet-stream]

    100%[====================================>] 218,884 101.28K/s

    21:08:04 (101.12 KB/s) – `u-boot-gta01bv4-1.3.1+svnr4297+gitb29661fc1151077776454288051bc9a488351ce8-r3.bin’ saved [218884/218884]

    Retrieving position

    Now use openmoko/flash.sh to install OpenMoko to NAND Flash.

    Y finalmente al ejecutar el comando openmoko/flash.sh (que carga de forma efectiva el binario en la flash) me salió todo esto:

    /usr/bin/pngtopnm
    /usr/bin/ppmtorgb3
    wget http://svn.openmoko.org/trunk/src/host/splash/splashimg.pl
    –21:48:21– http://svn.openmoko.org/trunk/src/host/splash/splashimg.pl
    => `splashimg.pl’
    Resolving svn.openmoko.org… 88.198.160.205
    Connecting to svn.openmoko.org|88.198.160.205|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 2,301 (2.2K) [text/plain]

    100%[====================================>] 2,301 –.–K/s

    21:48:21 (698.22 KB/s) – `splashimg.pl’ saved [2301/2301]

    chmod 0755 splashimg.pl
    wget http://wiki.openmoko.org/images/c/c2/System_boot.png
    –21:48:21– http://wiki.openmoko.org/images/c/c2/System_boot.png
    => `System_boot.png’
    Resolving wiki.openmoko.org… 88.198.93.221
    Connecting to wiki.openmoko.org|88.198.93.221|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 46,258 (45K) [image/png]

    100%[====================================>] 46,258 73.44K/s

    21:48:22 (73.27 KB/s) – `System_boot.png’ saved [46258/46258]

    [ -x splashimg.pl ]
    [ -s System_boot.png ]
    ./splashimg.pl System_boot.png > splash
    480 x 640 (255)
    gzip -c splash.gz
    Using ‘uImage-2.6.24+svnr4301-r4251-r5-om-gta01.bin’ as the kernel image.
    Using ‘Openmoko-openmoko-qtopia-image-glibc-ipk-P1-Snapshot-20080721-om-gta01.rootfs.jffs2’ as the root filesystem image.
    Using ‘u-boot-gta01bv4-1.3.1+svnr4297+gitb29661fc1151077776454288051bc9a488351ce8-r3.bin’ as bootloader.
    # Making an empty/erased flash image. Need a correct echo behavior.
    echo -en \377\377\377\377\377\377\377\377 > .8b
    cat .8b .8b > .16b # OOB is 16 bytes
    cat .16b .16b .16b .16b .16b .16b .16b .16b > .512b
    cat .16b .16b .16b .16b .16b .16b .16b .16b >> .512b
    cat .16b .16b .16b .16b .16b .16b .16b .16b >> .512b
    cat .16b .16b .16b .16b .16b .16b .16b .16b >> .512b
    cat .512b .16b > .sec # A sector is 512 bytes of data + OOB
    cat .sec .sec .sec .sec .sec .sec .sec .sec > .8sec
    cat .8sec .8sec .8sec .8sec .8sec .8sec .8sec .8sec > .64sec
    cat .64sec .64sec .64sec .64sec .64sec .64sec .64sec .64sec > .512sec
    cat .512sec .512sec .512sec .512sec > .2ksec
    cat .2ksec .2ksec .2ksec .2ksec .2ksec .2ksec .2ksec .2ksec > .16ksec
    # Neo NAND is 128k sectors big
    cat .16ksec .16ksec .16ksec .16ksec .16ksec .16ksec .16ksec .16ksec > openmoko-flash.base
    rm -rf .8b .16b .512b .sec .8sec .64sec .512sec .2ksec .16ksec
    Please wait, programming the NAND flash…
    neo_gsm_switch: GSM disabled.

    U-Boot 1.3.2-rc2 (May 22 2008 – 01:06:44)

    I2C: ready
    DRAM: 128 MB
    NAND: Bad block table not found for chip 0
    Bad block table not found for chip 0
    64 MiB
    Video: 640x480x8 31kHz 59Hz
    USB: S3C2410 USB Deviced
    mtdparts variable not set, see ‘help mtdparts’
    mtdparts variable not set, see ‘help mtdparts’
    mtdparts variable not set, see ‘help mtdparts’
    mtdparts variable not set, see ‘help mtdparts’
    mtdparts variable not set, see ‘help mtdparts’
    pcf_write: charging in Qualification Mode.
    pcf_write: charge voltage 4.20V.
    neo_lcd_rst_switch: LCD reset.
    jbt6k74_command: Display on.
    neo_vib_switch: Buzz, buzz.
    neo_vib_switch: Vibrator stopped.
    neo_bl_switch: LCD Backlight now on.
    GTA01Bv4 #
    GTA01Bv4 #
    GTA01Bv4 # setenv dontask y
    GTA01Bv4 # nand createbbt
    Create BBT and erase everything ?
    Skipping bad block at 0x03ff0000
    Skipping bad block at 0x03ff4000
    Skipping bad block at 0x03ff8000
    Skipping bad block at 0x03ffc000

    Creating BBT. Please wait …Bad block table not found for chip 0
    Bad block table not found for chip 0
    Bad block table written to 0x03ffc000, version 0x01
    Bad block table written to 0x03ff8000, version 0x01

    GTA01Bv4 # setenv bootcmd ‘setenv bootargs ${bootargs_base} ${mtdparts}; bootm 0x30100000’
    GTA01Bv4 # setenv menu_1 ‘Set console to USB: setenv stdin usbtty; setenv stdout usbtty; setenv stderr usbtty’
    GTA01Bv4 # setenv menu_2 ‘Set console to serial: setenv stdin serial; setenv stdout serial; setenv stderr serial’
    GTA01Bv4 # setenv menu_3 ‘Power off: neo1973 power-off’
    GTA01Bv4 # setenv splashimage ‘nand read.e 0x36000000 splash 0x5000; unzip 0x36000000 0x33d00000 0x96000’
    GTA01Bv4 # setenv mtdids nand0=neo1973-nand
    GTA01Bv4 # #setenv mtdparts mtdparts=neo1973-nand:0x00050000(u-boot),0x00004000(u-boot_env),0x00208000(kernel),0x00010000(splash),0x039a4000(rootfs)
    Unknown command ‘#setenv’ – try ‘help’
    GTA01Bv4 # dynpart
    mtdparts mtdparts=neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash),0x03d1c000(rootfs)
    GTA01Bv4 # nand write.e 0x30100000 u-boot 0x35704

    NAND write: device 0 offset 0x0, size 0x35704

    Writing data at 0x35600 — 100% complete.
    218884 bytes written: OK
    GTA01Bv4 # dynenv set u-boot_env
    device 0 offset 0x40000, size 0x4000
    45 4e 56 30 – 00 00 04 00
    GTA01Bv4 # saveenv
    Saving Environment to NAND…
    Erasing Nand…Writing to Nand… done
    GTA01Bv4 # neo1973 power-off
    poweroff
    pcf_write: Power-off requested.
    openmoko/flash.sh: line 117: 23780 Terminated ( sleep $2; kill $pid; sleep 1; kill -KILL $pid ) (wd: ~/yo/temp/qemu-neo1973)
    Please wait, programming the NAND flash…
    neo_gsm_switch: GSM disabled.

    U-Boot 1.3.2-rc2 (May 22 2008 – 01:06:44)

    I2C: ready
    DRAM: 128 MB
    NAND: 64 MiB
    Found Environment offset in OOB..
    Video: 640x480x8 31kHz 59Hz

    NAND read: device 0 offset 0x244000, size 0x5000

    Reading data from 0x248e00 — 100% complete.
    20480 bytes read: OK
    Error: Bad gzipped data
    USB: S3C2410 USB Deviced
    In: serial
    Out: serial
    Err: serial
    pcf_write: charging in Qualification Mode.
    pcf_write: charge voltage 4.20V.
    neo_lcd_rst_switch: LCD reset.
    jbt6k74_command: Display on.
    neo_vib_switch: Buzz, buzz.
    neo_vib_switch: Vibrator stopped.
    neo_bl_switch: LCD Backlight now on.
    GTA01Bv4 #
    GTA01Bv4 #
    GTA01Bv4 # nand write.e 0x30100000 splash 0x5000

    NAND write: device 0 offset 0x244000, size 0x5000

    Writing data at 0x248e00 — 100% complete.
    20480 bytes written: OK
    GTA01Bv4 # neo1973 power-off
    poweroff
    pcf_write: Power-off requested.
    Please wait, programming the NAND flash…
    neo_gsm_switch: GSM disabled.

    U-Boot 1.3.2-rc2 (May 22 2008 – 01:06:44)

    I2C: ready
    DRAM: 128 MB
    NAND: 64 MiB
    Found Environment offset in OOB..
    Video: 640x480x8 31kHz 59Hz

    NAND read: device 0 offset 0x244000, size 0x5000

    Reading data from 0x248e00 — 100% complete.
    20480 bytes read: OK
    USB: S3C2410 USB Deviced
    In: serial
    Out: serial
    Err: serial
    pcf_write: charging in Qualification Mode.
    pcf_write: charge voltage 4.20V.
    neo_lcd_rst_switch: LCD reset.
    jbt6k74_command: Display on.
    neo_vib_switch: Buzz, buzz.
    neo_vib_switch: Vibrator stopped.
    neo_bl_switch: LCD Backlight now on.
    GTA01Bv4 #
    GTA01Bv4 #
    GTA01Bv4 # nand write.e 0x30100000 kernel 0x1ae754

    NAND write: device 0 offset 0x44000, size 0x1ae754

    Writing data at 0x1f2600 — 100% complete.
    1763156 bytes written: OK
    GTA01Bv4 # neo1973 power-off
    poweroff
    pcf_write: Power-off requested.
    openmoko/flash.sh: line 91: 23783 Terminated ( sleep $2; kill $pid; sleep 1; kill -KILL $pid )
    openmoko/flash.sh: line 125: 23786 Terminated ( sleep $2; kill $pid; sleep 1; kill -KILL $pid ) (wd: ~/yo/temp/qemu-neo1973)
    Please wait, programming the NAND flash…
    neo_gsm_switch: GSM disabled.

    U-Boot 1.3.2-rc2 (May 22 2008 – 01:06:44)

    I2C: ready
    DRAM: 128 MB
    NAND: 64 MiB
    Found Environment offset in OOB..
    Video: 640x480x8 31kHz 59Hz

    NAND read: device 0 offset 0x244000, size 0x5000

    Reading data from 0x248e00 — 100% complete.
    20480 bytes read: OK
    USB: S3C2410 USB Deviced
    In: serial
    Out: serial
    Err: serial
    pcf_write: charging in Qualification Mode.
    pcf_write: charge voltage 4.20V.
    neo_lcd_rst_switch: LCD reset.
    jbt6k74_command: Display on.
    neo_vib_switch: Buzz, buzz.
    neo_vib_switch: Vibrator stopped.
    neo_bl_switch: LCD Backlight now on.
    GTA01Bv4 #
    GTA01Bv4 #
    GTA01Bv4 # nand write.jffs2 0x30100000 rootfs 0x249c000

    NAND write: device 0 offset 0x2e4000, size 0x249c000

    Writing data at 0x277fe00 — 100% complete.
    38387712 bytes written: OK
    GTA01Bv4 # neo1973 power-off
    poweroff
    pcf_write: Power-off requested.
    openmoko/flash.sh: line 129: 23789 Terminated ( sleep $2; kill $pid; sleep 1; kill -KILL $pid ) (wd: ~/yo/temp/qemu-neo1973)
    ../qemu-img create -b openmoko-flash.base -f qcow2 openmoko-flash.image
    Formatting ‘openmoko-flash.image’, fmt=qcow2, backing_file=openmoko-flash.base, size=67584 kB

    All done.

    Read the qemu manual and use a commandline like the following to boot:
    $ arm-softmmu/qemu-system-arm -M gta01 -m 130 -mtdblock openmoko/openmoko-flash.image -kernel openmoko/openmoko-kernel.bin -usb -show-cursor

    Append ‘-snapshot’ to make the flash image read-only so that every
    time emulation starts in the original unmodified state.
    Use [Enter] for AUX button, [Space] for POWER.
    Append ‘-usbdevice keyboard’ to attach a standard keyboard.

    If you’ve configured qemu with –enable-phonesim (requieres Qt4 and
    a C++ toolchain), use the following commandline to run phonesim:
    $ (cd phonesim; LD_LIBRARY_PATH=lib ./phonesim -gui ../openmoko/neo1973.xml)&
    The GUI is optional. When phonesim is running, append
    ‘-serial tcp:localhost:12345’ to qemu invocation. Security
    note a la GLSA: phonesim listens on 0.0.0.0.

  2. hola…oye necesito una ayuda…soy nueva usando linux….necesito emular el openmoko para exponer en una clase..pero me quede varada en una parte de tu explicacion.
    cuando ejecute en una terminal la indicacion make..me bota la siguiente linea:
    carolina@carolina:~/qemu-neo1973$ make
    Makefile:3: config-host.mak: No existe el fichero ó directorio
    make: *** No hay ninguna regla para construir el objetivo `config-host.mak’. Alto.

    ya tiene intalado todo lo anterior a esa instruccion…
    te agradezco me responda lo antes posible

  3. Hola lina. ¿Qué distribución de Linux estás utilizando? ¿Has ejecutado el comando configure que hay antes del make? El fallo que te da se debe a que el comando make no encuentra las instrucciones para construir una parte de los binarios. Estas instrucciones se deberían encontrar en el fichero config-host.mak.

    Estos ficheros *.mak se suelen construir de forma automática en función de la configuración de la distribución Linux y del hardware sobre el que corre con el comando configure. Cuando se ejecuta este comando, suelen salir pon pantalla unas líneas de texto que indican todas las pruebas que se realiza y las respuestas que obtiene del sistema operativo, información que luego utiliza para para adaptar los ficheros *.mak.

  4. holas…ay logre qeu corriera…pero ahora me presenta otro problema…..en la pagian de arranque donde aparece boot….lo selecciono y de hay no pasa , vuelve y me carga la misma cosa….porfis necesito qu me hace falta…para que me funcione completamente

  5. Hola Lina, a mi me ha pasado lo mismo que a ti. Algunas veces cuando lo ejecutas se queda trabado en esa pantalla y en alguna otra, como la del teclado de números. No he experimentado lo suficiente como para saber porqué suceden esas cosas. Ten en cuenta que este software todavía no es muy estable.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s