Gonk est le système d'exploitation bas niveau de la plate-forme Firefox OS, comprenant un noyau Linux basé sur l'Android Open Source Project (AOSP) et la couche d'abstraction matérielle (HAL) userspace. Cet article a pour but d'expliquer de quoi est fait Gonk ; pour plus d'informations sur l'ensemble de l'architecture Firefox OS et comment Gonk s'y intègre, lisez notre guide l'architecture Firefox OS.
Vue d'ensemble de Gonk
Gonk constitue le noyau de Firefox OS, qui sert d'interface entre Gecko et la couche matérielle. Gonk contrôle le matériel et expose ses fonctionnalités aux WebAPI implémentées dans Gecko. Gonk peut être vu comme la « boîte noire » qui fait le travail complexe et minutieux de contrôler l'appareil en exécutant les requêtes sur la couche matérielle.
Gonk est tout simplement une distribution Linux incluant des composants d'Android (comme le GPS ou l'appareil photo) ainsi que des projets libres communs ajoutés par Mozilla (comme libusb ou bluez) afin de pouvoir l'intégrer facilement à toutes les couches de l'architecture de Firefox OS. Cette conception facilite, pour les OEM, le portage d'éléments logiciels développés pour Android (pilote, firmware, service daemon, etc.), dans le but de les déployer sur des smartphones Firefox OS.
Dans les sources de Gecko, il y a un dossier b2g/
qui contient le Gonk Port, qui déverrouille les capacités matérielles mobiles pour le Web. Cela consiste en un noyau Linux, HAL, et d'autres bibliothèques spécifiques aux OEM. Plusieurs des bibliothèques Gonk sont des projets open-source communs : libusb, bluez, et ainsi de suite. Certaines autres parties de la HAL sont partagées avec le projet Android : GPS, appareil photo et autres.
Gonk est une couche de portage de l'appareil : un adaptateur entre le matériel et Gecko. Gonk est une distribution Linux relativement simple qui peut être considérée comme une association de Gecko Port et des couches de portage Gecko. Gonk est ainsi une cible de portage de Gecko, tout comme il y a un portage de Gecko pour OS X, Windows et Android.
Note : Comme les différents matériels mobiles peuvent avoir différents chipsets et autres spécifications matérielles, les appareils peuvent contenir différentes distributions de Gonk.
Comme le projet Firefox OS a le contrôle total sur Gonk, nous pouvons exposer des interfaces à Gecko qui ne pourraient pas être exposées à d'autres systèmes d'exploitation. Par exemple, Gecko a un accès direct à la couche de téléphonie complète et au buffer de trame d'affichage sur Gonk.
Architecture de Gonk
Chaque modèle de téléphone possède son propre ensemble de composants Gonk, parmi les bibliothèques du système, pilotes matériels et firmwares nécessaires pour le faire fonctionner. Ces composants sont déterminés par l'OEM en collaboration avec le fabricant du chipset et l'ODM. Le schéma suivant représente un exemple d'implémentation de Gonk :
Cet exemple montre les composants principaux suivants (ce qui représente uniquement un sous-ensemble des composants que l'on peut retrouver dans n'importe quelle implémentation de Gonk).
- Linux Kernel : le noyau Linux qui utilise des bibliothèques d'Android (GPS, appareil photo etc.) et d'autres projets open source (Linux, libusb, bluez, etc.).
- Radio Interface Layer (RIL) : interagit avec le modem matériel du téléphone (téléphonie). Constitué de 2 éléments :
- rild daemon : communique avec le firmware du modem.
- rilProxy : transfert les messages entre rild et le processus b2g.
- mediaserver : contrôle la lecture audio et vidéo. Gecko communique avec le serveur de média à l'aide d'Android RPC.
- netd : daemon réseau qui interagit directement avec les interfaces réseau (Wi-Fi) du matériel.
- Bluetooth, etc. : Bluetooth et d'autres services daemon qui permettent l'accès aux fonctionnalités matérielles.
Gonk s'occupe aussi de démarrer, gérer et arrêter le processus b2g, autrement dit Gecko, dans Firefox OS. Le processus b2g agit comme un client des services daemons de Gonk qui communiquent directement avec le matériel et exposent à Gecko les fonctionnalités matérielles du téléphone. Gecko communique avec ces daemons via une communication inter-process (IPC). Ces composants s'échangent des commandes et des protocoles pour demander et proposer leurs services.
Note : Pour plus d'informations concernant l'architecture de Gonk, voir le guide sur l'architecture de Firefox OS.
Portage de Gonk
Parce que Firefox OS est basé sur le noyau Android, le portage sous Firefox OS de pilotes matériels, de firmwares, de services daemons, ou d'autres composants Android ne nécessite habituellement qu'un minimum d'efforts. Si un composant spécifique (par exemple un RIL particulier ou un nouveau daemon) est nécessaire, ou si une modification doit être apportée à la conception d'un ODM, alors un supplément de travail d'intégration et de test peut être requis.
Dans b2g, les clients communiquent avec les services daemons via une communication inter-process (IPC). Le client instancie une socket de connexion vers le service daemon, y envoie sa requête (en respectant le protocole du serveur de requête), reçoit la réponse et ferme la connexion. Les OEM sont responsables de la conception et de l'implémentation de ces communications inter-processus entre clients et serveurs.
Note : Pour plus d'informations concernant le fonctionnement du processus de portage, voir Porter Firefox OS.
Comment Mozilla participe au portage de Gonk avec les OEM et fabricants de téléphones
Chaque implémentation de Gonk est le résultat d'une collaboration entre Mozilla, les OEM, et les fabricants associés (ODM, fabricant chipset).
Mozilla fournit les dépôts des sources et les fichiers nécessaires pour la prise en charge de Gonk dans ses distributions Firefox OS. Les dépôts des sources contiennent le noyau Linux de base (avec uniquement de légères modifications) et les personnalisations de Gecko (« hooks »).
Les OEM sont responsables de la compilation, du test, de la certification ainsi que de la distribution de l'image système Firefox OS pour un modèle d'appareil donné. Pour la partie Gonk de l'image système, les OEM sont responsables de la bonne intégration entre les appels aux API Web et les fonctionnalités matérielles. Le type et l'ampleur des efforts requis est hautement dépendant des choix des composants matériels du téléphone.
Composants d'un appareil
Les OEM collaborent avec les fabricants de chipset et les ODM pour fournir tous les composants spécifiques à l'appareil qui sont nécessaires à son bon fonctionnement. Par exemple, un fabricant du composant Wi-Fi doit fournir le chipset et le logiciel associé. Les composants peuvent inclure :
- Pilotes — Pour les fonctionnalités prises en charge par le téléphone, comme le modem (données et voix), Wi-Fi, Bluetooth, affichage, appareil photo, audio, etc.
- Firmware — Certains matériels (la carte d'interface réseau par exemple) peuvent charger un firmware depuis le lecteur flash.
- Services daemons — Pour appeler et gérer les opérations de divers composants matériels. Ceci peut inclure des bibliothèques de prise en charge et des scripts de démarrage.
Intégration de Gonk et Gecko
Les OEM doivent s'assurer que les fonctionnalités matérielles de l'appareil sont correctement et complètement exposées aux API Web implémentées dans Gecko. Ceci nécessite de :
- Construire ou adapter (dans Gonk) les services daemons correspondant, ainsi que les éventuels pilotes ou firmware nécessaires à la gestion de la fonctionnalité matérielle.
- Définir (dans b2g) toutes les méthodes nécessaires à la communication avec les services daemons.
Code source de Gonk
Le principal dépôt B2G sur Github contient les portages officiels prenant en charge Gonk pour divers appareils, vous pouvez donc le considérer comme le dépôt de Gonk. La liste des appareils pris en charge est disponible dans B2G/config.sh
.
La plupart du travail quotidien effectué sur Gonk implique de porter le système sur différentes cartes et de s'assurer que Gecko fonctionne correctement sur différents appareils.