A la découverte du FreeRunner

user_icon admin | icon2 FreeRunner | icon4 5/10/2008 16h52| Type doc: article| Type File: xml| icon3 8 Comments

A la découverte du FreeRunner


1. Il me le faut

Je dois pourtant être l'un des derniers mohicans à ne pas encore posséder de téléphone portable et bien cette fois ci je franchis le pas. Comment résister à cette petite révolution qu'est le FreeRunner : un micro ordinateur tournant sous Linux et qui pour ne rien gâcher permet de téléphoner :)

Et le 4 Juillet l'annonce tombe : il est enfin à la vente, faut dire qu'il s'est beaucoup fait attendre celui-là. Chaque mois différé cela en devenait désespérant. Bon je laisse passer les vacances, glane quelques infos de droite et de gauche et passe la commande chez Bearstech le 8 septembre pour la modique somme de 328 euros. Je m'attendais à une longue attente mais non le 1 octobre réception de la bête.

2. Petit tour du propriétaire

Je trépigne d'impatience, ouverture du composte, je découvre une boite noire, un étui de protection et un sachet contenant un écouteur / microphone. Dans la boite, niché dans sa mousse de protection le FreeRunner dans toute sa splendeur. Qu'il est Bô :)

Avec celui-ci sont livrés: un microcarte SD, un adaptateur microSD/SD, un câble usb, une batterie et son chargeur et un stylet ( diode blanche et pointeur laser ).

L'insertion de la microSD n'est pas simple, pas un bon point ça s'il on souhaite comme moi flasher le système d'origine. Ouverture du Freenrunner, mise en place de la micro SD et de la carte SIM et par dessus tout ça j'insère la batterie et enfin referme le capot.

