Toolchain/fr

From Openmoko

(Difference between revisions)
Jump to: navigation, search
(Ajouter des bibliothèques complémentaires à la suite d'outils)
(Avoir votre application intégrée à OpenEmbedded)
Line 289: Line 289:
 
==Avoir votre application intégrée à OpenEmbedded==
 
==Avoir votre application intégrée à OpenEmbedded==
  
If you have written a cool application which you want to share with others, the best way to do that is to
+
Si vous avez écrit une application sympa que vous désirez partager avec d'autres, la meilleure méthode est de
  
# upload your application source code to a public location
+
# Placer le code source de votre application sur un serveur internet accessible par tous
# submit a [[BitBake]] recipe to [[OpenEmbedded]], preferably via the [http://bugzilla.openembedded.org OpenEmbedded bugtracker].
+
# fournir un fichier de description [[BitBake]] à [[OpenEmbedded]], si possible par l'intermédiaire du [http://bugzilla.openembedded.org gestionnaire de bugs OpenEmbedded].
  
See also [[Customizing the Openmoko Distribution]].
+
Voir aussi [[Customizing the Openmoko Distribution]].
  
 
==Résolution de problèmes==
 
==Résolution de problèmes==

Revision as of 16:56, 8 October 2008


Contents

Introduction

Une suite d'outils de développement est un ensemble de logiciels qui permet de compiler du code. Dans le cadre du projet Openmoko, il faut séparer les différents cas qu'on peut rencontrer :

(a) Développer une application unique
Le plus approprié est d'utiliser un environnement de compilation croisée préparé d'avance par le projet Openmoko. Sur cette page vous trouverez une procédure qui décrit pas à pas comment démarrer avec cet environnement, générer un fichier exécutable et le déclencher sur la plateforme choisie. Il se peut que vous ayez entendu parler d' OpenEmbedded mais en tant que développeur d'applications vous ne devriez pas l'utiliser.
(b) Intégration de composants système ou personnalisation d'une distribution logicielle
Pour cela vous devriez utiliser OpenEmbedded qui construit son propre environnement de compilation croisée lors de la phase de construction. L'intégration de composants système et la personnalisation d'une distribution ne sont pas abordés dans cette page.

Utilisation élémentaire de l'environnement de compilation croisée

Prérequis

Pour mettre en place cet environnement, vous devez être à l'aise avec Linux et les outils en ligne de commande ainsi que disposer d'un ordinateur compatible x86 avec au moins 1Go de place libre sur le disque dur. Vous devez avoir l'habitude de compiler des programmes à partir du code source en utilisant le compilateur de votre distribution. La suite de ce document adopte comme hypothèse que vous avez accès en écriture à votre répertoire racine (~) ainsi qu'au répertoire /usr/local (en tant que superutilisateur si besoin). Si ce n'est pas le cas, veuillez contacter l'administrateur système pour assistance.

Dernier point important : vous devez disposer d'un environnement fonctionnel qui permette de compiler des logiciels (en mode natif) par l'intermédiaire des outils de la suite logicielle autotools (le triplet ./configure, make, make install).

Une liste (incomplète?) des logiciels nécessaires -- merci de compléter cette liste au besoin :

  • For most Linux version you might only need to install the packages
    • autoconf, automake
    • binutils, gcc, gcc-c++
    • libtool
    • ccache
    • intltool
  • Pour la distribution Ubuntu 8.04 ( le versions antérieure n'intègrent pas libmokoui2 ) la commande suivante installe les éléments nécessaires :
sudo apt-get install gcc g++ autoconf automake binutils libtool libglib2.0-dev \
ccache libxrender-dev intltool libmokoui2-dev libgconf2-dev mtools fakeroot alien check
  • Pour la distribution Ubuntu 8.10 la commande additionnelle est requise :
sudo apt-get install uboot-mkimage
  • Pour la distribution Fedora-Core la commande suivante déclenchée en tant que super-utilisateur est nécessaire :
yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \
ccache libXrender-devel intltool GConf2-devel mtools gettext-devel

Fedora-Core ne semble pas contenir la bibliothèque libmokoui2.

Téléchargement et installation

NOTE: Si vous désirez améliorer une application existante et que vous avez une distribution Debian ou Ubuntu i386 (i.e. avec des paquets .deb), vous préférerez peut-être éviter la phase suivante et plutôt utiliser la méthode décrite à

Développement d'applications Openmoko en 5 minutes par Andreas Dalsgaard. (procédure basée sur la distribution 2007.2)


La suite d'outils de développement précompilée peut être téléchargée à downloads.openmoko.org:

  • Créez un répertoire de destination pour les logiciels, par exemple :
 mkdir ~/sources
 cd ~/sources
  • Téléchargez le paquet adapté à votre architecture de processeur (x86_64 or i686) :
 wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2
ou
 wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2
NOTE: Certaines personnes ont des problèmes avec la version 20080521 des outils. Si vous observez des erreurs, essayez une version différente. (information valide en date du 23 juillet 2008)


Ensuite vous aurez à décompresser ce paquet dans votre système. Cet environnement doit obligatoirement être installé dans le répertoire /usr/local/openmoko/. Vous avez les possibilités suivantes :

  • La décompresser directement en tant que super-utilisateur en utilisant la commande su (ou en préfixant votre commande avec "sudo" si vous utilisez Debian/Ubuntu) :
  cd /
  tar -xjvf ~/sources/openmoko-XYZ-arm-linux-gnueabi-toolchain.tar.bz2
  • Sur les variantes de Debian (par exemple Ubuntu), vous pouvez utiliser alien(+fakeroot) pour créer un paquet facile à installer à partir du fichier .tar.bz2 :
  bunzip2 openmoko-*-arm-linux-gnueabi-toolchain.tar.bz2
  gzip openmoko-*-arm-linux-gnueabi-toolchain.tar
  fakeroot alien -d openmoko-*-arm-linux-gnueabi-toolchain.tar.gz
  sudo dpkg -i openmoko_*-arm-linux-gnueabi-toolchain*.deb
  • La suite de développement précompilée n'est disponible que pour architectures x86_64 ou i686. Si vous le désirez vous pouvez la recréer sous OpenEmbedded avec la commande :
  bitbake meta-toolchain-openmoko

Pour finir, vous devez modifier certaines variables d'environnement pour que les outils utilisés par la suite de développement soient trouvés. La suite de développement intègre un script qui effectue cela, il suffit de l'exécuter via la commande source de votre interpréteur de commande. Si vous n'utilisez pas l'un des interpréteurs "sh" ou "bash" (vous pouvez vérifier avec la commande "echo $SHELL"), vous devez démarrer "sh" ou "bash" d'abord.

. /usr/local/openmoko/arm/setup-env
  • Vous devez au moins ajouter le répertoire /usr/local/openmoko/arm/bin à votre variable d'environnement $PATH, sinon les étapes suivantes (om-conf et make) ne fonctionneront pas.
export PATH=$PATH:/usr/local/openmoko/arm/bin 

Note: Cela ne fonctionnera que pour votre session en cours. Rajoutez cette commande à votre script de démarrage (~/.bashrc par exemple) pour rendre cette modification permanente.

Installation de nouvelles bibliothèques

La suite d'outils Openmoko ne contient pas beaucoup de bibliothèques par défaut. Ceci dit on peut télécharger et installer des bibliothèques complémentaires. Par défaut on utilise le répertoire de paquets Testing pour ces bibliothèques complémentaires.

  • Vous devez modifier certaines variables d'environnement avant de télécharger des bibliothèques complémentaires :
 . /usr/local/openmoko/arm/environment-setup
  • Etape 1 : mise à jour la base de données opkg (Remarque : utilisez l'alias opkg-target et non opkg)
opkg-target update
  • Etape 2 : choisissez un paquet que vous voulez rajouter. Le paquet edje par exemple. Si vous voulez développer un projet qui utilise le composant edje de Enlightenment, vous pouvez utiliser opkg-target list pour afficher les nombreux paquets installables. La commande grep vous sera d'une grande aide.(Rappelez-vous, vous devez installer le paquet -dev package et pas seulement libedje.)
opkg-target list |grep edje-dev
  • Etape 3 : installation
opkg-target install libedje-dev
  • Etape 4 : préparez-vous une tasse de thé et attendez.

Création d'un projet exemple

Choisissez un répertoire de destination (dans cet exemple ~/) puis :

  • copiez le source code téléchargé de l'application exemple :
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
  • Rappelez-vous de positionner les variables d'environnement appropriées (de nouveau avec "sh" ou "bash") pour openmoko :
. /usr/local/openmoko/arm/setup-env
  • Vous devez créer une configuration de compilation pour cette application. Cette commande vérifie aussi que les bibliothèques et outils nécessaires sont disponibles sur votre système. Si le script bloque, jetez un coup d'oeil aux notes concernant les paquets nécessaires de la section Prérequis ci-dessus.
om-conf openmoko-sample2
  • Vous pouvez si vous voulez modifier le code source dans le répertoire openmoko-sample2/src. Avant de passer à la suite, placez-vous dans le répertoire exemple.
cd openmoko-sample2
  • Si vous utilisez une ancienne version de la suite d'outils, il peut être nécessaire de créer le fichier makefile en lançant la commande "./autogen.sh". Dans les autres cas vous pouvez directement compiler l'application à partir du code source en tapant :
make
  • S'il y a des erreurs, par exemple "You need to install gnome-common from the GNOME CVS", résolvez-les. Consultez aussi la section "Résolution de problèmes" à la fin de cette page qui aborde les problèmes les plus fréquents.


Si vous désirez installer ce projet sur votre ordinateur pour l'intégrer à d'autres (cas d'une librairie partagée par exemple), vous pouvez lancer les commandes suivantes qui effectueront l'installation dans un répertoire précis.

om-conf --prefix=/usr/local/openmoko openmoko-sample2
cd openmoko-sample2
make install

Comment créer son propre projet à partir du projet exemple

Vous devez modifier certains éléments pour compiler votre propre projet en partant des fichiers exemples openmoko-sample2 :

  • dupliquez le code source de l'application exemple que vous venez de télécharger
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/

  • renommez le dossier en utilisant le nom de votre projet (dans cet exemple nom-de-mon-projet) et effacez les sources de l'ancien projet
mv openmoko-sample2 nom-de-mon-projet
cd nom-de-mon-projet
cd src
rm *.c
  • installez vos codes sources (dans cet exemple mes-sources) dans le répertoire src/
cp mes-sources .
cd ..
  • dans le répertoire principal du projet, modifier le fichier autogen.sh en mettant à jour la ligne sur le nom du paquet
PKG_NAME="nom-de-mon-projet"
  • modifier le fichier configure.ac en mettant à jour les lignes suivantes ('main.c' doit correspondre au fichier principal de votre projet)
AC_INIT(nom-de-mon-projet, 0.0.1, http://www.openmoko.org/)    
AC_CONFIG_SRCDIR(src/main.c)
  • aller dans le dossier data/ et renommez ces fichiers avec le nom de votre projet
cd data
mv openmoko-sample.png nom-de-mon-projet.png
mv openmoko-sample.desktop nom-de-mon-projet.desktop
  • modifier le fichier Makefile.am du répertoire data/ en mettant à jour les lignes suivantes
dist_desktop_DATA = nom-de-mon-projet.desktop
dist_appicon_DATA = nom-de-mon-projet.png
  • modifier Makefile.in dans le répertoire data/ en mettant à jour les lignes suivantes
dist_desktop_DATA = nom-de-mon-projet.desktop
dist_appicon_DATA = nom-de-mon-projet.png
  • modifier nom-de-mon-projet.desktop en mettant à jour les lignes suivantes
Name=nom-de-mon-projet
Encoding=UTF-8
Version=0.0.1
Type=Application
Exec=nom-de-mon-projet
  • et rajoutez la ligne suivante dans ce fichier
Icon=nom-de-mon-projet
  • placez-vous dans le répertoire src/
cd ..
cd src
  • modifiez Makefile.am en mettant à jour les lignes suivantes
bin_PROGRAMS = nom-de-mon-projet	
nom_de_mon_projet_SOURCES = \				
 		main.c 
nom_de_mon_projet_LDADD  = @DEPENDENCIES_LIBS@
  • faites bien attention à remplacer main.c par le nom de tous vos fichiers .c et .h et de remplacer tous les caractères '-' par '_' dans le nom des variables

Création du paquet associé à votre application

Nous avons inclus un script qui créée le paquet ipkg à partir de votre application. Ceci n'est pas nécessaire si vous voulez juste tester votre application sur le Neo (un scp du binaire et des données suffit). C'est malgré tout pratique si vous voulez distribuer votre application à d'autres personnes.

om-make-ipkg openmoko-sample2

Maintenant que vous avez openmoko-sample2_0.1_armv4t.ipk , vous pouvez le `scp' sur votre Neo puis l'installer :

scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:
ssh root@192.168.0.202 opkg install openmoko-sample2_0.1_armv4t.ipk

Bien que vous puissiez diffuser le paquet ipkg généré, n'oubliez pas que ce n'est qu'un paquet brut de fonderie qui ne contient pas toutes les informations d'un paquet abouti : il vous manquera la gestion des dépendances. Vous trouverez ci-dessous la méthode pour les rajouter.

Vous pouvez aussi fournir la version, une description et une chaîne d'informations (auteur/contact) via un fichier de contrôle :

om-make-ipkg myapp myapp_control

Un exemple type de fichier myapp_control:

Package: $appname
Version: 0.1
Description: paquet construit avec la suite d'outils openmoko
Section: openmoko/applications
Priority: optional
Maintainer: $USER
Architecture: armv4t
Homepage: http://www.openmoko.org/
Depends: 
Source: ${SRC}

Autres articles sur des sujets connexes qui pourront vous intéresser

Utiliser la suite d'outils externe est une méthode simple pour compiler des applications à destination de votre Neo. Lorsque vous serez habitué à cette procédure, vous pourrez alors vous intéresser aux articles suivants :

Compilation du noyau Openmoko à partir de l'entrepôt git en utilisant la suite d'outils

git clone git://git.openmoko.org/git/kernel.git linux-2.6
cd linux-2.6
git checkout -b mystable origin/stable
cp defconfig-gta02 .config
./build

Bloquera avec le message d'erreur "arm-angstrom-linux-gnueabi-ld: unrecognized option '-Wl,-rpath-link,/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/lib'" jusqu'à ce que /usr/local/openmoko/arm/setup-env soit modifié. LDFLAGS doit être changé de :

export LDFLAGS="-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-rpath-link,${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-O1"

en :

export LDFLAGS="-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -rpath-link ${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -O1"

J'ai aussi dû changer le script 'build' pour indiquer en dur le chemin d'accès du compilateur.

Utilisation des bibliothèques fournies par la suite d'outils

Rajouter les bibliothèques nécessaires à la variable _LDADD dans src/Makefile.am. Par exemple :

openmoko_sample2_LDADD  = @DEPENDENCIES_LIBS@ -lmokogsmd2

Prenez soin de relancer la commande om-conf après cette modification.

Ajouter des bibliothèques complémentaires à la suite d'outils

Vous aurez besoin un jour ou l'autre de compiler une application dont les dépendances ne sont pas fournies précompilées par la suite d'outil, comme une bibliothèque rarement utilisée.

Dans ce cas, n'hésitez pas à demander l'inclusion de ces bibliothèques complémentaires à la prochaine version de la suite d'outils Openmoko. D'ici là, vous pouvez étendre la suite d'outils dont vous disposez. Mettons que nous voulons ajouter la bibliothèque appelée liburiparse :

cd ~/source
wget http://downloads.sourceforge.net/uriparser/uriparser-0.6.0.tar.bz2
tar xjf uriparser-0.6.0.tar.bz2
cd uriparser-0.6.0
./configure --host=arm-angstrom-linux-gnueabi \
--prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr
make
make install

C'est tout.

Avoir votre application intégrée à OpenEmbedded

Si vous avez écrit une application sympa que vous désirez partager avec d'autres, la meilleure méthode est de

  1. Placer le code source de votre application sur un serveur internet accessible par tous
  2. fournir un fichier de description BitBake à OpenEmbedded, si possible par l'intermédiaire du gestionnaire de bugs OpenEmbedded.

Voir aussi Customizing the Openmoko Distribution.

Résolution de problèmes

  • Some Versions of the Toolchain have corrupt .la files. If you compile an application using the Toolchain and you receive a '/space/fic/openmoko-daily/neo1973/work/armv4t-angstrom-linux-gnueabi/pango-1.18.3-r0/pango-1.18.3/pango/libpangoft2-1.0.la' error, you are affected. To fix that you should go to your "/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib" directory and open the affected .la files and change "/space/fic..." to "/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib". You have to fix more than one .la file. For the pango error you have to change "libpangocairo-1.0.la", but there are more corrupt .la files.

Attached is a beta fix for the .la problem. Untar the .tar.bz2 as root, and execute the following bash script as root:

       #!/bin/sh
       DIR=/usr/local/openmoko/arm
       for la in `find $DIR -iname \*.la`; do
        dependency_libs=
        . $la
        for lib in $dependency_libs ; do
        delib=`echo $lib | grep -E .la$`
        if [ -z $delib ] ; then
         echo -n
        elif [ -f $delib ]; then
         echo -n
        else
         basedelib=`basename $delib`
         replacedelibs=`find $DIR -iname $basedelib`
         found=0
         for replacedelib in $replacedelibs ; do
         if [ $replacedelib == $delib ]; then
          found=1
         fi
         done
         if [ $found -gt 0 ] ; then
          echo -n
         else
           sed_delib=`echo $delib | sed 's/\//\\\\\//g'`
           sed_replacedelib=`echo $replacedelib | sed 's/\//\\\\\//g'`
           # A bit slow, we could chain expressions for speed. :)
           cp $la $la.old
           cat $la | sed "s/$sed_delib/$sed_replacedelib/g" > $la.new
           mv $la.new $la
           rm $la.old
         fi
        fi
        done
       done
  • Merci d'utiliser la liste de diffusion associée au développement Openmoko-Devel.
Personal tools


Introduction

Une suite d'outils de développement est un ensemble de logiciels qui permet de compiler du code. Dans le cadre du projet Openmoko, il faut séparer les différents cas qu'on peut rencontrer :

(a) Développer une application unique
Le plus approprié est d'utiliser un environnement de compilation croisée préparé d'avance par le projet Openmoko. Sur cette page vous trouverez une procédure qui décrit pas à pas comment démarrer avec cet environnement, générer un fichier exécutable et le déclencher sur la plateforme choisie. Il se peut que vous ayez entendu parler d' OpenEmbedded mais en tant que développeur d'applications vous ne devriez pas l'utiliser.
(b) Intégration de composants système ou personnalisation d'une distribution logicielle
Pour cela vous devriez utiliser OpenEmbedded qui construit son propre environnement de compilation croisée lors de la phase de construction. L'intégration de composants système et la personnalisation d'une distribution ne sont pas abordés dans cette page.

Utilisation élémentaire de l'environnement de compilation croisée

Prérequis

Pour mettre en place cet environnement, vous devez être à l'aise avec Linux et les outils en ligne de commande ainsi que disposer d'un ordinateur compatible x86 avec au moins 1Go de place libre sur le disque dur. Vous devez avoir l'habitude de compiler des programmes à partir du code source en utilisant le compilateur de votre distribution. La suite de ce document adopte comme hypothèse que vous avez accès en écriture à votre répertoire racine (~) ainsi qu'au répertoire /usr/local (en tant que superutilisateur si besoin). Si ce n'est pas le cas, veuillez contacter l'administrateur système pour assistance.

Dernier point important : vous devez disposer d'un environnement fonctionnel qui permette de compiler des logiciels (en mode natif) par l'intermédiaire des outils de la suite logicielle autotools (le triplet ./configure, make, make install).

Une liste (incomplète?) des logiciels nécessaires -- merci de compléter cette liste au besoin :

  • For most Linux version you might only need to install the packages
    • autoconf, automake
    • binutils, gcc, gcc-c++
    • libtool
    • ccache
    • intltool
  • Pour la distribution Ubuntu 8.04 ( le versions antérieure n'intègrent pas libmokoui2 ) la commande suivante installe les éléments nécessaires :
sudo apt-get install gcc g++ autoconf automake binutils libtool libglib2.0-dev \
ccache libxrender-dev intltool libmokoui2-dev libgconf2-dev mtools fakeroot alien check
  • Pour la distribution Ubuntu 8.10 la commande additionnelle est requise :
sudo apt-get install uboot-mkimage
  • Pour la distribution Fedora-Core la commande suivante déclenchée en tant que super-utilisateur est nécessaire :
yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \
ccache libXrender-devel intltool GConf2-devel mtools gettext-devel

Fedora-Core ne semble pas contenir la bibliothèque libmokoui2.

Téléchargement et installation

NOTE: Si vous désirez améliorer une application existante et que vous avez une distribution Debian ou Ubuntu i386 (i.e. avec des paquets .deb), vous préférerez peut-être éviter la phase suivante et plutôt utiliser la méthode décrite à

Développement d'applications Openmoko en 5 minutes par Andreas Dalsgaard. (procédure basée sur la distribution 2007.2)


La suite d'outils de développement précompilée peut être téléchargée à downloads.openmoko.org:

  • Créez un répertoire de destination pour les logiciels, par exemple :
 mkdir ~/sources
 cd ~/sources
  • Téléchargez le paquet adapté à votre architecture de processeur (x86_64 or i686) :
 wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2
ou
 wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2
NOTE: Certaines personnes ont des problèmes avec la version 20080521 des outils. Si vous observez des erreurs, essayez une version différente. (information valide en date du 23 juillet 2008)


Ensuite vous aurez à décompresser ce paquet dans votre système. Cet environnement doit obligatoirement être installé dans le répertoire /usr/local/openmoko/. Vous avez les possibilités suivantes :

  • La décompresser directement en tant que super-utilisateur en utilisant la commande su (ou en préfixant votre commande avec "sudo" si vous utilisez Debian/Ubuntu) :
  cd /
  tar -xjvf ~/sources/openmoko-XYZ-arm-linux-gnueabi-toolchain.tar.bz2
  • Sur les variantes de Debian (par exemple Ubuntu), vous pouvez utiliser alien(+fakeroot) pour créer un paquet facile à installer à partir du fichier .tar.bz2 :
  bunzip2 openmoko-*-arm-linux-gnueabi-toolchain.tar.bz2
  gzip openmoko-*-arm-linux-gnueabi-toolchain.tar
  fakeroot alien -d openmoko-*-arm-linux-gnueabi-toolchain.tar.gz
  sudo dpkg -i openmoko_*-arm-linux-gnueabi-toolchain*.deb
  • La suite de développement précompilée n'est disponible que pour architectures x86_64 ou i686. Si vous le désirez vous pouvez la recréer sous OpenEmbedded avec la commande :
  bitbake meta-toolchain-openmoko

Pour finir, vous devez modifier certaines variables d'environnement pour que les outils utilisés par la suite de développement soient trouvés. La suite de développement intègre un script qui effectue cela, il suffit de l'exécuter via la commande source de votre interpréteur de commande. Si vous n'utilisez pas l'un des interpréteurs "sh" ou "bash" (vous pouvez vérifier avec la commande "echo $SHELL"), vous devez démarrer "sh" ou "bash" d'abord.

. /usr/local/openmoko/arm/setup-env
  • Vous devez au moins ajouter le répertoire /usr/local/openmoko/arm/bin à votre variable d'environnement $PATH, sinon les étapes suivantes (om-conf et make) ne fonctionneront pas.
export PATH=$PATH:/usr/local/openmoko/arm/bin 

Note: Cela ne fonctionnera que pour votre session en cours. Rajoutez cette commande à votre script de démarrage (~/.bashrc par exemple) pour rendre cette modification permanente.

Installation de nouvelles bibliothèques

La suite d'outils Openmoko ne contient pas beaucoup de bibliothèques par défaut. Ceci dit on peut télécharger et installer des bibliothèques complémentaires. Par défaut on utilise le répertoire de paquets Testing pour ces bibliothèques complémentaires.

  • Vous devez modifier certaines variables d'environnement avant de télécharger des bibliothèques complémentaires :
 . /usr/local/openmoko/arm/environment-setup
  • Etape 1 : mise à jour la base de données opkg (Remarque : utilisez l'alias opkg-target et non opkg)
opkg-target update
  • Etape 2 : choisissez un paquet que vous voulez rajouter. Le paquet edje par exemple. Si vous voulez développer un projet qui utilise le composant edje de Enlightenment, vous pouvez utiliser opkg-target list pour afficher les nombreux paquets installables. La commande grep vous sera d'une grande aide.(Rappelez-vous, vous devez installer le paquet -dev package et pas seulement libedje.)
opkg-target list |grep edje-dev
  • Etape 3 : installation
opkg-target install libedje-dev
  • Etape 4 : préparez-vous une tasse de thé et attendez.

Création d'un projet exemple

Choisissez un répertoire de destination (dans cet exemple ~/) puis :

  • copiez le source code téléchargé de l'application exemple :
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
  • Rappelez-vous de positionner les variables d'environnement appropriées (de nouveau avec "sh" ou "bash") pour openmoko :
. /usr/local/openmoko/arm/setup-env
  • Vous devez créer une configuration de compilation pour cette application. Cette commande vérifie aussi que les bibliothèques et outils nécessaires sont disponibles sur votre système. Si le script bloque, jetez un coup d'oeil aux notes concernant les paquets nécessaires de la section Prérequis ci-dessus.
om-conf openmoko-sample2
  • Vous pouvez si vous voulez modifier le code source dans le répertoire openmoko-sample2/src. Avant de passer à la suite, placez-vous dans le répertoire exemple.
cd openmoko-sample2
  • Si vous utilisez une ancienne version de la suite d'outils, il peut être nécessaire de créer le fichier makefile en lançant la commande "./autogen.sh". Dans les autres cas vous pouvez directement compiler l'application à partir du code source en tapant :
make
  • S'il y a des erreurs, par exemple "You need to install gnome-common from the GNOME CVS", résolvez-les. Consultez aussi la section "Résolution de problèmes" à la fin de cette page qui aborde les problèmes les plus fréquents.


Si vous désirez installer ce projet sur votre ordinateur pour l'intégrer à d'autres (cas d'une librairie partagée par exemple), vous pouvez lancer les commandes suivantes qui effectueront l'installation dans un répertoire précis.

om-conf --prefix=/usr/local/openmoko openmoko-sample2
cd openmoko-sample2
make install

Comment créer son propre projet à partir du projet exemple

Vous devez modifier certains éléments pour compiler votre propre projet en partant des fichiers exemples openmoko-sample2 :

  • dupliquez le code source de l'application exemple que vous venez de télécharger
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/

  • renommez le dossier en utilisant le nom de votre projet (dans cet exemple nom-de-mon-projet) et effacez les sources de l'ancien projet
mv openmoko-sample2 nom-de-mon-projet
cd nom-de-mon-projet
cd src
rm *.c
  • installez vos codes sources (dans cet exemple mes-sources) dans le répertoire src/
cp mes-sources .
cd ..
  • dans le répertoire principal du projet, modifier le fichier autogen.sh en mettant à jour la ligne sur le nom du paquet
PKG_NAME="nom-de-mon-projet"
  • modifier le fichier configure.ac en mettant à jour les lignes suivantes ('main.c' doit correspondre au fichier principal de votre projet)
AC_INIT(nom-de-mon-projet, 0.0.1, http://www.openmoko.org/)    
AC_CONFIG_SRCDIR(src/main.c)
  • aller dans le dossier data/ et renommez ces fichiers avec le nom de votre projet
cd data
mv openmoko-sample.png nom-de-mon-projet.png
mv openmoko-sample.desktop nom-de-mon-projet.desktop
  • modifier le fichier Makefile.am du répertoire data/ en mettant à jour les lignes suivantes
dist_desktop_DATA = nom-de-mon-projet.desktop
dist_appicon_DATA = nom-de-mon-projet.png
  • modifier Makefile.in dans le répertoire data/ en mettant à jour les lignes suivantes
dist_desktop_DATA = nom-de-mon-projet.desktop
dist_appicon_DATA = nom-de-mon-projet.png
  • modifier nom-de-mon-projet.desktop en mettant à jour les lignes suivantes
Name=nom-de-mon-projet
Encoding=UTF-8
Version=0.0.1
Type=Application
Exec=nom-de-mon-projet
  • et rajoutez la ligne suivante dans ce fichier
Icon=nom-de-mon-projet
  • placez-vous dans le répertoire src/
cd ..
cd src
  • modifiez Makefile.am en mettant à jour les lignes suivantes
bin_PROGRAMS = nom-de-mon-projet	
nom_de_mon_projet_SOURCES = \				
 		main.c 
nom_de_mon_projet_LDADD  = @DEPENDENCIES_LIBS@
  • faites bien attention à remplacer main.c par le nom de tous vos fichiers .c et .h et de remplacer tous les caractères '-' par '_' dans le nom des variables

Création du paquet associé à votre application

Nous avons inclus un script qui créée le paquet ipkg à partir de votre application. Ceci n'est pas nécessaire si vous voulez juste tester votre application sur le Neo (un scp du binaire et des données suffit). C'est malgré tout pratique si vous voulez distribuer votre application à d'autres personnes.

om-make-ipkg openmoko-sample2

Maintenant que vous avez openmoko-sample2_0.1_armv4t.ipk , vous pouvez le `scp' sur votre Neo puis l'installer :

scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:
ssh root@192.168.0.202 opkg install openmoko-sample2_0.1_armv4t.ipk

Bien que vous puissiez diffuser le paquet ipkg généré, n'oubliez pas que ce n'est qu'un paquet brut de fonderie qui ne contient pas toutes les informations d'un paquet abouti : il vous manquera la gestion des dépendances. Vous trouverez ci-dessous la méthode pour les rajouter.

Vous pouvez aussi fournir la version, une description et une chaîne d'informations (auteur/contact) via un fichier de contrôle :

om-make-ipkg myapp myapp_control

Un exemple type de fichier myapp_control:

Package: $appname
Version: 0.1
Description: paquet construit avec la suite d'outils openmoko
Section: openmoko/applications
Priority: optional
Maintainer: $USER
Architecture: armv4t
Homepage: http://www.openmoko.org/
Depends: 
Source: ${SRC}

Autres articles sur des sujets connexes qui pourront vous intéresser

Utiliser la suite d'outils externe est une méthode simple pour compiler des applications à destination de votre Neo. Lorsque vous serez habitué à cette procédure, vous pourrez alors vous intéresser aux articles suivants :

Compilation du noyau Openmoko à partir de l'entrepôt git en utilisant la suite d'outils

git clone git://git.openmoko.org/git/kernel.git linux-2.6
cd linux-2.6
git checkout -b mystable origin/stable
cp defconfig-gta02 .config
./build

Bloquera avec le message d'erreur "arm-angstrom-linux-gnueabi-ld: unrecognized option '-Wl,-rpath-link,/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/lib'" jusqu'à ce que /usr/local/openmoko/arm/setup-env soit modifié. LDFLAGS doit être changé de :

export LDFLAGS="-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-rpath-link,${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-O1"

en :

export LDFLAGS="-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -rpath-link ${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -O1"

J'ai aussi dû changer le script 'build' pour indiquer en dur le chemin d'accès du compilateur.

Utilisation des bibliothèques fournies par la suite d'outils

Rajouter les bibliothèques nécessaires à la variable _LDADD dans src/Makefile.am. Par exemple :

openmoko_sample2_LDADD  = @DEPENDENCIES_LIBS@ -lmokogsmd2

Prenez soin de relancer la commande om-conf après cette modification.

Ajouter des bibliothèques complémentaires à la suite d'outils

Vous aurez besoin un jour ou l'autre de compiler une application dont les dépendances ne sont pas fournies précompilées par la suite d'outil, comme une bibliothèque rarement utilisée.

Dans ce cas, n'hésitez pas à demander l'inclusion de ces bibliothèques complémentaires à la prochaine version de la suite d'outils Openmoko. D'ici là, vous pouvez étendre la suite d'outils dont vous disposez. Mettons que nous voulons ajouter la bibliothèque appelée liburiparse :

cd ~/source
wget http://downloads.sourceforge.net/uriparser/uriparser-0.6.0.tar.bz2
tar xjf uriparser-0.6.0.tar.bz2
cd uriparser-0.6.0
./configure --host=arm-angstrom-linux-gnueabi \
--prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr
make
make install

C'est tout.

Avoir votre application intégrée à OpenEmbedded

Si vous avez écrit une application sympa que vous désirez partager avec d'autres, la meilleure méthode est de

  1. Placer le code source de votre application sur un serveur internet accessible par tous
  2. fournir un fichier de description BitBake à OpenEmbedded, si possible par l'intermédiaire du gestionnaire de bugs OpenEmbedded.

Voir aussi Customizing the Openmoko Distribution.

Résolution de problèmes

  • Some Versions of the Toolchain have corrupt .la files. If you compile an application using the Toolchain and you receive a '/space/fic/openmoko-daily/neo1973/work/armv4t-angstrom-linux-gnueabi/pango-1.18.3-r0/pango-1.18.3/pango/libpangoft2-1.0.la' error, you are affected. To fix that you should go to your "/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib" directory and open the affected .la files and change "/space/fic..." to "/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib". You have to fix more than one .la file. For the pango error you have to change "libpangocairo-1.0.la", but there are more corrupt .la files.

Attached is a beta fix for the .la problem. Untar the .tar.bz2 as root, and execute the following bash script as root:

       #!/bin/sh
       DIR=/usr/local/openmoko/arm
       for la in `find $DIR -iname \*.la`; do
        dependency_libs=
        . $la
        for lib in $dependency_libs ; do
        delib=`echo $lib | grep -E .la$`
        if [ -z $delib ] ; then
         echo -n
        elif [ -f $delib ]; then
         echo -n
        else
         basedelib=`basename $delib`
         replacedelibs=`find $DIR -iname $basedelib`
         found=0
         for replacedelib in $replacedelibs ; do
         if [ $replacedelib == $delib ]; then
          found=1
         fi
         done
         if [ $found -gt 0 ] ; then
          echo -n
         else
           sed_delib=`echo $delib | sed 's/\//\\\\\//g'`
           sed_replacedelib=`echo $replacedelib | sed 's/\//\\\\\//g'`
           # A bit slow, we could chain expressions for speed. :)
           cp $la $la.old
           cat $la | sed "s/$sed_delib/$sed_replacedelib/g" > $la.new
           mv $la.new $la
           rm $la.old
         fi
        fi
        done
       done
  • Merci d'utiliser la liste de diffusion associée au développement Openmoko-Devel.