Portage d’Android sur la Raspberry Pi 3
A. Grassein
Smile ECS
16 octobre 2018
1 / 42
Plan I
1 Introduction
2 Théorie
Android
Raspberry Pi 3
3 Pourquoi ?
4 Pratique
Défis à relever
Ecriture du BSP
Flashage des images
5 Résultats
6 Pour aller plus loin
7 Questions ?
2 / 42
1 - Introduction
1 Introduction
3 / 42
1 - Introduction
But de la conf :
Voir les étapes pour faire un portage Android ;
S’appuyer sur un exemple concret.
4 / 42
1 - Introduction
A propos de moi :
Adrien Grassein
Expert
Technique
Smile ECS
7 ans d’expérience sur Android :
Parrot -> Automobile / Drone (Android 1.x 2.x 4.x et 5.x) ;
Redbend (Harman/Samsung) -> Virtualisation d’Android
(Android 5.x 6.x et 7.x) ;
Smile -> Automobile / Médical / Bancaire / Robotique (Android
6.x 7.x et 8.x).
5 / 42
2 - Théorie
2 Théorie
Android
Raspberry Pi 3
6 / 42
2 - Théorie - Android
2 Théorie
Android
Raspberry Pi 3
7 / 42
2 - Théorie - Android
Qu’est-ce que Android ?
Un système d’exploitation (Licence Apache v2) ;
Des applications ;
Un environnement de développement complet ;
Un environnement de debug ;
Un système de build.
8 / 42
2 - Théorie - Android
Plusieurs variantes :
Android ;
Android TV ;
WearOS ;
Android Auto ;
Android Things.
9 / 42
2 - Théorie - Android
9 versions majeures :
Apportent leur lot de nouveautés ;
Cassent régulièrement les API internes ;
Les changements internes sont souvent mal documentés.
10 / 42
2 - Théorie - Android
Qu’est-ce que Android ?
Environ 600 dépôts GIT ;
Du code source écrit en Java / C / C++ ;
Un OS lourd (nécessite un GPU et une TrustZone) ;
S’appuie sur un Kernel Linux ;
Une spécification à suivre (Sécurité / HW / ...).
11 / 42
2 - Théorie - Android
Qu’est-ce qu’un BSP pour Android ?
L’ensemble des briques logicielles permettant de faire fonctionner Android ;
Un bootloader compatible Android ;
Un kernel Linux Android ;
Des HALs (Briques faisant le lien entre le FWK Android et le Kernel Linux) ;
Des Makefiles permettant de construire les images.
12 / 42
2 - Théorie - Raspberry Pi 3
2 Théorie
Android
Raspberry Pi 3
13 / 42
2 - Théorie - Raspberry Pi 3
Qu’est-ce que Raspberry Pi 3 ?
Une carte d’évaluation ;
Très peu chère ;
Très répandue ;
Relativement puissante (Quad ARM Cortex-A53, 1Go RAM) ;
Beaucoup de connectivité ;
Avec un support Open Source.
14 / 42
2 - Théorie - Raspberry Pi 3
Qu’est-ce que Raspberry Pi 3 ?
Un bootloader open source ;
Un support du Kernel Linux ;
Un flashage d’image facile.
15 / 42
3 - Pourquoi ?
3 Pourquoi ?
16 / 42
3 - Pourquoi ?
Pourquoi mettre Android sur une Raspberry Pi 3
Pour s’amuser ;
Tentative pour réaliser un démonstrateur ;
Pour comprendre comment fonctionne un portage Android ;
Et pourquoi pas ?
17 / 42
3 - Pourquoi ?
Quelle version d’Android ?
Android 8.1 ;
Facilité avec Treble ;
Une variante déjà portée par Android (mais sources non publiées).
18 / 42
3 - Pourquoi ?
Quelle variante d’Android ?
Android (handheld) ;
La variante la plus généraliste d’Android ;
Interface la plus connue ;
Permet de valider la faisabilité des autres.
19 / 42
4 - Pratique
4 Pratique
Défis à relever
Ecriture du BSP
Flashage des images
20 / 42
4 - Pratique - Défis à relever
4 Pratique
Défis à relever
Ecriture du BSP
Flashage des images
21 / 42
4 - Pratique - Défis à relever
Quels sont les défis à relever ?
Créer les Makefiles produit ;
Ecrire ou trouver les HALs ;
Flasher les images ;
Booter les images.
22 / 42
4 - Pratique - Ecriture du BSP
4 Pratique
Défis à relever
Ecriture du BSP
Flashage des images
23 / 42
4 - Pratique - Ecriture du BSP
Création du produit :
Création du répertoire "device/pifoundation/rpi3" ;
Création des Makefile AndroidProducts.mk, aosp_rpi3.mk et BoardConfig.mk ;
Création du script "vendorsetup.sh".
24 / 42
4 - Pratique - Ecriture du BSP
But :
Donner au buildsystem des informations capitales : architecture processeur, taille
max des partitions, ...
Dire à Android quels packages embarquer ;
Donner un nom à son produit ;
Positionnement de la configuration Runtime.
25 / 42
4 - Pratique - Ecriture du BSP
Ecriture des HALs :
Seulement les HALs vitales dans un premier temps ;
Utilisation des implémentations par défaut si possible ;
Récupération des HALs d’Android Things pour le reste (merci Treble !).
26 / 42
4 - Pratique - Ecriture du BSP
HALs vitales (liste non exhaustive) :
HWComposer ;
OpenGL/EGL ;
Bootctrl ;
ContextHub.
27 / 42
4 - Pratique - Ecriture du BSP
Kernel :
Google a patché le kernel vanilla de la RPI ;
Google a mis à disposition les sources ;
Utilisation de celui d’Android IOT ;
N’est pas buildé par Android.
28 / 42
4 - Pratique - Ecriture du BSP
Bootloader :
Google a publié des patchs dans u-boot ;
Support du système de partition A/B d’Android ;
Support des images bootables Android ;
Utilisation de cet u-boot modifié ;
N’est pas buildé par Android.
29 / 42
4 - Pratique - Ecriture du BSP
Système A/B :
Permet de faire de la redondance de partitions ;
Est activé pour toute la chaine de boot ;
Le choix est fait par le bootloader ;
Google l’a intégré à u-boot ;
Android utilise la HAL bootctrl.
30 / 42
4 - Pratique - Ecriture du BSP
Partition boot.img et recovery.img.
Partition bootable d’Android ;
Contient le kernel et la commandline ;
Contient un ramfs ;
recovery.img a disparu en Android 9 ;
Pas montable de manière standard.
31 / 42
4 - Pratique - Ecriture du BSP
Résultats :
boot.img ;
system.img ;
vendor.img.
32 / 42
4 - Pratique - Flashage des images
4 Pratique
Défis à relever
Ecriture du BSP
Flashage des images
33 / 42
4 - Pratique - Flashage des images
Façon traditionnelle Android : fastboot
Protocole de communication ;
Ecrit les images dans des partitions ;
Quasiment aucune vérification ;
Supporte les images sparses ;
Au dessus d’USB / tcp / udp ;
La version UDP a été portée sur u-boot pour la rpi3 par Google.
34 / 42
4 - Pratique - Flashage des images
Façon traditionnelle RPI : dd sur la carte SD
Simple ;
Android ne créé pas la table de partition ;
Android créé des images sparses ;
Adaptation nécessaire pour Android.
35 / 42
4 - Pratique - Flashage des images
Utilisation de dd pour simplicité :
Création des partitions grâce à gdisk (17 partitions) ;
unsparse des images grâce à "simg2img" ;
dd des fichiers avec offset.
36 / 42
5 - Résultats
5 Résultats
37 / 42
5 - Résultats - Flashage des images
Résultats :
Android boot ;
Non utilisable pour un démonstrateur ;
D’énormes lags dus probablement à la partie graphique.
38 / 42
6 - Pour aller plus loin
6 Pour aller plus loin
39 / 42
6 - Pour aller plus loin - Flashage des images
Pour aller plus loin :
Intégrer les drivers graphiques RPI ;
Mettre la sécurité en place ;
Intégrer les autres éléments HW ;
Essayer les autres variantes d’Android.
40 / 42
7 - Questions ?
7 Questions ?
41 / 42
Merci !
Merci !
42 / 42