Je connecte l'alimentation au machin et le voilà qui démarre sans rien demander à personne. Défilement à l'écran de minuscules logs d'initialisation, clairement impossible à lire et démarrage d'openmoko en version 2007.2 et bien sûr pas dans la langue de molière :(

Là tout fonctionne correctement, envoi/reception d'appel, les contacts de la carte SIM sont présent dans une liste déroulante dans laquelle on se déplace avec beaucoup de fluidité. Un terminal est présent parmis les applications mais pas vraiment exploitable sans un vrai clavier. Au bout d'un moment il commence à partir en vrille, je ne peux plus sélectionner aucune applications :(

Il est temps de migrer vers une version récente d'openmoko. A propos d'Openmoko voir le très bon papier de Lucas Bonnet : http://bearstech.com/files/LB-Openmoko_RMLL08.pdf

Je dois préciser que les divers scripts et commandes un peu tordues ne sont pas de mon fait, je n'ai rien inventé. La plupart sont extraits de:

3. Premier flash

Pour arrêter le FreeRunner j'appuie en continu sur le bouton d'alimentation (situé à coté de la miniusb) et là apparaît un menu permettant d'activer/désactiver le GSM/BlueTooth/GPS/Wifi, de verrouiller l'écran et d'arrêter la machine.

Je choisis de flasher la dernière version stable d'Openmoko en version 2008.8. Il me faut pour cela copier l'image d'Openmoko sur la carte microSD donc retrait capot/batterie/SIM et enfin microSD ... pfff ... J'insère celle-ci dans l'adaptateur SD et la glisse dans mon PC. Bien celle-ci est reconnue en /media/usbdisk (/dev/sdd1). Elle est vierge et formatée en vfat.

Avant de flasher l'image en dur sur le freerunner, je vais d'abord la tester en bootant sur la microSD.

3.1. Boot sur la microSD

Celle-ci doit disposer de deux partitions, l'une en vfat ou sera stocké le noyau et l'autre en ext3 qui contiendra le système.

# fdisk /dev/sdd

  Command (m for help): d
  Selected partition 1
  Command (m for help): n
  Command action
     e   extended
     p   primary partition (1-4)
  p
  Partition number (1-4): 1
  First cylinder (1-983, default 1):
  Using default value 1
  Last cylinder or +size or +sizeM or +sizeK (1-983, default 983): +8M
  Command (m for help): n
  Command action
     e   extended
     p   primary partition (1-4)
  p
  Partition number (1-4): 2
  First cylinder (18-983, default 18):
  Using default value 18
  Last cylinder or +size or +sizeM or +sizeK (18-983, default 983):
  Using default value 983
  Command (m for help): w
  The partition table has been altered!
  Calling ioctl() to re-read partition table.
  Syncing disks.

Formatage et montage des partitions :

umount /medit/usbdisk
apt-get install dosfstools
mkfs.vfat /dev/sdd1
mkfs.ext3 /dev/sdd2
mkdir /tmp/mokokernel /tmp/moko
mount -t vfat /dev/sdd1 /tmp/mokokernel
mount -t ext3 /dev/sdd2 /tmp/moko

Téléchargement de l'image:

wget http://downloads.openmoko.org/releases/Om2008.8-update/Om2008.8-gta02-20081002.rootfs.tar.gz

Décompression de l'image sur la partition ext3:

tar -C /tmp/moko -xzvf Om2008.8-gta02-20081002.rootfs.tar.gz

Maintenant il nous faut copier le noyau :

wget http://downloads.openmoko.org/releases/Om2008.8-update/Om2008.8-gta02-20080903.uImage.bin
cp Om2008.8-gta02-20080903.uImage.bin /tmp/mokokernel/uImage.bin

umount /tmp/moko
umount /tmp/mokokernel
sync

Démarrage par l'intermédiaire de la Flash NAND:

Maintenir le bouton d'alimentation enfoncé, puis appuyer sur le bouton AUX (environ 5 ~ 8 secondes). Le menu de la flash NAND apparait. On y remarque une ligne 'Boot from microSD (FAT+ext2)' mais pas de (FAT + ext3). Le noyau n'est plus construit avec le support ext2. Il est nécessaire d'ajouter une entrée uboot a ce menu.

Ajout d'une entrée Uboot:

Pour modifier le menu Uboot il faut accéder au prompt Uboot. Démarrer en mode Flash Nand et choisir "Console to USB". Connecter ensuite le câble usb.

Dans un terminal exécuter dmesg , le Freerunner est bien reconnu

            
              
            
dmesg
...
[16202.806805] usb 2-7: USB disconnect, address 10
[16226.515442] usb 2-7: new full speed USB device using ohci_hcd and address 11
[16226.755373] usb 2-7: configuration #1 chosen from 2 choices
[16226.759614] cdc_acm: This device cannot do calls on its own. It is no modem.
[16226.759644] cdc_acm 2-7:1.0: ttyACM1: USB ACM device
[16226.781784] usb 2-7: New USB device found, idVendor=1d50, idProduct=5119
[16226.781790] usb 2-7: New USB device strings: Mfr=1, Product=2, SerialNumber=3[16226.781793] usb 2-7: Product: Neo1973 Bootloader U-Boot 1.3.2-rc2-dirty-moko12
[16226.781795] usb 2-7: Manufacturer: OpenMoko, Inc
[16226.781797] usb 2-7: SerialNumber: 0000000
...

Je peux alors me connecter au port /dev/ttyACM1 . Théoriquement il est possible d'utiliser ' screen ', ' cu ' ou ' minicom ' mais un dernier a fait son apparition ' neocon ', il permet notamment de pouvoir faire des copier/coller entre le terminal du PC et celui de Uboot, ce qui est clairement impossible avec les autres.

mkdir neocon && cd neocon
wget http://svn.openmoko.org/developers/werner/neocon/Makefile
wget http://svn.openmoko.org/developers/werner/neocon/neocon.c
make
./neocon -t 30 /dev/ttyACM1
GTA02v6 #

Me voilà connecté :)

La ligne mystérieuse suivante ajoute l'ext3 au menu Uboot :

GTA02v6 # setenv menu_9 Boot from MicroSD(FAT+ext3): setenv bootargs \${bootargs_base} rootfstype=ext3 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000
GTA02v6 # saveenv
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done

Et pour finir on arrête le FreenRunner avec la commande:

neo1973 power-off

Voilà je peux maintenant booter sur la carte microSD ...

Démarrage en mode Flash Nand, "Boot from MidroSD(FAT+ext3)" et ça boot avec une jolie barre de progression sur des bottes (boot) en fond d'écran.

Les fonctions classiques de téléphonie sont là, 'Location' fait son apparition, il s'agit d'un programme GPS ( verrait ça plus tard).

Les deux gros défaut de cette version sont le clavier virtuel dont je n'est pas encore trouvé la touche 'Del' :( et le suspend beaucoup trop rapide même si l'on change le délais. Apparemment ce serait un bug qui n'apparaît que lorsque l'on boot sur la MicroSD.

Donc avant d'aller plus loin je flashe cette version.

3.2. Flashage de OM 2008.8

Je stoppe et déconnecte le câble USB.

Télécharger le programme d'accès au Freerunner par USB

wget http://downloads.openmoko.org/releases/Om2008.8-update/dfu-util
chmod +x dfu-utli

Démarrage par l'intermédiaire de la Flash NOR:

Maintenir le bouton AUX enfoncé, puis appuyer sur le bouton d'alimentation et maintenir enfoncé. Relâcher le bouton AUX. Le menu *** BOOT MENU (NOR) *** est affiché. Inutile de sélectionner l'une des options de ce menu.

Le Freerunner reste dans ce mode pendant 30 secondes et s'éteint ensuite. Il faut donc rapidement connecter le câble USB et exécuter la commande suivante en tant que root:

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

Found Runtime: [0x1d50:0x5119] devnum=7, cfg=0, intf=2, alt=0, name="UNDEFINED"

OK le Freerunner est correctement connecté, je peux flasher le kernel et le système avec les commandes suivantes:

# wget http://downloads.openmoko.org/releases/Om2008.8-update/Om2008.8-gta02-20080903.uImage.bin
#./dfu-util -a kernel -R -D Om2008.8-gta02-20080903.uImage.bin
# wget http://downloads.openmoko.org/releases/Om2008.8-update/Om2008.8-gta02-20081002.rootfs.jffs2
# ./dfu-util -a rootfs -R -D Om2008.8-gta02-20081002.rootfs.jffs2

Le flashage du système est trèèèès long ... c'est de l'usb 1.1 :(

A moins de ne vouloir profiter d'une des dernière fonctionnalités du boot loader, il est inutile de flasher ce dernier mais sinon :

#./dfu-util -a u-boot -R -D uboot.bin

Après ça je démarre sur la 2008.8 flashée.

4. OM 2008.8

Actuellement l'écran principal ressemble à ça :

Pour voir de plus près ce qu'elle à dans le ventre, une connexion ssh est nécessaire. Le plus simple est de débuter par une connexion à travers le câble usb et de paramétrer le Wifi une fois connecté.

Connexion du câble USB au PC, un conseil désactiver le 'Suspend' dans le menu "Setting". Une interface usb0 est créé automatiquement sur le PC. Je lui affecte l'adresse IP 192.168.0.200 car je sais que celle du Freerunner est 192.168.0.202.

# ifconf usb0 192.168.0.200
# route add 192.168.0.0 dev usb0

Ou encore sur Debian si l'on souhaite automatiser la chose. Ajouter les lignes suivantes au fichier /etc/network/interfaces :

allow-hotplug usb0
iface usb0 inet static
        address 192.168.0.200
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        post-up /etc/network/freerunner start
        pre-down /etc/network/freerunner stop

Le script /etc/network/freerunner est exécuter lors l'on plug/deplug le FreenRunner.

#!/bin/sh
#
# configures the freerunner for internet
# 
# 
DEVICE=usb0
IPADDR=192.168.0.200
REMOTE_IPADDR=192.168.0.202
NETMASK=255.255.255.0

# get first ip for dns
DNSIP=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }' | head -n 1 )

case "$1" in
start)
       iptables -A POSTROUTING -t nat -j MASQUERADE -s $REMOTE_IPADDR
       iptables -A PREROUTING -t nat -p tcp -s $REMOTE_IPADDR -d $IPADDR --dport domain -j DNAT --to-destination $DNSIP
       iptables -A PREROUTING -t nat -p udp -s $REMOTE_IPADDR -d $IPADDR --dport domain -j DNAT --to-destination $DNSIP
       
       if [ "$(cat /proc/sys/net/ipv4/ip_forward)" = "0" ]; then
               echo "temoprarely allow ip_forward for openmoko" > /var/run/openmoko.ip_forward
               echo 1 > /proc/sys/net/ipv4/ip_forward
       fi
       ;;
