Dev
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