Portage d'Android 8 sur Raspberry Pi 3

  • 1.
    Portage d’Android surla Raspberry Pi 3 A. Grassein Smile ECS 16 octobre 2018 1 / 42
  • 2.
    Plan I 1 Introduction 2Théorie Android Raspberry Pi 3 3 Pourquoi ? 4 Pratique Défis à relever Ecriture du BSP Flashage des images 5 Résultats 6 Pour aller plus loin 7 Questions ? 2 / 42
  • 3.
    1 - Introduction 1Introduction 3 / 42
  • 4.
    1 - Introduction Butde la conf : Voir les étapes pour faire un portage Android ; S’appuyer sur un exemple concret. 4 / 42
  • 5.
    1 - Introduction Apropos de moi : Adrien Grassein Expert Technique Smile ECS 7 ans d’expérience sur Android : Parrot -> Automobile / Drone (Android 1.x 2.x 4.x et 5.x) ; Redbend (Harman/Samsung) -> Virtualisation d’Android (Android 5.x 6.x et 7.x) ; Smile -> Automobile / Médical / Bancaire / Robotique (Android 6.x 7.x et 8.x). 5 / 42
  • 6.
    2 - Théorie 2Théorie Android Raspberry Pi 3 6 / 42
  • 7.
    2 - Théorie- Android 2 Théorie Android Raspberry Pi 3 7 / 42
  • 8.
    2 - Théorie- Android Qu’est-ce que Android ? Un système d’exploitation (Licence Apache v2) ; Des applications ; Un environnement de développement complet ; Un environnement de debug ; Un système de build. 8 / 42
  • 9.
    2 - Théorie- Android Plusieurs variantes : Android ; Android TV ; WearOS ; Android Auto ; Android Things. 9 / 42
  • 10.
    2 - Théorie- Android 9 versions majeures : Apportent leur lot de nouveautés ; Cassent régulièrement les API internes ; Les changements internes sont souvent mal documentés. 10 / 42
  • 11.
    2 - Théorie- Android Qu’est-ce que Android ? Environ 600 dépôts GIT ; Du code source écrit en Java / C / C++ ; Un OS lourd (nécessite un GPU et une TrustZone) ; S’appuie sur un Kernel Linux ; Une spécification à suivre (Sécurité / HW / ...). 11 / 42
  • 12.
    2 - Théorie- Android Qu’est-ce qu’un BSP pour Android ? L’ensemble des briques logicielles permettant de faire fonctionner Android ; Un bootloader compatible Android ; Un kernel Linux Android ; Des HALs (Briques faisant le lien entre le FWK Android et le Kernel Linux) ; Des Makefiles permettant de construire les images. 12 / 42
  • 13.
    2 - Théorie- Raspberry Pi 3 2 Théorie Android Raspberry Pi 3 13 / 42
  • 14.
    2 - Théorie- Raspberry Pi 3 Qu’est-ce que Raspberry Pi 3 ? Une carte d’évaluation ; Très peu chère ; Très répandue ; Relativement puissante (Quad ARM Cortex-A53, 1Go RAM) ; Beaucoup de connectivité ; Avec un support Open Source. 14 / 42
  • 15.
    2 - Théorie- Raspberry Pi 3 Qu’est-ce que Raspberry Pi 3 ? Un bootloader open source ; Un support du Kernel Linux ; Un flashage d’image facile. 15 / 42
  • 16.
    3 - Pourquoi? 3 Pourquoi ? 16 / 42
  • 17.
    3 - Pourquoi? Pourquoi mettre Android sur une Raspberry Pi 3 Pour s’amuser ; Tentative pour réaliser un démonstrateur ; Pour comprendre comment fonctionne un portage Android ; Et pourquoi pas ? 17 / 42
  • 18.
    3 - Pourquoi? Quelle version d’Android ? Android 8.1 ; Facilité avec Treble ; Une variante déjà portée par Android (mais sources non publiées). 18 / 42
  • 19.
    3 - Pourquoi? Quelle variante d’Android ? Android (handheld) ; La variante la plus généraliste d’Android ; Interface la plus connue ; Permet de valider la faisabilité des autres. 19 / 42
  • 20.
    4 - Pratique 4Pratique Défis à relever Ecriture du BSP Flashage des images 20 / 42
  • 21.
    4 - Pratique- Défis à relever 4 Pratique Défis à relever Ecriture du BSP Flashage des images 21 / 42
  • 22.
    4 - Pratique- Défis à relever Quels sont les défis à relever ? Créer les Makefiles produit ; Ecrire ou trouver les HALs ; Flasher les images ; Booter les images. 22 / 42
  • 23.
    4 - Pratique- Ecriture du BSP 4 Pratique Défis à relever Ecriture du BSP Flashage des images 23 / 42
  • 24.
    4 - Pratique- Ecriture du BSP Création du produit : Création du répertoire "device/pifoundation/rpi3" ; Création des Makefile AndroidProducts.mk, aosp_rpi3.mk et BoardConfig.mk ; Création du script "vendorsetup.sh". 24 / 42
  • 25.
    4 - Pratique- Ecriture du BSP But : Donner au buildsystem des informations capitales : architecture processeur, taille max des partitions, ... Dire à Android quels packages embarquer ; Donner un nom à son produit ; Positionnement de la configuration Runtime. 25 / 42
  • 26.
    4 - Pratique- Ecriture du BSP Ecriture des HALs : Seulement les HALs vitales dans un premier temps ; Utilisation des implémentations par défaut si possible ; Récupération des HALs d’Android Things pour le reste (merci Treble !). 26 / 42
  • 27.
    4 - Pratique- Ecriture du BSP HALs vitales (liste non exhaustive) : HWComposer ; OpenGL/EGL ; Bootctrl ; ContextHub. 27 / 42
  • 28.
    4 - Pratique- Ecriture du BSP Kernel : Google a patché le kernel vanilla de la RPI ; Google a mis à disposition les sources ; Utilisation de celui d’Android IOT ; N’est pas buildé par Android. 28 / 42
  • 29.
    4 - Pratique- Ecriture du BSP Bootloader : Google a publié des patchs dans u-boot ; Support du système de partition A/B d’Android ; Support des images bootables Android ; Utilisation de cet u-boot modifié ; N’est pas buildé par Android. 29 / 42
  • 30.
    4 - Pratique- Ecriture du BSP Système A/B : Permet de faire de la redondance de partitions ; Est activé pour toute la chaine de boot ; Le choix est fait par le bootloader ; Google l’a intégré à u-boot ; Android utilise la HAL bootctrl. 30 / 42
  • 31.
    4 - Pratique- Ecriture du BSP Partition boot.img et recovery.img. Partition bootable d’Android ; Contient le kernel et la commandline ; Contient un ramfs ; recovery.img a disparu en Android 9 ; Pas montable de manière standard. 31 / 42
  • 32.
    4 - Pratique- Ecriture du BSP Résultats : boot.img ; system.img ; vendor.img. 32 / 42
  • 33.
    4 - Pratique- Flashage des images 4 Pratique Défis à relever Ecriture du BSP Flashage des images 33 / 42
  • 34.
    4 - Pratique- Flashage des images Façon traditionnelle Android : fastboot Protocole de communication ; Ecrit les images dans des partitions ; Quasiment aucune vérification ; Supporte les images sparses ; Au dessus d’USB / tcp / udp ; La version UDP a été portée sur u-boot pour la rpi3 par Google. 34 / 42
  • 35.
    4 - Pratique- Flashage des images Façon traditionnelle RPI : dd sur la carte SD Simple ; Android ne créé pas la table de partition ; Android créé des images sparses ; Adaptation nécessaire pour Android. 35 / 42
  • 36.
    4 - Pratique- Flashage des images Utilisation de dd pour simplicité : Création des partitions grâce à gdisk (17 partitions) ; unsparse des images grâce à "simg2img" ; dd des fichiers avec offset. 36 / 42
  • 37.
    5 - Résultats 5Résultats 37 / 42
  • 38.
    5 - Résultats- Flashage des images Résultats : Android boot ; Non utilisable pour un démonstrateur ; D’énormes lags dus probablement à la partie graphique. 38 / 42
  • 39.
    6 - Pouraller plus loin 6 Pour aller plus loin 39 / 42
  • 40.
    6 - Pouraller plus loin - Flashage des images Pour aller plus loin : Intégrer les drivers graphiques RPI ; Mettre la sécurité en place ; Intégrer les autres éléments HW ; Essayer les autres variantes d’Android. 40 / 42
  • 41.
    7 - Questions? 7 Questions ? 41 / 42
  • 42.