stop)
       iptables -D POSTROUTING -t nat -j MASQUERADE -s $REMOTE_IPADDR
       iptables -D PREROUTING -t nat -p tcp -s $REMOTE_IPADDR -d $IPADDR --dport domain -j DNAT --to-destination $DNSIP
       iptables -D PREROUTING -t nat -p udp -s $REMOTE_IPADDR -d  $IPADDR --dport domain -j DNAT --to-destination $DNSIP

       if [ -f /var/run/openmoko.ip_forward ]; then
               rm /var/run/openmoko.ip_forward
               echo 0 > /proc/sys/net/ipv4/ip_forward
       fi
       ;;
esac

Et bien sûr le rendre exécutable.

chmod +x /etc/network/freerunner

Si tout c'est bien passé un ping vers le FreeRunner est possible :

ping 192.168.0.202
PING 192.168.0.202 (192.168.0.202) 56(84) bytes of data.
64 bytes from 192.168.0.202: icmp_seq=1 ttl=64 time=1.98 ms
64 bytes from 192.168.0.202: icmp_seq=2 ttl=64 time=1.03 ms
...

Yes :) Et maintenant un ssh en root (qui ne possède pas de mot de passe ! )

# ssh 192.168.0.202
...
root@om-gta02:~# lsmod
Module                  Size  Used by
ipv6                  259684  8

