Blog d'un enthousiaste du logiciel libre, utilisateur de GNU/Linux et auto-hébergeant ses services Internet.

Replicant, le système embarqué entièrement libre dérivé d'Android

Cela fait un long moment que je n'ai rien publié sur mon blog. Du coup, aujourd'hui alors que je nettoyais les commentaires indésirables laissés sur mon blog (j'ai de gros problèmes de spam et j'ai l'impression que l'antispam dotclear ne fonctionne qu'une fois sur deux), j'ai pris l'initiative d'écrire un petit billet pour faire part de mon investissement récent dans le projet Replicant.

5.jpg

Mon premier « smartphone » a été un Neo FreeRunner, que j'ai vaguement présenté dans un billet précédent. Pourtant, j'avais des problèmes de batterie qui se déchargeait trop vite. Armé de mon fer à souder pour CMS, j'ai entrepris d'effectuer un Autonofix, mais… sans succès : j'ai fini par endommager la puce GSM du FreeRunner. Du coup, il n'était plus utilisable comme téléphone pour tous les jours.

J'ai finalement choisi d'acheter un HTC Dream, qui tourne donc avec un noyau Linux et Android. Le problème, me direz-vous, c'est qu'Android bien que 100% libre (qu'on ne me dise pas qu'Android n'est pas totalement libre, c'est faux) nécessite des librairies et firmwares non-libres qui sont spécifiques à chaque appareil. Par exemple, pour le HTC Dream, on ne peut quasiment rien faire avec uniquement le code libre: pas d'audio, pas de GSM ni de 3G, bref rien.

android_skating.png

Pourtant, un projet (en fait, c'est plutôt un développeur et une petite communauté autour) nommé Replicant tend à produire une version 100% libre d'Android pour le plus grand nombre de téléphones, tablettes, etc, qui fonctionnent sous Android. Et le HTC Dream est un des téléphones des mieux supportés par Replicant. Pour avoir une idée de l'état de la prise en charge des appareils pour lesquels Replicant fournit des images, vous pouvez consulter http://trac.osuosl.org/trac/replica....

Le HTC Dream est donc bien supporté par Replicant : seuls quelques éléments assez négligeables sont absents, tels que l'appareil photo ou les accéléromètres. C'est Replicant en version 2.2 (qui est basée sur CyanogenMod 6 qui est basée sur Android 2.2 FroYo) qui tourne sur le HTC Dream. Pourtant, certains points restent très négatifs, comme l'absence d'un chargeur de démarrage (un genre de BIOS pour le matériel embarqué) libre ou encore le fait que le modem a accès à la RAM principale du téléphone et à d'autres choses gênantes comme le GPS.

J'ai donc installé Replicant sur mon HTC Dream et non sans peine : pour faire tourner Android 2.2, la mémoire flash (NAND) doit-être repartitionnée pour laisser une plus grande place au système.

banner.png

Après plusieurs semaines d'utilisation, j'étais déjà relativement présent sur le canal IRC #replicant sur irc.freenode.net et j'ai commencé à faire quelques petites choses pour aider un peu, vu l'énorme quantité de travail qu'il reste. Ayant toujours rêvé (et je ne dis pas de bêtises, j'ai toujours voulu le faire) compiler Android depuis le code source, j'ai téléchargé le code source de Replicant et l'ai compilé. Il y avait des erreurs de compilation, auxquelles j'ai trouvé solutions : et hop, ma première contribution au code de Replicant : corriger les erreurs de compilation ! J'ai aussi écrit des scripts pour mettre en place la liaison réseau par USB afin d'avoir internet sur l'appareil sans utilise le WiFi (qui demande un microcode non-libre). Enfin, j'ai voulu utiliser le SDK Android pour écrire des applications, mais il n'est disponible qu'en version 32 bits, alors que mon ordinateur est un 64 bits : j'ai donc modifié tout ce qu'il fallait pour à la fois pouvoir compiler Replicant sur un système 64 bits sans librairies de compatibilité ou autre mais aussi pour avoir un SDK en 64 bits (avec tous les outils qui vont avec, adb, fastboot, etc). Après quelques temps, tout cela fonctionnait (j'avais commencé à documenter la marche à suivre mais c'est vraiment un gros travail et je n'ai pas eu le courage de tout reprendre pour bien documenter), mais il restait de nombreuses erreurs de compilation du SDK, que j'ai corrigé afin d'avoir quelque chose qui fonctionne. Du coup, mes corrections ont été intégrées au code de Replicant et hop, une version 100% libre du SDK Android (sans les API non-libres de Google) !

L'étape d'après a été de regarder le code bas-niveau, tel que le code qui touche directement au hardware. Jusque-là, seul GNUtoo, le développeur principal du projet, avait apporté des améliorations à cette partie là du code (au sein du projet Replicant), pourtant la plus essentielle. Ma première contribution au code bas-niveau a été d'activer le contrôle du volume lors des appels et d'activer le support des adaptateurs permettant de brancher des jacks 3.5mm : pour des écouteurs. Passé cette étape, je suis vraiment devenu développeur Replicant et j'ai commencé à y consacrer pas mal de temps.

devices.jpg

Depuis, j'ai apporté un certain nombre de choses à Replicant, et dernièrement, la majorité de ce que je fais pour le projet tourne autour de la prise en charge du Nexus S, le nouveau smartphone de Google. L'avancement de sa prise en charge est disponible sur http://trac.osuosl.org/trac/replica.... Heureusement, je suis entouré de personnes formidables et compétentes pour m'aider et me conseiller !

Le développement et la diffusion de Replicant dépend d'un effort communautaire et volontaire : c'est grâce à vous que le projet pourra se développer afin de permettre la réalisation d'un système Android entièrement libre pour le plus grand nombre de smartphones, tablettes et autres ! Ainsi, toute forme d'aide serait fortement appréciée, et les moyens d'aider le projet ne manquent pas :

  • Aider à faire connaitre Replicant, soit sur Internet en utilisant des réseaux sociaux tels que identi.ca ou directement en parlant du projet avec des personnes qui pourrait-être intéressées
  • Installer Replicant si votre appareil est supporté
  • Tester ce qui fonctionne et ce qui ne fonctionne pas dans les nouvelles versions ou tester la téléphonie dans votre pays si cela n'a pas encore été fait
  • Proposer des logiciels libres pour Android dans le dépôt F-Droid, l'alternative libre au Market d'Android
  • Écrire de la documentation et des tutoriels quand à l'utilisation de Replicant
  • Si vous êtes un développeur, nous rejoindre afin d'achever le remplacement des parties manquantes sur les périphériques que nous supportons déjà
  • Si vous êtes un développeur, lancez-vous dans la tâche de faire fonctionner Replicant sur d'autres périphériques (e.g. smartphones récents, tablettes, etc)

Le meilleur moyen de commencer à s'investir dans le projet est sans doute de venir sur IRC : #replicant sur irc.freenode.net de vous présenter et de venir discuter (en anglais de préférence).

Commentaires

Par : Tjundi — Date : 11/08/2011 (00:09)

Salut PaulK,

Je suis curieux de savoir comment vous vous y prennez pour developper les driver propre au hardware ?
Si je comprend bien vous n'avez pas acces aux codes sources des drivers fournis par les constructeurs et encore moins a une documentation j'imagine ?
Comment faites-dont vous ? Vous avancez a tatons en esperant faire reagir le device pour trouver un truc interessant ?

Réponse : Enfait, on a généralement toujours le code source du noyau (Linux), mais les drivers sont souvent des « passoires ». Si je prend l'exemple de l'accéléromètre/magnétomètre du HTC Dream, AKM8976A, les données sont directement renvoyées telles que reçues du composant (du bus I2C). La partie non-libre est généralement dans des librairies ou des binaires lancés en « userspace », donc chargés par le système et non le noyau. Pour AKM8976A, c'est le démon akmd qui va récupérer les données « brutes », telles que renvoyées par le driver et y appliquer le traitement de données approprié pour avoir quelque chose d'utilisable. Donc ici, on a les données brutes (qui sortent du driver du noyau) et les données qui sortent du binaire akmd. Il reste ensuite à découvrir ce qui se passe entre les deux (sachant que ce n'est pas juste un algorithme à trouver mais aussi comprendre comment la puce est calibrée, etc).

Ce n'est pas nécessairement toujours le cas : pour l'accéléromètre du Nexus S, j'ai eu de la chance, très peu de traitement de données est nécessaire et j'ai pu écrire un remplacement libre pour la librairie qui fait la liaison entre le driver et le reste du système (qui publie les données sur un /dev/input/event*) en quelques jours seulement. (https://gitorious.org/replicant/libakm_free).

Pour le reste, ce n'est pas forcément pareil selon ce que l'on veut ré-écrire : par exemple pour le gralloc, qui sert à faire le lien entre le framebuffer (driver linux) et le surfaceflinger d'Android, j'ai simplement eu à utiliser celui « par défaut » d'android et de changer deux ou trois choses pour que ça marche comme il faut (par exemple, sur le Nexus S, les couleurs sont en BGRA au lieu de RGBA).

Donc même si c'est souvent assez dur, surtout quand il y a du traitement de données comme pour AKM8976A (dont je n'ai toujours pas réussi à comprendre le fonctionnement complet), cela reste faisable puisque nous avons le code source des drivers.

Par : Dalz — Date : 14/08/2012 (17:15)

Ah c'est de la retroingénierie alors... C'est pas légal en théorie, mais l'initiative est tellement louable que je plussoie... ^_^... Vous allez fournir le premier smartphone pour Stallman en tout cas ! Bravo.

Par : Car Diagnostic Interface — Date : 26/10/2013 (07:54)

These accomplishments serve as further proof that BMW is the true leader in the premium vehicle segment, and are a true testament to the success of our design philosophy and strategies

Ajouter un commentaire

Nom ou pseudo :
Adresse email :
Site web (facultatif) :
Commentaire :

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : http://blog.paulk.fr/trackback/49

Fil des commentaires de ce billet

Propulsé par Dotclear — Thème « PaulK »