Table des matières
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.
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:
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.
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.
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.
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 .
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 :(
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 :)
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 )
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
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: