Openmoko Neo1973 GTA01B4: Primeros apuntes (es)

Submitted by kernel-labs on Sat, 2007-08-18 15:55.
Este pequeño tutorial nos muestra los pasos necesarios para poner en marcha nuestra unidad Neo1973 con rapidez. El objetivo es disponer de una unidad plenamente funcional para comenzar a investigar los recursos que nos ofrece.

Adquirir un sistema empotrado completo de estas características, es una extraordinaria oportunidad para adentrarnos en el mundo de los sistemas empotrados con Linux y a la vez participar en los inicios de este revolucionario concepto de un sistema completo open source.

El nombre: Neo1973

El nombre del teléfono es un guiño a la historia del teléfono móvil, concretamente a la primera llamada realizada por Martin Cooper de Motorola en 1973. De ahí la palabra griega -neo- que significa -nuevo-, nuevo 1973.

El modelo: GTA01B4

El teléfono distribuido corresponde al modelo GTA01B4 ó GTA01Bv4, que corresponde a la segunda fase hardware del proyecto openmoko wiki.openmoko.org/wiki/Neo1973. Resumiendo, las fases previstas son las siguientes:
  • Phase 0: GTA01Bv3 - hardware prototipo enviado a 36 desarrolladores relevantes en el mundo open source, seleccionados por el equipo líder del proyecto.
  • Phase 1: GTA01Bv4 - distribución de hardware prototipo destinado al mercado de desarrolladores. El software disponible para este prototipo es etiquetado como pre-alfa. Con esta distribución se pretende usar la fuerza colaborativa de la comunidad opensource para la consolidación del producto. Esta etapa es descrita en wiki.openmoko.org/wiki/Shipment_1
  • Phase 3: GTA02 - Teléfono plenamente funcional destinado al mercado masivo de usuarios finales.

Sistema empotrado: Linux embedded system

Como sistema empotrado clásico podemos dividir al sistema software del teléfono en tres unidades fundamentales:
  1. Monitor de arranque, boot loader o boot monitor: u-boot
  2. Kernel Linux
  3. Root filesystem (rootfs)
De manera muy simple, podemos decir que el hardware ejecuta el monitor de arranque u-boot, este a su vez ejecuta el kernel del sistema operativo y este último monta el sistema de archivos raíz con las aplicaciones de usuario. La unidad GTA01B4 viene con el cargador u-boot preinstalado, sólo necesitaremos copiar en la memoria FLASH del dispositivo el kernel y el rootfs.