Tiens ? De l'ipv6, ça me rappelle vaguement un problème que nous avions constaté sur la distribution Angstrom qui consommait beaucoup de ressources avec l'ipv6. Ça ne semble pas être le cas ici : un top me retourne 4% CPU et 5% MEM.

Au tour du wifi:

Dans le fichier /etc/network/interfaces du FreeRunner j'ajoute les lignes suivantes:

# Wired or wireless interfaces #iface eth0 inet dhcp 
#iface eth1 inet dhcp

auto eth0
iface eth0 inet static
    address 192.168.1.9 
    netmask 255.255.255.0 
    network 192.168.1.255 
    gateway 192.168.1.1 
    wireless_mode managed 
    wireless_essid MON_ESSID 
    wireless_key off key MA_CLE [1] key [1] 
    wireless-enc MA_CLE

On prend en compte en redémarrant le service 'networking'

/etc/init.d/networking restart

Ceci dit j'imagine qu'il doit y avoir un outil livré avec Openmoko qui permet de faire cela de manière graphique.

Ajouter le serveur de nom au fichier /etc/resolv.conf , pour moi ça donne:

nameserver 192.168.1.1

Et normalement un ping www.google.fr devrait fonctionner. Si ce n'est pas le cas cela doit provenir de l'interface usb0 qui a ajoutée une route par défaut que l'on doit supprimer

route del default gw 192.168.0.202

OK tout fonctionne, j'ai bien accès au Web mais voilà la latence est horrible :(

root@om-gta02:~# ping www.google.fr
PING www.google.fr (209.85.129.147): 56 data bytes
64 bytes from 209.85.129.147: seq=0 ttl=236 time=92.054 ms
64 bytes from 209.85.129.147: seq=11 ttl=235 time=365.394 ms
64 bytes from 209.85.129.147: seq=12 ttl=236 time=179.800 ms
64 bytes from 209.85.129.147: seq=13 ttl=236 time=301.123 ms
64 bytes from 209.85.129.147: seq=14 ttl=235 time=320.481 ms
...

Je peux tout de même installer tous les programmes proposé par l'Installer'. Superbe outil, très ergonomique.

Je n'aime pas du tout le clavier virtuel, sur le wiki d'openmoko on nous explique comment le remplacer par celui de Rasterman :

1. opkg install illume-config (Get the qwerty button if not there yet)
2. add "export QTOPIA_NO_VIRTUAL_KEYBOARD=1" in /etc/X11/Xsession.d/89qtopia (Turn off built-in qtopia keyboard)
3. opkg install illume-config-illume
5. rm -rf ~/.e/e/config/illume (Purge E's cache)
6. /etc/init.d/xserver-nodm restart (Restart X)

Il ne faut pas s'attendre à une frappe rapide, impossible avec les doigts, avec le doigt devrais-je dire, on peut cependant écrire un petit texte.

Le clavier est en Querty et je n'ai pas trouvé le moyen de paramétrer OM en français :( Il manque le package virtual-locale-fr !

Sinon elle est exploitable, toute fois moins rapide que la Qtopia .

5. FDOM

L'image FDOM basée sur la version OM2008.8 est une combinaison d'applications et de correction de bug. Je vais tester ça ... On lésine pas, le flash carrement.

Il faut le noyau de la OM2008.8 et télécharger le jffs2 ici : http://compartida.net/openmoko/FDOM/

Après ça et bien même procédure que pour la 2008.8.

Et là déçu ... Ça rame énormément :(

6. Qtopia

Bon on passe à la distribution Qtopia ...

Version 4.3 :

wget http://qtextended.org/modules/mydownloads/visit.php?lid=79

Flashage ...

Très réactive, design superbe, elle à tout pour séduire ... mais ...

Pas moyen de prendre la main en ssh :( ça limite beaucoup l'intérêt. Je n'ai pas non plus réussi à configurer le Wifi avec le système de reconnaissance des caractères. J'avoue que je n'ai pas poussé la recherche plus loin. Je ne sais pas non plus s'il est possible d'installer les packages d'une distribution sur l'autre ?

Version 4.4 ( Les nouveautés ):

wget http://qtextended.org/modules/mydownloads/visit.php?lid=86

Flashage ...

Bon le ssh fonctionne mais les contacts ne n'apparaissent plus :(

Je viens de découvrir qu'en fait la 2008.8 intègre Qtopia :)

7. Debian sur MicroSD

Et oui Debian est aussi présent dans le domaine du smartphone. la procédure suivante décrit l'installation d'une Debian sur MicroSD. Je n'ai pas trouvé d'information quant à une installation réussie sur la Flash.

Le prérequi est de disposer d'une connection Internet.

wget http://pkg-fso.alioth.debian.org/freerunner/install.sh
chmod +x install.sh
SD_PART1_FS=vfat ./install.sh all

Formidable ce script, il se charge de :,

  • Partitionner/formater la carte microSD

  • Installer un système de base ( cdebootstrap ) le kernel sur la première partition ( /dev/mmcblk0p1 en ext2 de 7.5Mo) et le système ( /dev/mmcblk0p2 en ext2 de 475Mo).

On notera l'utilisation de la variable SD_PART1_fs égale à ' vfat '. Celle-ci spécifie que la partition utilisée pour le stockage du noyau sera formatée en ' vfat ', ceci dans le but de ne pas avoir a modifier le menu uboot . Il ne contient pas d'option pour booter sur Ext2+Ext2 (Voir ICI )

8. Et si l'on se la construisait ?

Pourquoi construire sa propre distribution alors que l'on en dispose permettant des customisations à outrance. Simplement pour le Fun, pour mieux en comprendre les mécanismes, pour y intégrer des machins et retirer des choses, l'embellir ou la rendre affreuse ... Avec Ulhume on avait bricoler sur un matériel un peu similaire : un Zaurus,la partie noyau/système était construite avec Openembedded, une meta distribution, avec qui nous avions construit Zaurusfr (Une version francisée et customisée d'Angstrom). Et ça tombe plutôt bien puisque la distribution Openmoko est aussi construire avec Openembedded.

Le script MokoMakefile va se charger de tout !

wget http://www.rwhitby.net/files/openmoko/Makefile
make setup
make setup-machine-om-gta02
make image

cd build
source ../setup-env
bitbake openmoko-qtopia-image
bitbake openmoko-devel-image

Y plus qu'a laisser faire pendant quelques heures ...

Le ' make image ' a construit une image minimale dans build/tmp/deploy/glibc/images/om-gta02/ , Les deux autres commandes se passent de commentaires :)

Oups ... pour la construction des images ' Qtopia ' et ' devel ' je modifie le Makefile :

OM_GIT_BRANCH := org.openmoko.dev
OM_IMAGE_NAME := openmoko-devel-image

9. Le matos

Inutile de m'éterniser la-dessus, c'est très documenté sur le Net :

Les caractéristiques de l'appareil détaillées sur wiki d'Openmoko .

Commentaires:

user_iconUlhume icon4 15/10/2008 - 7h25
Très intéressante, merci ! Je me tâte pour cet appareil même si j'ai un peu peur d'embraquer sur un "gouffre à temps" comme le Zaurus... Côté utilisabilité cela donne quoi ? En comparaison d'un système au hardware peu ou prou équivalent comme l'iPhone ? Autre truc qui l'intrique, le touchscreen est de type point (avec un stylet) ou multi-touch (genre rendant possible l'agrandissement d'une image en écartant les doigts) ? Et dans le second cas, c'est réellement utilisé par OM ?
user_iconDab icon4 15/10/2008 - 12h19

Je ne saurais te répondre sur le touchscreen, je n'en suis pas encore là. Le Freerunner n'est pas encore utilisable par le grand public, il a encore de nombreuses lacunes qui se comblent doucement. Par exemple impossible de recevoir un appel lorsque ce dernier est en mode 'suspend' ... ça calme non ? Tu peux jeter un oeil à http://wiki.openmoko.org/wiki/Freerunner_Hardware_Issues pour les principaux harware. Coté logiciel idem, il reste beaucoup de travail pour le rendre vraiment utilisable :( ... en conclusion et comme tu le dis : un goufre à temps .... mais tellement formatteur.

Actuellement j'utilise Qtopia (qtexended.org) qui tient à peu près la route mais à l'avenir je basculerai très certainement sur OM développé avec openembedded ... que de bons souvenirs ;)


user_iconUlhume icon4 15/10/2008 - 14h51
Ah oui effectivement, là tu me refroidis un peu :/ C'est étrange un produit commercial, pas donnée, et non fonctionnel ? Même la rom d'origine du Zaurus marchait parfaitement, après les custom...
user_iconDab icon4 15/10/2008 - 16h25

Réponse toute faite : http://openmoko-fr.org/blog/index.php?post/2008/09/23/Billet-d-humeur


user_iconDab icon4 15/10/2008 - 16h26

Arg ... les liens ne fonctionne pas non plus :( ... la liste des TODO n'en finie pas de s'étendre :(


user_iconulhume icon4 24/10/2008 - 21h8

"Je suis toujours étonné de constater que certains ne pardonnent pas au projet Openmoko ce qu'il trouvent normal sur leur propres ordinateurs !"

Ne pas pardonner c'est exagéré. Disons juste que le téléphone mobile, pour certains d'entre nous disons, c'est un peu le truc qui doit marcher en toute circonstance.

Maintenant je suis assez d'accord avec le garçon, le projet a un beau potentiel et heureusement quil y a des gens comme toi pour le soutenir sinon des gens comme moi pourront jamais en profiter. Mais lorsque je vois le temps que j'ai passé à rendre mon U810 totalement fonctionnel, professionnellement parlant, je peux aussi comprendre le choix de l'iphone.


user_iconDab icon4 24/10/2008 - 22h52

Me semble que tu bosse aussi beaucoup dans cette voie... un jour on vaincra ;)


user_iconulhume icon4 2/11/2008 - 23h43

Tu m'étonnes :-) Quant je vois déjà comment je galère avec une bécane 100% "pc de base"...



Add_a_comment

Validator_logo
Catapulse v0.06
( 0.079479 s)