Qu'est-ce qu'une custom ROM ? Explications par Guillaume Lesniak

Posté le par | Réponse(s) : 3

C'est par le plus grand des hasards que je suis tombé sur une vidéo Google+ postée par Guillaume Lesniak qui retranscrit la conférence se déroulant au cours du PAUG (Paris Android User Group, communauté de passionnés et de professionnels Android de Paris) à l'Open World Forum 2012 (premier sommet mondial rassemblant les décideurs, les communautés, les développeurs pour cross-fertiliser les initiatives technologiques, économiques et sociétales ouvertes, afin de bâtir le futur du numérique). J'ai trouvé cette conférence très intéressante et expliquée de manière simple et concise afin de  mieux comprendre l'environnement de nos Smartphones Android, les ROM, les "Custom ROM". Celles et ceux qui se sont posé la question ou qui ont eu envie de passer le pas en "bidouillant" son téléphone mobile a souvent fait des recherches sur le Net et, parfois les résultats sont confus à cause des termes employés ou tout simplement parce que les pages sont très souvent en anglais.

Je décide donc de relayer la vidéo sur ce modeste billet pour permettre une plus large diffusion de cette conférence. La vidéo durant un peu plus d'une heure (je sais que certain décrochent au bout de 10 minutes) et la qualité sonore étant malheureusement pas très bonne, je prends la liberté d'en retranscrire par écrit les grandes lignes.

Qui est Guillaume Lesniak ?

Aussi connu sous le pseudonyme de "XPLODWILD", Guillaume Lesniak est étudiant en 3ème année de licence MIAGE à Nancy, programmeur dans différents langages (C/C++/JavaScript/PHP), chef de projet d'un jeu 3D en ligne, contributeur pour CyanogenMod depuis 1 an, et guitariste/bassiste.

Qu'est qu'une ROM ?

