SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à Portage d'Android 8 sur Raspberry Pi 3

Découvrez FireDAC pour FMX
Découvrez FireDAC pour FMXDécouvrez FireDAC pour FMX
Découvrez FireDAC pour FMXpprem
 
Application de pointage basé sur la technologie rfid
Application de pointage basé sur la technologie rfidApplication de pointage basé sur la technologie rfid
Application de pointage basé sur la technologie rfidBelwafi Bilel
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdfmed_univ78
 
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014O10ée
 
Fiche de TD 1 de préparation au Baccalauréat (littéraire et scientifique) du ...
Fiche de TD 1 de préparation au Baccalauréat (littéraire et scientifique) du ...Fiche de TD 1 de préparation au Baccalauréat (littéraire et scientifique) du ...
Fiche de TD 1 de préparation au Baccalauréat (littéraire et scientifique) du ...ATPENSC-Group
 
Kit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIYKit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIYlaurenthuet
 
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...jihbed
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busyboxAyoub Rouzi
 
Sizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsSizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsPhilippeBrogi
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Firas Kouẞàa
 
Programmez un Raspberry Pi - Initiation avec Python (Simon Monk) (z-lib.org).pdf
Programmez un Raspberry Pi - Initiation avec Python (Simon Monk) (z-lib.org).pdfProgrammez un Raspberry Pi - Initiation avec Python (Simon Monk) (z-lib.org).pdf
Programmez un Raspberry Pi - Initiation avec Python (Simon Monk) (z-lib.org).pdflaminemhamed
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Jean-Marc Fontaine
 
Prérequis au développement google android
Prérequis au développement google androidPrérequis au développement google android
Prérequis au développement google androidThierry Gayet
 

Similaire à Portage d'Android 8 sur Raspberry Pi 3 (20)

Raspberry Pi: Les utilisations
Raspberry Pi: Les utilisationsRaspberry Pi: Les utilisations
Raspberry Pi: Les utilisations
 
3552502.pptx
3552502.pptx3552502.pptx
3552502.pptx
 
Découvrez FireDAC pour FMX
Découvrez FireDAC pour FMXDécouvrez FireDAC pour FMX
Découvrez FireDAC pour FMX
 
Application de pointage basé sur la technologie rfid
Application de pointage basé sur la technologie rfidApplication de pointage basé sur la technologie rfid
Application de pointage basé sur la technologie rfid
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdf
 
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
 
Android pour l'industrie
Android pour l'industrieAndroid pour l'industrie
Android pour l'industrie
 
Fiche de TD 1 de préparation au Baccalauréat (littéraire et scientifique) du ...
Fiche de TD 1 de préparation au Baccalauréat (littéraire et scientifique) du ...Fiche de TD 1 de préparation au Baccalauréat (littéraire et scientifique) du ...
Fiche de TD 1 de préparation au Baccalauréat (littéraire et scientifique) du ...
 
Kit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIYKit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIY
 
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busybox
 
Raspberry PI Guide
Raspberry PI GuideRaspberry PI Guide
Raspberry PI Guide
 
Sizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsSizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloads
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances
 
1-android.pdf
1-android.pdf1-android.pdf
1-android.pdf
 
Programmez un Raspberry Pi - Initiation avec Python (Simon Monk) (z-lib.org).pdf
Programmez un Raspberry Pi - Initiation avec Python (Simon Monk) (z-lib.org).pdfProgrammez un Raspberry Pi - Initiation avec Python (Simon Monk) (z-lib.org).pdf
Programmez un Raspberry Pi - Initiation avec Python (Simon Monk) (z-lib.org).pdf
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012
 
Prérequis au développement google android
Prérequis au développement google androidPrérequis au développement google android
Prérequis au développement google android
 

Portage d'Android 8 sur Raspberry Pi 3

  • 1. Portage d’Android sur la Raspberry Pi 3 A. Grassein Smile ECS 16 octobre 2018 1 / 42
  • 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
  • 3. 1 - Introduction 1 Introduction 3 / 42
  • 4. 1 - Introduction But de la conf : Voir les étapes pour faire un portage Android ; S’appuyer sur un exemple concret. 4 / 42
  • 5. 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
  • 6. 2 - Théorie 2 Thé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 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
  • 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 5 Ré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 - 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
  • 41. 7 - Questions ? 7 Questions ? 41 / 42