El Openmoko Team ha elegido implementar en la versión de u-boot de openmoko (fuentes orginales de u-boot mantenidos por www.denx.de/wiki/DULG el protocolo USB DFU v1.1 (USB Device Firmware Upgrade) que forma parte de la especificación USB para facilitar la actualización del firmware de un hardware USB. El proyecto más notable que usa esta tecnología en el mundo open source el Free RFID readers www.openpcd.org/ liderado por Harald Welte.

Para comunicarse mediante dicho protocolo con el u-boot de nuestro openmoko usamos desde el host la utilidad: dfu-util svn.openmoko.org/trunk/src/host/dfu-util/ desarrollado por Harald Welte (alias laforge).

Conexión desde el host: dfu-util

Nuestro primer paso es bajarnos las fuentes del proyecto, para ello:

svn co http://svn.openmoko.org/

Son más de 500 MB el repositorio completo, tendremos que tener paciencia si queremos todas las fuentes. También podemos bajarnos sólo las fuentes de las utilidad dfu-util, o directamente adquirir la herramienta en formato binario estático para arquitectura Linux/i386:

wget http://buildhost.openmoko.org/tmp/deploy/images/dfu-util

Si optamos por compilar la herramienta seguiremos los siguientes pasos:

cd svn.openmoko.org/trunk/src/host/dfu-util &&
sh autogen.sh &&
./configure &&
make

Obtenemos en src/ dos versiones del ejecutable una compilada estáticamente y otra con librerías dinámicas.

Imágenes para "flashear" la unidad

Nos bajamos las imágenes correspondientes al kernel y al rootfs para que nuestro teléfono -haga algo-. Como ya hemos dicho, la imagen de u-boot está correctamente instalada para los teléfonos de la Phase 1, y por ello no la actualizaremos de momento.

Tenemos dos conjuntos de imágenes, las que corresponden a la distribución OpenMoko2007.1 (o OM2007.1) que son las denominadas "oficiales", y las correspondientes a una evolución importante del framework denominadas OM2007.2, que no son consideradas oficiales y son menos estables de momento. Nos decantamos por las oficiales, para tener menos problemas.

Existen muchas combinaciones de imágenes y una nomenclatura confusa, por ello existe una página wiki.openmoko.org/wiki/Phase_1_Software_Testing donde se comentan algunas combinaciones que han funcionado y los problemas que pueden haber dado. Haremos nuestras pruebas iniciales con:

wget http://buildhost.openmoko.org/tmp/deploy/images/openmoko-devel-image-fic-gta01-20070803091138.rootfs.jffs2
wget http://buildhost.openmoko.org/tmp/deploy/images/uImage-2.6.21.6-moko11-r1_0_0_2388_0-fic-gta01.bin

Flashing openmoko

Para comenzar a flashear necesitamos entrar en el menu de u-boot, para ello es necesario apretar el botón AUX wiki.openmoko.org/wiki/Neo1973_AUX_Button mientras presionamos el botón de encendido.

Antes de flasear las imágenes, se recomienda en el wiki de openmoko que se borren las particiones afectadas. Accedemos al prompt del monitor de arranque u-boot a través del cable USB suministrado y algún programa de terminal a través de línea serie. Con la utilidad -cu- del paquete uucp podremos acceder al prompt de u-boot configurando dicho programa para acceder al dispositivo /dev/ttyACM0:

cu -l /dev/ttyACM0

Una vez en el prompt de u-boot ejecutaremos los siguientes comandos:

GTA01Bv4 # nand erase clean rootfs
GTA01Bv4 # nand erase clean kernel

Salimos del emulador de terminal y podremos comenzar el flashing desde nuestro host con la utilidad dfu-util.

Flashing del kernel

[root@bigcat OM2007.1]# dfu-util -a 3 -R -D ./uImage-2.6.21.6-moko11-r1_0_0_2388_0-fic-gta01.bin

dfu-util - (C) 2007 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Opening USB Device 0x0000:0x0000...
Claiming USB DFU Runtime Interface...
Determining device status: state = appIDLE, status = 0
Device really in Runtime Mode, send DFU detach request...
Resetting USB...
Opening USB Device...
Found Runtime: [0x1457:0x5119] devnum=5, cfg=0, intf=0, alt=3, name="kernel"
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x1000
bytes_per_hash=31814
Starting download: [##################################################] finished!
state(2) = dfuIDLE, status(0) = No error condition is present
Done!
Resetting USB to switch back to runtime mode

Flashing del rootfs

[root@bigcat OM2007.1]# dfu-util -a 5 -R -D ./openmoko-devel-image-fic-gta01-20070803091138.rootfs.jffs2

dfu-util - (C) 2007 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Opening USB Device 0x0000:0x0000...
Claiming USB DFU Runtime Interface...
Determining device status: state = appIDLE, status = 0
Device really in Runtime Mode, send DFU detach request...
Resetting USB...
Opening USB Device...
Found Runtime: [0x1457:0x5119] devnum=7, cfg=0, intf=0, alt=5, name="rootfs"
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x1000
bytes_per_hash=644874
Starting download: [##################################################] finished!
state(2) = dfuIDLE, status(0) = No error condition is present
Done!
Resetting USB to switch back to runtime mode

Acceso SSH desde el host

Una vez grabadas las imágenes antes descritas podremos reinicar el móvil y tendremos el móvil listo para funcionar (eso si, mínimamente funcional, no olvidemos su estatus de pre-alfa). Llegados a este punto será muy interesante poder entrar al móvil a través del comando ssh. Para ello, cuando el móvil es conectado a través del cable USB al host, se crea automáticamente una interface de red usb0. Para configurarla manualmente haremos lo siguiente:

# ifconfig usb0 192.168.0.200 netmask 255.255.255.0
# ping -I usb0 192.168.0.202
# /sbin/route add -host 192.168.0.202/32 dev usb0
# ssh root@192.168.0.202

Cuando nos pida el password, pulsaremos intro y estaremos dentro de nuestro Neo1973.

Conclusión

Este pequeño tutorial, como se puede ver, es meramente una descripción de los pasos que ha dado el equipo de kernel-labs.org para poner en funcionamiento el móvil Neo1973. En las próximas entregas iremos entrando más en profundidad, hasta llegar a nuestro objetivo, participar plenamente en el desarrollo del móvil en el ámbito que nos interesa, la programación del sistema.

Referencias

[1] "Openmoko wiki kernel" - http://wiki.openmoko.org/wiki/Kernel
[2] "Openmoko wiki Changelog" - http://wiki.openmoko.org/wiki/ChangeLog
[3] "Openmoko Projects" - http://projects.openmoko.org/
[4] "Repositorio Subversion Openmoko" - http://svnweb.openmoko.org/
[5] "Openmoko Bugzilla" - http://bugzilla.openmoko.org/
[6] "Openmoko unstable images" - http://buildhost.openmoko.org/tmp/deploy/images/



Submitted by kernel-labs on Wed, 2007-08-22 07:26.
Ha cambiado la url de las imágenes, las del artículo están en:

buildhost.openmoko.org/OM2007.1/tmp/deploy/images/

Submitted by jcazor on Wed, 2007-08-22 01:47.

hola, buen articulo, explica las cosas paso a paso y de forma sencilla. Espero que este sea el primero de una larga lista. para la gente que no haya visto el snapshot del 18/8/07 os comento que se ha modificado la apariencia del interfaz gráfico y es bastante mejor, para mi gusto, mucho más sencilla e intuitiva. Además cada vez funciona mejor el gsmd y ya he empezado a escuchar los primeros ogg :)
Cada vez queda menos para tener un móvil completamente funcional, que nervios...

Submitted by kernel-labs on Wed, 2007-08-22 07:09.
Gracias por el comentario!

Efectivamente se ha dado un buen avanze en la interface gráfica. Para quien le interese puede bajarse esas snapshots de:

2007.08 snapshots