Tous les téléphones et tablettes Android tournent avec le même OS (Système d'exploitation) mais comportent des différences au niveau de l'interface ou dans l'expérience utilisateur (la manière dont vous allez pouvoir utiliser le téléphone/tablette). À la base, Google propose aux constructeur d'appareils et opérateurs une ROM "pure" et les autorise à modifier le système Android  comme ils le souhaitent à partir du moment ou la compatibilité avec le magasin d'application Google (Google Play) est respectée. Les constructeurs et opérateurs vont donc proposer sous forme de calque, une surcouche. Par exemple : la page Touchwiz chez Samsung, Motoblur chez Motorola, SENS chez HTC. Très peu de produits proposent sur le marché des appareils qui disposent de l'interface telle que Google l'a conçu à l'origine. La configuration d'origine se retrouve principalement sur la gamme Nexus de Google.

Pourquoi ajouter une surcouche constructeur/opérateur ? Ces surcouches deviennent des arguments commerciaux parce qu'ils ont rajouté des fonctionnalités dont on a besoin ou pas.

Qu'est-ce qu'une ROM alternative ?

Une ROM custom est une ROM développée par la communauté (communauté de développeurs indépendants travaillant "à la maison") et non par les constructeurs.

Chaque ROM est bien spécifique à chaque produits car elle est développée et compilée (compiler consiste à transformer un code source lisible par un humain en un fichier binaire exécutable par une machine) pour un matériel spécifique, en particulier pour le processeur. Une ROM pour un Galaxie S3 ne fonctionnera pas pour un Galaxie S2...

Il existe deux types de ROMs custom :

  • les ROM WinZip : ROM basée sur les ROMs constructeur récupérée sur les fichiers de mises à jours des constructeurs. Cette ROM va être décompressée, on y remplace des fichiers, des applications, changer des paramètres. On va recompresser tout ça et publier la nouvelle ROM Zippée sur Internet. Les avantages sont la rapidité et la simplicité mais limité par les applications et le framework (kit de composants logiciels structurels, qui sert à créer les fondations ainsi que les grandes lignes de tout ou d’une partie d'un logiciel (architecture)) fournis par le constructeur.
  • Les ROMs AOSP : ROMs basée sur les sources Android publiées par Google. Elles sont plus ou moins compliquées à développer, à compiler et à faire fonctionner sur un produit particulier mais ont l'avantage d'avoir une liberté infinie puisqu'elles sont directement basées sur les sources du système car on peut ajouter ou modifier des fonctions comme on veut.

CyanogenMod

À l'origine de cette ROM AOSP, Steve "Cyanogen" Kondik a commencé à compiler des ROMs depuis la version 1.5 d'Android.

Le but de cette ROM est de proposer des améliorations et des optimisations discrètes intégrées au sein du système en ajoutant des fonctionnalités. Une expérience Android améliorée de celle proposée par Google.

CyanogenMod permet d'avoir un système toujours à jour, supporte plus de 140 périphériques tablettes/téléphones et versions confondus, est le développement/maintenance est assurée par plus de 70 contributeurs actifs et des centaines de contributeurs occasionnels.

La communauté CyanogenMod

CyanogenMod et ses mises à jour

CyanogenMod propose des mises à jours quotidiennes. Chaque périphérique possède des "nightlies" : quotidiennement, les développeurs prennent la base de source de CyanogenMod qui, chaque nuit,  va être compilée et proposée le lendemain matin prête à l'installation pour chaque périphérique supporté par CyanogenMod.

Les dépôts de CyanogenMod sont régulièrement mis à jours en fonction des changements sur les dépôts de Google, que ce soit des mises à jours mineures (correction de bugs, faille de sécurité, etc..) ou des mises à jours plus importantes.

Il existe une version majeure à chaque mises à jour majeure d'Android

  • CM 10 pour Android 4.1
  • CM 9 pour Android 4.0
  • CM 8 pour Android 3.0 (pas de CyanogenMod 8 car les sources de Android 3.0 n'ont pas été libérés par Google).
  • CM 7 pour Android 2.3
  • Etc...

Mise à jours d'Android : pourquoi les constructeurs mettent autant de temps (6 mois voire plus) à proposer des mises à jours majeurs d'Android alors que les mises à jours CyanogenMod arrivent en 2//3 semaines ?

Le temps de développement d'une version majeure varie en fonction de 3 grands facteurs :

  • Les changements d'interface matériel (HAL, une couche destinée à isoler les dépendances au matériel des autres aspects du système d’exploitation)
  • Les changements dans le framework (par exemple : écran d'accueil, écran de verrouillage, etc..)
  • Les changements dans les applications

C'est pourquoi il a été beaucoup plus facile de passer d'Android 2.2 à Android 2.3 que de passer d'Android 2.3 à Android 4.0 car il est plus simple de récupérer le travail déjà effectué et les appliquer sur une nouvelle base de code. Android 4.0 Ice Cream Sandwich a changé dans tous les aspects de son système et les développeurs ont dû le recoder entièrement en s'adaptant aux nouvelles lignes de conception que Google a introduit.

Comment porter CM sur un téléphone ?

C'est ici que les aspects techniques vont être mis en avant et Guillaume Lesniak part du principe que l'on a des connaissances en système Android et en système Linux. Ne pas voir ici une recette de cuisine à suivre à la lettre car une installation dépend du type de matériel utilisé.

Les outils :

  • Un système à base UNIX (soit Linux ou Mac OS X). Compilation théorique sous Windows...
  • Le SDK Android (adb)
  • Les sources d'Android (AOSP) et/ou CyanogenMod. L'avantage de la sources CyanogenMod est qu'il y a plus de plate-formes supportées.
  • Un minimum d'expérience en système Linux
  • Un périphérique Android dont le bootloader (chargeur d'amorçage est un logiciel permettant de lancer un ou plusieurs systèmes d'exploitation) est déverrouillé.

Voici une vue d'ensemble du processus d'installation :

1. Tout d'abord, il faut préparer ses fichiers dans le device tree, récupérer le kernel et les fichiers propriétaires. À la racine du dossier de sources (root), on va trouver device, kernel et vendor.

  • Le device tree c'est quoi exactement ? Il se présente sous la forme de : device/constructeur/modèle. Il contient toutes les informations relatives au périphérique :
    • Boardconfig.mk contient les informations de partition, les paramètres du kernel, flags de compilation à l'intérieur de la mémoire du téléphone
    • Device.mk contient le nom du périphérique, type du périphérique, fichiers spécifiques à compiler
    • init.board.rc contient les services et binaires à exécuter au démarrage du système qui va s'occuper de lancer les services nécessaires au système (lancer des applications, changer les permissions sur des dossiers ou des périphériques système, créer des dossiers, etc..)
    • Dossier "overlay" définit des paramètres spécifiques pour les applications système en "écrasant" des paramètres système par défaut pour mettre ses propres paramètres (la luminosité d'écran par exemple)
    • il peut aussi contenir des modules spécifiques au périphérique (HAL, les wrappers qui sont des modules qui s'intercalent entre le système Android et le vrai module caméra par exemple, en ré-implémentant chaque fonction de ce module afin de voir ce qui est transmis dans le module caméra et de modifier ce module caméra). Ces modules sont optionnels, pas forcément nécessaires et n'interviendront que plus tard dans le portage
    • des autres modules spécifiques au périphérique (DeviceSettings pour CyanogenMod qui correspond aux "paramètres supplémentaires" ou "paramètres avancés") et autres application de configuration spécifique à un appareil
  • Le kernel. Les sources du kernel sont mis à disposition par les constructeurs, elles sont sous licence LGPL.
    • Il suffit de les copier dans le dossier kernel
    • il reste très souvent inchangé, En général, seule la defconfig est modifée pour parfaire certains réglages (par exemple désactiver le module wifi)
    • le kernel peut être partager au sein d'une même famille d'appareil, par exemple le Galaxy Note et le Galaxy S2 partagent le même kernel
  • Les fichiers propriétaires (vendor) sont en fait un ensemble de librairies, de binaires et de fichiers de configuration non open-source. Ils vont concerner :
    • la radio : le petit module qui va permettre l'interaction entre le système Android et l'antenne GSM
    • les bibliothèques EGL : carte graphique
    • les modules HAL (caméra, GPS, audio, etc..)
    • leurs fichiers de configuration
    • et leurs dépendances

Certains constructeurs distribuent les sources de certains de ces modules. Il faut savoir que les fichiers propriétaires sont la source principale des bugs puisque certains constructeurs, au lieu d'adapter les modules au système Android, ils vont adapter le système Android aux modules

2. La compilation

La compilation est une étape extrêmement simple (selon Guillaume). Elle est spécifique à chaque appareil. Pour un Galaxy S3 (i9300), il faut taper en console .build/envsetup.sh puis brunch i9300 (la commande "brunch" est spécifique à CyanogenMod, pour les autres AOSP ce sera "lunch"). En fonction de la puissance de l'ordinateur utilisé pour la compilation, la durée va de 20 minutes à plusieurs heures selon l'utilisation ce ccache ou non (ccache est un système qui permet de mettre en cache des fichiers compilés et donc d'accélérer la compilation)...

Quelques trucs et astuces pour la compilation :

  • pour recompiler juste un dossier (où se trouve un android.mk), il faut taper la commande mmm [-B] chemin/vers/dossier/à/recompiler
  • pour supprimer les fichiers de sortie : soit make clobber soit rm -rf out
  • si vous n'utilisez pas la commande "brunch", penser à utiliser -j <threads> : make otapackage -j 12
  • vérifier si on utilise ccache en tapant : ccache -s
  • pour créer une image de recovery (si vous avez une partition dédiée) : make recovery -j 8 un fichier recevery.img est créé et est récupérable et flashable par fastboot
  • pour créer une image de boot : make bootimage -j 8un fichier boot.img est créé et est récupérable et flashable par fastboot

3. Le premier démarrage

Une fois votre ROM compilée, que vous avez flashé votre kernel, que vous avez mis votre ROM sur carte SD, vous l'avez flashé avec votre recovery et il arrive le temps de votre premier démarrage qui est toujours un grand moment de stress

Le premier démarrage s'étale sur 4 niveaux de chance :

  • si vous n'avez pas de chance, le téléphone reste bloqué sur l'écran du chargeur de démarrage (le logo de la marque de l'appareil reste figé et rien ne se passe)
  • si vous êtes un peu chanceux, le téléphone affiche un écran noir mais rien ne va se passer
  • si vous êtres très chanceux, l'animation de démarrage va s'afficher mais le démarrage ne se termine pas (c'est le bootloop)
  • si ça marche du premier coup et que vous voyer l'animation de démarrage et  le launcher , allez de suite jouer au loto !

Les symptômes les plus communs aux problèmes de démarrages :

  • le téléphone reste bloqué sur l'écran du chargeur de démarrage :
    • si adb (outil de débugage Android) ne détecte rien, il y a un problème de kernel (soit pas la bonne configuration, soit quelque chose s'est mal passé)
    • si adb détecte le téléphone, cela signifie que le ROM est incomplète (voir le fichier device.mk)
  • le téléphone affiche un écran noir mais rien ne se passe :
    • voir ce que adb logcat raconte
    • vérifier qu'il ne manque pas des fichiers propriétaires (notamment les librairies EGL)
    • le problème peut être dû à un init<board>.rc incomplet
    • il se peut aussi qu'un build.prop soit invalide (mauvaise permission - mettre build.prop en lecture seule depuis Jelly Bean -, DPI incorrect, etc..)
  • l'animation de démarrage s'affiche mais le démarrage ne se termine pas (bootloop) :
    • dû à un service attendu et qui ne se lance pas, vérifier le fichier init.rc du constructeur et le comparer avec le vôtre
    • dû aussi à un /data qui n'a pas été effacé  (AOSP pas compatible avec /data, dossier qui a été bidouillé par le constructeur)
    • une bibliothèque fait planter un service système, et redémarre en boucle (librairie dont les dépendances ne sont pas satisfaites ou des fichier de configuration manquants)
  • l'animation de démarrage et  le launcher, félicitations

Débug : trucs et astuces

  • une commande à retenir : adb logcat ou adb lolcat (marche aussi lol)
  • si le recovery est contenu dans le ramdisk,  toujours garder une image fonctionnelle de côté
  • il n'y a pas de problème pour démarrer sans les modules HAL
  • ne pas avoir peur de bricoler dans les sources Android

4. Ça démarre et maintenant ?

Il va falloir dans un premier temps tester les fonctionnalité du téléphone et faire le bilan de ce qui marche et de ce qui ne marche pas (souvent le wifi ne fonctionne pas, les vidéos ne sont pas lues, la carte SIM n'est pas détectée, pas de son, pas de caméra, etc..). Ce sont donc, en général, les fichiers propriétaires qui ne fonctionnent pas correctement

  • scruter adb logcat (surtout les premières lignes) pour des erreurs (surtout linker_error)
  • inspecter les log du kernel : cat /proc/kmsg

Quelques exemples :

  • le wifi ne fonctionne pas. 99% des téléphones/tablettes fonctionnent avec des puces Broadcom qui utilisent des fichiers de configuration et des firmware vraiment spécifiques à ces puces. Vérifier que les fichiers soient valides et présents. Le module Broadcom est un module du kernel, vérifier qu'il est bien compilé et bien activé dans le defconfig, et que le fichiers ont bien été copiés sur le périphérique.
  • certains appareils utilisent plusieurs puces wifi pour le même modèle (Galaxy S3 possède 3 puces différentes, donc 3 firmware différents et 3 configurations différentes)
  • il n'y a pas de son. En général l'HAL audio est une simple interface entre tinyalsa et Android, il est donc possible d'adapter l'HAL du Galaxy Nexus sur votre téléphone. Si ce n'est pas le cas ou les puces sont verrouillée, cela devient plus galère
  • [beaucoup d'autres exemples dans la conférence (à 31 minutes) : la vidéo, l'appareil photo, impossibilité de filmer]

5. Publier des dépôts sur CyanogenMod

Pré-requis :

  • la ROM doit être compilable et fonctionnelle
  • les source du portage, le kernel et les fichiers propriétaires soient sur GitHub

Effectuer une requête sur Gerrit

  • ajouter son device au changelog .mkdn
  • préciser les dépôts à cloner

6. Et après ?

Maintenance du portage

  • mises à jour du kernel
  • mises à jour des fichiers propriétaires

Se maintenir à jour avec l'upstream, mises à jour majeures d'Android

La conclusion de Guillaume Lesniak

  • Après les distribution linux, Android possède la communauté de développeurs la plus active.
  • C'est déplorable mais les ROMs alternatives sont parfois meilleures que les ROMs officielles.
  • CyanogenMod est une ROM extrêmement complète et structurée, fruit de nombreuses heures de travail, avec une forte valeur ajoutée par rapport aux ROMs de Google.

Quelques liens qui peuvent servir

www.teamhacksung.org

www.cyanogenmod.com

http://forum.xda-developers.com/

www.github.com/cyanogenmod

Guillaume Lesniak sur le net : www.xplod.fr et sur twitter : http://twitter.com/xplodwild

C'est ici que prend fin la transcription de la conférence de Guillaume Lesniak. La vidéo m'a permis de me rendre compte que même si j'ai des connaissances correctes en Linux et parfois l'envie de contribuer, je n'ai absolument pas le temps de m'investir dans ce genre d'aventure. Quoiqu'il en soit j'ai trouvé cette démonstration très intéressante, la première partie concernant les ROMs et les ROMs alternatives est rendue accessible à une bonne majorité de personnes s’intéressant de près ou de loin aux appareils mobiles sous Android. La seconde partie est beaucoup plus technique, j'en ai compris les principes pour avoir déjà compilé des drivers graphiques ou de dongle wifi sous Debian et Gentoo mais cela s’arrête là. En tout cas je salue la prestation de Guillaume (ça y est j'ai l'impression de le connaître), son travail au sein de la communauté CyanogenMod et par la même occasion à toute la communauté CyanogenMod. C'est décidé, il m'a convaincu de passer mon Galaxy Ace sous une ROM alternative, il faut juste que je passe le pas.


Licence Creative Commons
Cet article, sauf mention contraire expresse, est publié sous licence Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported Licence.

Vous avez aimé cet article ? Alors partagez-le avec vos amis en cliquant sur les boutons ci-dessous :
Google Plus Twitter Facebook Linkedin Framasphere email Flattr !

3 commentaires sur “Qu'est-ce qu'une custom ROM ? Explications par Guillaume Lesniak

  1. Pingback: Désimlocker sans passer par le méchant opérateur – Voleur De Photons

  2. Pingback: Désimlocker sans passer par le (méchant) opérateur – Voleur De Photons

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *