Cet article détaille l'installation de l'environnement de développement Maemo 4.1.2 avec une Debian Lenny sur architecture amd64. Celui-ci sera utilisé pour développer une application spécifique sur un N800 fraichement mis à jour.
Comme évoqué dans l'article précédent, les derniers binaires fournis par Nokia ne sont plus disponibles pour architecture amd64, mais uniquement pour i386. Leur installation nécessite donc de mettre les mains dans le cambouis, non sans avoir au préalable maudit les équipes d'intégrateurs de Nokia.
Sratchbox ne peut pas fonctionner lorsque le support VDSO du noyau est activé. Attention toutefois, la désactivation de cette option peut poser des problèmes sur certains systèmes. Il est donc nécessaire de commencer par tester le fonctionnement du système sans cette option. Pour cela, on crée une nouvelle entrée dans le fichier de configuration de grub (/boot/grub/menu.lst) juste après la liste des noyaux mise à jour automatiquement :
### END DEBIAN AUTOMAGIC KERNELS LIST
title Debian GNU/Linux Dev NOKIA, kernel 2.6.26-2-amd64
root (hd0,0)
kernel /boot/vmlinuz-2.6.26-2-amd64 root=/dev/sda1 vdso32=0 ro
initrd /boot/initrd.img-2.6.26-2-amd64
Puis on recrée le secteur de boot et on redémarre avec cette nouvelle entrée :
# update-grub # reboot
Le test ayant été concluant, cette entrée peut ensuite être configurée par défaut, ou au choix n'être utilisée que lors du développement avec ce SDK.
La version de QEMU utilisée par Scratchbox doit pouvoir mapper la mémoire à partir de l'adresse 4096. On vérifie donc que mmap_min_addr ne dépasse pas cette valeur sur le système hôte :
# cat /proc/sys/vm/mmap_min_addr
4096
Dans le cas contraire, il suffit de créer ou modifier le fichier de configuration correspondant.
# echo "vm.mmap_min_addr = 4096" > /etc/sysctl.d/mmap_min_addr.conf # /etc/init.d/procps restart
Un autre problème peut se poser lors de l'utilisation de Scratchbox. La version de fakeroot qu'il utilise communique avec le démon faked par des sockets TCP locales. Il est possible que le système tombe à court de socket disponible lors de la création d'un paquet sous fakeroot. Pour éviter cela, il suffit de modifier la plage des ports réservés aux sockets locales sur le système hôte :
# cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
Pour étendre au maximum les sockets locales :
# echo "2048 65535" > /proc/sys/net/ipv4/ip_local_port_range
Pour une modification permanente, on peut rajouter la ligne suivante au fichier /etc/sysctl.conf :
net.ipv4.ip_local_port_range = 2048 65535
Puis redémarrer procps :
# /etc/init.d/procps restart
Les binaires Nokia étant compilés pour i386, le système devra disposer des librairies ia32. Le serveur X Xephyr sera utilisé pour émuler l'écran du N800 afin de tester les applications graphiques. Nous allons donc installer simplement les paquets correspondants :
# apt-get install ia32-libs-gtk ia32-libs xserver-xephyr
Comme je l'ai déja évoqué, Nokia ne propose Scratchbox qu'en paquets binaires pour i386. La méthode d'installation préconisée par Nokia consiste à installer un environnement chrooté i386 sur le système hôte et à installer Scratchbox dedans. Cette méthode semble bien lourde et je lui ai préféré l'installation des binaires i386 directement sur le système hôte avec le support des librairies ia32.
J'ai pour cela utilisé une version modifiée du script d'installation automatique fourni par Nokia. Mes modifications portent sur 3 points :
Attention. L'installateur est un logiciel propriétaire et il ne devrait donc pas être modifié sans l'accord de Nokia. Toutefois, l'équipe intégration n'a toujours pas répondu à ma demande de publication de patch après 7 mois d'attente. Je considère donc que Nokia accepte implicitement cette publication, ou du moins n'y porte pas grande attention. Gardez toutefois à l'esprit que ce patch n'est pas officiel et que vous l'utilisez à vos risques et périls.
$ wget http://repository.maemo.org/stable/diablo/maemo-scratchbox-install_4.1.2.sh $ wget http://www.site-sans-nom.org/rc2/ressources/maemo-scratchbox-install_4.1.2_amd64.diff $ chmod 750 maemo-scratchbox-install_4.1.2.sh $ patch < maemo-scratchbox-install_4.1.2_amd64.diff $ su # ./maemo-scratchbox-install_4.1.2.sh
Pendant le processus d'installation, dpkg signale que les paquets installés ne correspondent pas à l'architecture du système. Rien d'étonnant à cela.
dpkg - avertissement, problème contourné à cause de --force : l'architecture du paquet (i386) ne correspond pas à celle du système (amd64)
Il faut maintenant ajouter un utilisateur dans scratchbox. Celui-ci doit être un utilisateur existant du système hôte qui sera utilisé pour développer avec le SDK Maemo.
# sb-adduser rsl # exit $
L'utilisateur que l'on vient d'ajouter dans scratchbox va maintenant devoir fermer sa session et en rouvrir une nouvelle afin que ses nouveaux droits soient pris en compte. Après cela, on va pouvoir installer le SDK sur le système hôte avec l'identité de cet utilisateur.
$ wget http://repository.maemo.org/stable/diablo/maemo-sdk-install_4.1.2.sh $ chmod 755 maemo-sdk-install_4.1.2.sh $ ./maemo-sdk-install_4.1.2.sh
Le script d'installation automatique démarre. Nous allons ensuite choisir l'option 3 Runtime + All Dev puis accepter la licence d'utilisation. Le script va alors assurer l'entière installation du SDK Maemo avant de nous rendre la main.
Il ne nous reste plus qu'à vérifier que le SDK soit bien fonctionnel. Pour cela, nous allons commencer par démarrer le serveur Xephyr qui sera utilisé par l'environnement graphique du SDK, puis entrer dans scratchbox :
$ Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -extension Composite & $ /scratchbox/login
Nous voici maintenant dans l'environnement scratchbox, dont le prompt est facilement reconnaissable. La cible utilisée est DIABLO_ARMEL. On pourra utiliser au besoin la commande sb-menu et son option Select pour passer sur la cible DIABLO_X86, mais nous continuons pour l'instant avec cette cible. Nous allons simplement permettre à Scratchbox d'utiliser Xephyr pour déporter l'affichage de son environnement graphique puis lancer cet environnement.
[sbox-DIABLO_ARMEL: ~] > export DISPLAY=:2 [sbox-DIABLO_ARMEL: ~] > af-sb-init.sh start
La fenêtre du serveur Xephyr présente bien maintenant l'environnement Maemo.
Nous allons maintenant télécharger le progamme d'exemple GTK Hello World, le compiler et l'exécuter afin de tester le SDK.
[sbox-DIABLO_ARMEL: ~] > wget https://garage.maemo.org/svn/maemoexamples/tags/maemo_4.1/support-libraries/gtk_helloworld-1.c [sbox-DIABLO_ARMEL: ~] > gcc -Wall -g gtk_helloworld-1.c \ `pkg-config --cflags gtk+-2.0` -o gtk_helloworld-1 \ `pkg-config --libs gtk+-2.0` [sbox-DIABLO_ARMEL: ~] > ./gtk_helloworld-1
Xephyr affiche maintenant l'interface du programme d'exemple.
Nous pouvons maintenant quitter le SDK, qui semble pleinement fonctionnel.
[sbox-DIABLO_ARMEL: ~] > af-sb-init.sh stop [sbox-DIABLO_ARMEL: ~] > exit logout $ killall Xephyr $
Et voilà, l'environnement de développement étant installé, il ne reste plus qu'à se mettre au code...
|
|
|