Les iPod Touch et iPhone sont probablement les systèmes embarqués les plus largement disponibles auprès du grand public. Bien que le qualificatif « embarqué » ne soit associé qu’à leur autonomie, faible encombrement et absence de ports de communication, la puissance de calcul est compatible avec celle nécessaire pour exécuter un environnement Un*x dans lequel un développeur sous GNU/Linux ou *BSD sera familier. Nous proposons dans cette présentation, après avoir libéré son iPod Touch de l’emprise de Cupertino, d’exploiter une chaîne de compilation croisée libre exploitant les bibliothèques propriétaires mais gratuites d’Apple, pour développer nos propres applications. Nous nous intéresserons en particulier à l’accès aux périphériques matériels, qu’il s’agisse d’une liaison Bluetooth pour communiquer par une liaison sans fil avec des périphériques tels que la brique LEGO NXT, ou des accéléromètres. Ces développements passent nécessairement par la maîtrise de l’Objective-C 2.0, dont nous démontrerons la fonctionnalité comme langage de développement sous GNU/Linux lors de l’exploitation du compilateur LLVM.
1. Introduction
L'iPod Touch est un ordinateur populaire sur lequel le développement ne peut se qualifier d'embarqué que du fait de la taille et de l'autonomie de la plate-forme. La puissance de calcul est en effet digne de tout ordinateur : basé sur un processeur d'architecture ARM (Cortex A8) cadencé à 600 MHz, l'iPod Touch que nous utiliserons pour nos développements propose 256 MB de RAM et un support de stockage de masse non volatil de plusieurs gigaoctets [1] http://www.apple.com/ipodtouch/specs.html pour une version incomplète des spécifications techniques, Wikipédia et les références associées fournissant les valeurs numériques fournies dans le texte.. Le matériel nécessaire à l'exploitation des protocoles de communication sans fil wifi et Bluetooth est implémenté. Le système d'exploitation exécuté sur cette plate-forme - basé sur un noyau Mach intégré dans une version de MacOS X aux performances bridées pour s'ajuster à la puissance de calcul réduite par rapport aux autres plates-formes proposées par Apple - fournit un environnement Unix familier au lecteur. Nous avons expérimenté avec les versions 3.1.2 et 3.1.3 des firmwares imposés par Apple.
Notre objectif est d'exploiter cette plate-forme pour nous familiariser avec le développement sur ce système embarqué, en suivant le cheminement classique du développement sur une cible basée sur un processeur autre que celui de la plate-forme de développement : installation et mise en œuvre de la chaîne de compilation croisée, transfert du fichier binaire contenant la version exécutable de l'application sur le système embarqué, exécution et validation du bon fonctionnement. Cependant, le cas de l'iPod Touch va, dans un premier temps, se distinguer des projets n'exploitant que des outils libres (buildroot, par exemple) du fait de l'origine propriétaire de la plate-forme cible [2]É. Vautherin, Développer pour l'iPhone et l'iPad - Le guide du SDK, Créez vos applications pour l'App Store, Dunod (2010), ne présente que peu d'intérêt pour le développeur sous GNU/Linux, mais illustre quelques concepts sur les objets disponibles pour la réalisation des interfaces graphiques.. En effet, dans la continuité de sa philosophie de réduire le nombre de développeurs accédant aux ressources de ses ordinateurs, Apple bride la capacité d'exécuter des binaires issus de sources autres qu'iTunes. Notre première tâche consiste donc à libérer l'iPod de cette contrainte afin d'étendre la gamme de programmes exécutés par l'ordinateur aux programmes que nous développerons au cours de cette présentation (jailbreak).
2. Libérer son iPod Touch
La configuration imposée par Apple est de n'autoriser que l'exécution de programmes issus de son dépôt iTunes. Cela signifie notamment que le développeur doit s'enregistrer (en échange d'une contribution financière) auprès d'Apple, et que la gamme des applications accessibles est celle mise à disposition après censure par les gestionnaires d'iTunes. Ainsi, une vaste gamme d'applications, et notamment un serveur OpenSSH pour se connecter par wifi à l'iPod, sont inaccessibles.
Dans l'incessante lutte stérile entre les développeurs de logiciels propriétaires et les hackers curieux de découvrir les outils en leur possession, un outil a été développé pour libérer l'iPod de la contrainte d'iTunes : Spirit est un outil fonctionnant sous tout système d'exploitation largement accessible - et notamment GNU/Linux - afin de patcher le système d'exploitation fourni par Apple sur iPod. Il s'agit d'une méthode qualifiée de untethered, signifiant que la modification n'est pas à refaire à chaque réinitialisation de l'iPod : le patch est appliqué en mémoire non volatile et s'applique jusqu'à la prochaine mise à jour du système d'exploitation. Notez qu'il s'agit uniquement de l'application d'un correctif sur le système d'exploitation existant : la version du système d'exploitation n'est pas modifiée par cette opération.
Spirit s'obtient à http://spiritjb.com et s'applique par l'exécution du daemon usbmuxd suivi de spirit. Noter que Spirit suppose qu'il s'applique sur un système d'exploitation vierge de toute modification antérieure sur l'iPod : nous conseillons donc de restaurer son iPod sur une version 3.1.3 du firmware (induisant la perte de toutes les données personnelles lors de la mise à jour) avant d'appliquer la procédure de libération. Par ailleurs, Spirit nécessite l'installation des bibliothèques permettant la communication avec iPod (libimobile).
Une fois l'iPod libre, un outil familier aux utilisateurs de Debian GNU/Linux est un gestionnaire de paquets nommé Cydia, installé automatiquement par Spirit. Une alternative, compatible avec cydia, que nous préférons pour des raisons d'ergonomie, est rock, disponible sous forme de paquet dans cydia. Dans tous les cas, les outils classiques de gestion des paquets apt-* sont fournis. Notre première tâche est donc d'étoffer la gamme de logiciels disponibles sur l'iPod : une console nommée MobileTerminal fournira un environnement proche de l'xterm classique (Fig. 1), et donne accès à tous les outils en ligne de commandes Unix disponibles dans divers paquets que nous laissons le soin au lecteur d'explorer (catégories Networking pour le serveur OpenSSH et les services associés inetutils, catégorie Utilities pour les applications classiques en console que sont Core Utilities, et évidemment Development, qui donne accès à Developer Commands, diff et autres outils fondamentaux). Bien que le compilateur libre llvm-gcc à destination de l'architecture ARM soit disponible comme paquet fonctionnel sur iPod, nous allons nous restreindre à la méthode classique de cross-compilation qui permet de séparer la phase de développement sur un PC classique (notamment muni d'un clavier, interface plus simple à manier que l'écran tactile pour coder), et l'exécution sur la plate-forme cible (ici l'iPod).
3. Installation de la chaîne de compilation croisée et des bibliothèques propriétaires Apple
Le projet code.google.com/p/iphonedevonlinux propose d'exploiter le compilateur llvm-gcc - et plus exactement la branche LLVM (1) http://llvm.org , qui est la seule à implémenter les méthodes d'Objective-C 2.0 (section 5) - à destination de la cible ARM comme outil libre d'une part, et les bibliothèques propriétaires fournies par Apple dans son outil XCode d'autre part, pour générer un environnement de travail capable de compiler un programme exécutable sur iPod. Le script toolchain.sh se charge a priori de rapatrier toutes les informations disponibles, mais une lecture de ce code et la compréhension des diverses étapes n'est pas inutile pour le faire fonctionner (2) http://www.saurik.com/id/4 . En effet, l'évolution permanente des archives nécessaires et la diversité des installations GNU/Linux exploitées rendent parfois le script inefficace.
Nous supposerons que l'installation de la chaîne de compilation croisée se déroule dans le répertoire $IPOD.