2. 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
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
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
4 Pratique
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
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
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
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 - Pour aller plus loin
6 Pour aller plus loin
39 / 42
40. 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