Dev

De openmoko-fr.

Sommaire

Introduction

Cette page a pour but de présenter clairement sous forme de tutoriel comment développer une application compilée (contrairement à python) sur PC pour ensuite installer sous le Freerunner.

Vocabulaire et différences

(!à compléter corriger!)

Makefile => fichier d'automatisation du montage d'un environnement de cross-compilation ( équivalent d'une toolchain automatisée) rôle équivalent à OpenEmbedded

toolchain => chaine d'outils pour faire de la cross-compilation

OpenEmbedded => est une toolchain utilisée par OM et SHR pour faire leur distribution.


Cette page est en cours d'élaboration, merci de votre indulgence. N'hésitez pas à y contribuer si le cœur vous en dit ;) Vous pouvez aussi me faire part de vos remarques sur le forum [1]

Pour tester, vous pouvez soit passer directement par le téléphone, ou bien utiliser l'émulation via QEMU

Mise en place de l'environnement

Tout est expliqué sur cette page [2] (il serait peut être bon d'en faire une version simplifié ici car il y a des liens mort dans l'autre)


Voici la version simplifiée:

Partie à faire une seule fois, c'est l'installation de l'env

IL suffit de télécharger le toolchain adéquate ici:

 http://downloads.openmoko.org/developer/toolchains/

(exemple pour moi en processeur 32bit c'est: openmoko-i686-20090323-armv4t-linux-gnueabi-toolchain-openmoko.tar.bz2 qu'il faut que j'utilise).

Une fois ceci fait, décompressez l'archive. Vous avez un dossier usr/local/openmoko.

ouvrez un terminal dans ce dossier local. Puis faites:

 sudo cp -r openmoko/ /usr/local/

afin de copier le dossier openmoko dans /usr/local. IL est obligatoire de le placer dans ce chemin là.

Allez ensuite dans /usr/local/openmoko/arm/scripts puis faites:

cd /usr/local/openmoko/arm/scripts
sudo chmod +x script-env

Partie à faire dans chaque terminal avant de compiler

Exécutez le script d'environnement

 . /usr/local/openmoko/arm/bin/setup-env

Puis rajoutez la variable d'environnement:

 export PATH=$PATH:/usr/local/openmoko/arm/bin 

Voilà vous pouvez maintenant compiler et tester le helloword plus bas!

Installer des dépendances

Si vous voulez développer pour SHR, il faudra modifier les dépôts pour pointer sur les bons serveurs. Pour cela, il suffit de modifier le fichier suivant /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/etc/opkg.conf

Et le remplacer par :

arch all 1
src/gz all http://build.shr-project.org/shr-testing/ipk/all
arch armv4t 21
src/gz armv4t http://build.shr-project.org/shr-testing/ipk/armv4t
arch om-gta02 36
src/gz om-gta02 http://build.shr-project.org/shr-testing/ipk/om-gta02

(Remplacer 'testing' par 'unstable' si vous désirez développer pour la unstable)

Une fois cela effectué, ouvrir une console administrateur, mettre à jour les variables d'environnement :

. /usr/local/openmoko/arm/bin/setup-env
export PATH=$PATH:/usr/local/openmoko/arm/bin

et lancer l'installation des dépendances :

opkg-target update
opkg-target install <nom du paquet>

Hello world

Le programme exemple fournis avec la toolchain est un peu trop complexe à mon avis pour commencer ... J'ai donc décidé de débuter par un simple Helloworld dans le terminal.

Sur le PC

Préparer les données

Commençons par créer un dossier 'helloworld' dans lequel nous allons y mettre notre programme:

mkdir ~/helloworld
cd ~/helloworld

Vous pouvez aussi télécharger directement l'archive complète [3]

Créer un fichier helloworld.c et y placer le code suivant:

#include <stdio.h> 

int main (int argc, char **argv)
{
	printf("Hello world !\n");
}

Créer ensuite le fichier Makefile et mettre le code suivant:

all: helloworld.o
	arm-angstrom-linux-gnueabi-gcc -march=armv4t -mtune=arm920t -std=gnu99 -Wall -pedantic -std=c99 -fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os -L/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib -o helloworld helloworld.o 

helloworld.o:
	ccache arm-angstrom-linux-gnueabi-gcc -march=armv4t -mtune=arm920t -std=gnu99 -I. -isystem/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/include -Wall -pedantic -std=c99 -fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os -c -o helloworld.o helloworld.c 

clean:
	rm *.o

PS: Le Makefile n'est pas encore très 'jolie' mais non allons l'améliorer plus tard ...

Compilation

Pour compiler, nous devons charger les variables d'environnement, puis lancer le make:

. /usr/local/openmoko/arm/bin/setup-env
cd ~/helloworld
make

Si tout se passe bien, votre exécutable helloworld a été créé. Vous ne pouvez pas l'exécuter sur votre PC car l'architecture du processeur est différente (x86 vs. ARM)

Sur le Freerunner

Copiez l'exécutable sur le freerunner par ssh ou SSHFS dans votre homedir par exemple, puis l'exécuter:

root@om-gta02:~# ./helloworld 
Hello world !
root@om-gta02:~# 

Waouw ça marche !

Passons maintenant à la suite ...

Créer un paquet ipk

Pour pouvoir créer un paquet ipk, nous devons ajouter un fichier CONTROL contenant les informations du paquet:

Package: helloworld
Version: 0.1
Description: package built by openmoko toolchain
Section: openmoko/applications
Priority: optional
Maintainer: sleg_AT_tsleg.com
Architecture: armv4t
Homepage: http://www.tsleg.com/om
Depends: 
Source: http://www.tsleg.com/om

Ainsi que modifier le Makefile pour ajouter la procédure d'installation

install:
	mkdir -p $(DESTDIR)/usr/bin/
	install helloworld $(DESTDIR)/usr/bin/

Vous trouverez l'archive complète ici [4]

Pour créer le paquet, exécutez simplement la commande suivante:

cd ~
om-make-ipkg helloWorld helloWorld/CONTROL

Le paquet sera alors créé dans le dossier courant. Vous pouvez ensuite l'installer comme n'importe quel paquet.

opkg install http://www.tsleg.com/om/helloworld_0.1_armv4t.ipk

Supprimer le paquet:

opkg remove helloworld

Hello world graphique (etk)

La plupart des distributions pour l'openmoko disposent de la librairie enligtenment, alors profitons en pour faire un helloworld basé sur etk.

Pour commencer, nous pouvons faire un tour sur la documentation officielle [5]

Pour pouvoir compiler ce nouveau projet, nous devons avoir la lib libetk-dev d'installé.

Librairie pour le FR:

opkg-target install libetk-dev

Pour tester sur le PC (Ubuntu) [6]: Ajouter le dépôt suivant:

deb http://greenie.sk/ubuntu hardy e17
wget -O- http://greenie.sk/ubuntu/dists/repo.key%7Csudo apt-key add -
sudo apt-get update
sudo apt-get install libetk-dev