Le cross-compiler fournit avec pdaXrom est un vrai bonheur. Il permet de récupérer des sources d'applications manquantes dans la distribution et de les compiler de sort à être exécutable directement sur le Zaurus. Le "petit" tutorial suivant permet de mettre cela en oeuvre.
Tout d'abord, prérequis de base, tout ce qui suit ne fonctionne que sous Linux. Quelques aventureux peuvent tenter l'équivalent sous cygwin mais je n'ai aucune idée sur la viabilité d'une telle chose. Pour ma part, j'utilise une Mandriva 2007.1 qui contient tout ce qui me sera nécessaire.
La cross-compilation permet dans sur une machine spécifique (hôte) de fabriquer des binaires pour une autre machine spécifique (cible). L'hôte est donc ici la Mandriva sur architecture i586 et la cible pdaXrom sur architecture ARM (le cpu du Zaurus). Pour pouvoir effectuer une telle opération, il faut donc disposer d'un compilateur (gcc) et l'ensemble des outils qui va avec (appelé tool-chain) qui s'exécute sur un i586 mais qui fabrique des binaire ARM. Une telle tool-chain est généreusement fournit avec pdaXrom . Il contient gcc, les utilitaires associés mais aussi toutes les librairies de base pour compiler une application moderne (gtk, qt, X, etc.).
Dans la majorité des cas, un système linux est installé avec sa propre tool-chain et ses propres librairies. C'est le cas de la Mandriva et l'on comprends sans peine qu'un des "danger" de la cross-compilation, est que le compilateur s'emmêle les pattes entres les librairies i586 de l'hôte et celles de pdaXrom (binaires ARM). La résolution de ce problème passe d'abord par une habile manipulation des variables d'environnements pour tromper le systèmes (PATH, LD_LIBRARY_PATH, etc...). Le plus gros de la magie est ensuite pris en charge par l'utilitaire de configuration fournit avec les sources qui va générer les scripts de construction qui vont bien (chaîne automake, autoconf). C'est grâce à cela qu'une application qui n'avait jamais été pensée pour cela peut finir sur l'écran de notre Zaurus préféré.
La première chose à faire est d'installer le paquet de pdaXrom dédié à la cross-compilation. Ce paquet est à décompresser à la racine, donc en tant que root. Les commandes suivantes vont se charger de cette tâche et le cross-compiler pdaXrom sera installé en /opt/cross.
Une fois le kit installé, nous allos créer notre environnement de compilation d'application pdaXrom pour Zaurus. Tout ce qui suit n'a pas besoin d'être effectué en tant que root. En tout premier lieu, il faut créer sur l'ordinateur hôte un dossier qui va tout contenir. Dans cet exemple, le dossier sera ~/pdaXrom. Nous allons ensuite créer les dossiers suivants :
Pour éviter de se perdre dans les commandes à taper, un petit script à lancer avant toute compilation va nous être bien utile. Il va initializer un certain nombre de variable d'environnement et nous placer dans un sous-shell nous permettant de nous concentrer sur le seul portage. Une fois votre session de compilation terminé, il suffira de tape exit pour revenir à votre environnement normale.
Le script est à stocker dans le fichier ./script/start.sh :
Une fois ce fichier créé, lui donner l'attribut "exécutable" et le lancer :
Une invite vous indique que vous êtres dans l'environnement de cross-compilation, vous êtes maintenant près à compiler votre première application pour Zaurus...
L'exemple que je vais prendre est la dernière version d'OpenBox que nous allons créer de toute pièce :
La première étape est donc de récupérer les deux paquets de source :
Cette étapes est somme toute classique pour qui a déjà compilé une application sous linux. Elle consiste en la classique trinité config/make/make install.
Un ensemble de test va alors s'afficher pendant un certain temps. L'utilitaire est en train de vérifier que toutes les librairies nécessaire à la compilation sont bien présente sur la machine. Il va ensuite fabriquer les scripts de compilation. Notez le $DEFAULT_CONFIGURE_OPTIONS qui est une variable initialisée par notre script de démarrage. Elle contient un tas d'option permettant à la compilation de se passer correctement et à vous d'en taper le moins possible
Autre détail important, le paramètre --prefix. Nous allons grâce à lui forcer l'installation de la librairie à se faire dans le sous dossier ./dist/usr. C'est très important car sinon l'installation des librairies se feraients dans votre linux (en /usr...) et là, bonjour l'horreur
Il est maintenant temps de compiler notre application:
Avec une machine rapide, cette opération ne prends qu'une grosse minute pour se terminer (espérons le
sans erreurs. Il ne reste alors plus qu'à générer une installation :
L'opération est rapide. Une fois que l'utilitaire vous rends la main, vous pouvez vérifier que la compilation s'est correctement déroulée en tapant :
Nos fichiers sont donc bien installés. Essayons d'optimiser un peu tout cela.
Avant toute chose, nous devons penser à optimiser l'espace occupé par nos paquets Zaurus. La place y est grandement comptée. Pour cela deux opérations. D'abord enlever ce qui n'est pas absolument utile, ici le manuel :
Il y aurait encore du ménage à faire dans le même dossier, je vous laisse optimiser cela à votre goût mais faite attention de ne rien enlever de \"vitale\"
Ensuite nous pouvons optimiser la taille des binaires eux-même. C'est le rôle de la commande strip que nous pouvons efficacement combiner avec la commande find :
Nous pouvons vérifier le résultat en retappant les commande précédentes :
Nous constatons alors que la commande files qui donnait le fichier comme non stripped, le donne maintenant comme stripped. Et que sa taille a perdu plus de 14ko, ce qui n'est pas mal du tout !!
Vous l'avez déjà remarqué, une même application est souvent déclinée en plusieurs paquets ayant chacun son rôle. Généralement nous avons le paquet de l'application elle-même, celui des documentations, celui de développement. L'objectif étant de n'installer que le stricte minimum. Nous allons donc faire de même et créer deux paquets, l'un pour l'application openBox, l'autre pour les fichiers qui permettent de compiler des applications utilisant openbox.
Nous alons partir du principe que ./dist contiendra les fichiers de l'application seule. Nous allons donc créer un dossier au même niveau nommé dist-devel dans lequel nous allons déplacer les fichiers liés au développement.
Voilà, nous avons maintenant deux dossiers dist. Nous pourrions aller beaucoup plus loin en créant par exemple un dossier dist par langue (/usr/share/locale/), un autre contenant les themes d'openBox, etc.
Il ne reste plus qu'à fabriquer le fichier .ipk. Pour cela, créons dans le dossier dist, le dossier CONTROL dans lequel nous écrirons un fichier control contenant les informations suivantes :
Comme nous avons aussi un dist-devel, nous allons y répéter l'opération en mettant cette fois FileName: ./openbox-devel-3.4.4.ipk
Il ne reste plus qu'à lancer la commande mkipkg pour produire notre deux fichiers ipk dans le dossier ../../feed
Et le tour est joué!! Vous pouvez vérifier dans le dossier feed, les deux paquets devraient y être. Il ne reste plus qu'à installer le nouvel ipk dans Zaurus.
- répondre
pgas, le 31 March, 2006 - 06:54Pour créer le .ipk il vaut mieux eviter de faire les tar.gz à la main.
Utiliser mkipkg permet d'eviter des problèmes de nom de paquets et de fichier CONTROL foireux...et il sont sensibles ces bêtes là
La version dans le sdk actuel a un petit problèmes avec le tar récent, cette version marche bien:
dead://mail.pdaxrom.org/contrib/misc/mkipkg
(voir dead://www.oesf.org/index.php?title=Pdaxrom:_Create_An_Ipk_Howto )
- répondre
pgas, le 31 March, 2006 - 06:59aargh, je vais poster mes commentaires en anglais...au moins j'aurai une excuse pour les fôtes.
- répondre
Ulhume, le 31 March, 2006 - 09:45Non, il suffit que tu de créer un compte,comme cela tu peux éditer tes commentaires
- répondre
Ulhume, le 31 March, 2006 - 10:12Je connaissais pas, je vais regarder cela ce soir
- répondre
Dab, le 4 April, 2006 - 22:11J'avais souvent ce msg d'erreur pour l'installtion de divers packages :
Par exemple pour ethereal:
tar: ./control: Cannot change ownership to uid 501, gid 501: Operation not permitted
tar: .: Cannot change ownership to uid 501, gid 501: Operation not permitted
tar: Error exit delayed from previous errors
ipkg_install_file: ERROR unpacking control.tar.gz from ethereal_0.10.9-1_armv5tel.ipk
En fait le package à dû être crée avec un utilisateur ayant un uid et gid = 501 (comme c'est souvent le cas pour un utilisateur 'normal')
Après décompression, changement des droits en root, recompression plus de pb.
Installing ethereal...Done.
*** Command: add
*** Locating package
*** Found package on /mnt/card/root
*** Adding ethereal
*** Done.
Peut-être faudrait-il l'ajouter dans ta doc ?
Nota: je n'ai pas cherché à savoir quel était le pb sur le fond.
Dab
- répondre
Ulhume, le 5 April, 2006 - 01:38Tu utilises pdaXrom en mode "user" ?
- répondre
Dab, le 5 April, 2006 - 14:20Ben non en root mais l'uid 501 n'existe pas et mm si je le créer ça me pose toujours pb
Sinon ça marche impec avec le chown -R root.root indiqué ci-dessus.
- répondre
Ulhume, le 5 April, 2006 - 14:23C'est bizzare que je n'ai jamais eu le cas
- répondre
Dab, le 5 April, 2006 - 16:36Ca se produit uniquement lorsque j'installe un pkg dans une destination autre que '/'. Bah ça me va comme ça.
- répondre
Dab, le 5 April, 2006 - 17:42Et pour le noyau, il est aussi possible d'en compiler un autre ?
Et si oui ou peut-on trouver le .config de celui de pdaxrom ?
- répondre
Ulhume, le 5 April, 2006 - 17:43Et bien là c'est ma quête du moment, je n'ai pas encore réussi
Promis, dés que j'y arrive j'écris quelque chose 
- répondre
Dab, le 5 April, 2006 - 17:47Je vais surement m'y mettre aussi. just for the fun
http://www.pdaxrom.org/index.php?showid=47&menuid=1
- répondre
Ulhume, le 5 April, 2006 - 23:08Bein c'est sympa mais je connais. Je crois que je connais ce site juste par coeur
Mais cela ne m'est pas d'une grande aide.
- répondre
pgas, le 5 April, 2006 - 20:49pour ton probleme de compilation de kernel je te propose te decrire ce que tu fais et quel est le pb sur dans un thread sur oesf.org/forums, parcque sur ton site c'est un peu complexe pour moi de bien suivre ce qui se passe....
- répondre
Ulhume, le 5 April, 2006 - 23:09C'est sur que les commentaires ne sont pas le lieu idéal pour cela si c'est ce que tu veux dire. Tu n'aurais pas plutôt un mail pour que je te pose mes questions en direct
Je suis sur que tu as 90% des réponses qui me manque.
- répondre
pgas, le 6 April, 2006 - 05:06bein si...il doit être dans ta base pour drupal
pierre point gaston at gmail.com
(remarque les forums c'est bien aussi car les questions reponses peuvent aider d'autres personnes qui ont les meme problemes)
- répondre
Dab, le 16 April, 2006 - 16:32Alors ? résultat des courses
Vous avez créé un nouveau forum ? Je suis aussi intéressé par le tunning de mon zaurus et notamment par la création d'une ROM perso. J'ai surement dû louper des étapes, ça se termine toujours avec un ( de mémoire) machin.m4 manquant.
- répondre
sifourquier , le 5 August, 2006 - 02:51nouvelle adresse pour dll le cross-compiler dead://mail.pdaxrom.org/download/1.1.0beta1/Zaurus-7x0-860/cross-sdk-armv5tel-cacko-linux-3.4.5-2.2.5-softfloat.tar.bz2
- répondre
Guillaume , le 3 October, 2006 - 00:30Encore une nouvelle version?
Je poste au cas ou
dead://mail.pdaxrom.org/download/1.1.0r121/Zaurus-7x0-860/cross-sdk-armv5tel-cacko-linux-3.4.6-2.2.5-softfloat.tar.bz2
@+
- répondre
Ulhume, le 3 October, 2006 - 09:01Merci
Il faudrait que je merge les pages de cross-compiling histoire de les maintenir d'un bloc
- répondre
oxdot , le 1 November, 2007 - 07:09Salut,
Je me suis amuser a compiler gentoo pour mon akita, ... si, si ... le gestionaire, pas (encore
) la distrib (si tu connais pas c'est ici : http://www.obsession.se/gentoo/ ) et je constate, (une foi de plus), que tes articles sont vraiment bien foutu ! Je m'y mets pour la première foi et c'est passer comme une lettre à la poste ... merci.
Par contre j'ai chercher de la documentation pour la génération des ipk's (symboles pour le bureau, fichier conf. pour l'utilisateur ...) et je n'ai pas trouver grand chose sur le site de pdaxrom, bon c'est vrai que j'ai pas chercher des heures non plus ... (au fait la sdk n'est plus sur le lien que tu mentionne, mais je l'ai trouver ici : http://distro.ibiblio.org/pub/linux/distributions/pdaxrom/download/1.1.0... )
Si tu as un lien pour la doc je suis preneur ...
Salutations
- répondre
oxdot , le 4 November, 2007 - 15:51- répondre
Ulhume, le 4 November, 2007 - 18:43Ah bon ben ça va alors
Sinon, je ne sais pas si cela a le moindre intérêt pour quelqu'un mais j'ai pour pdaXrom un script qui "mime" bitbake (un fichier définition et un script qui l'utilise pour aller de l'url à l'ipkg), garanti 100% plein de bug mais ce que j'utilise pour faire tous mes paquets.
- répondre
Lindows , le 22 November, 2008 - 14:35Je déterre un article un peu ancien, mais bon.
J'utilise ubuntu 8.10. Je me demandais si on pouvait avoir plusieurs environnements de cross-compilation sur un même PC (même partition) dédiés à différents produits (téléphone portable , PSP etc..) sans interférences ? A+
- répondre
Ulhume, le 22 November, 2008 - 14:57Bof, c'est pas un forum, on peut "déterrer" ce que l'on veut
Oui, il n'y a aucun conflit possible, la chaîne de compilation est dans un dossier bien séparé. Et on peut encore améliorer cela par un chroot, donc pas de soucis à ce niveau là.
- répondre
Lindows , le 22 November, 2008 - 15:19Cool.
Poster un nouveau commentaire