Android Hal
Android Hal
Android Hal
YEHYAOUI IMED
Introduction : ANDROID Hardware Abstraction Layer ............................................................................ 2 Pourquoi ANDROID a choisi cette approche ? ........................................................................................ 2 Position de la couche HAL dans larchitecture ANDROID: ...................................................................... 3 Emplacement dans la structure des dossiers: ......................................................................................... 4 Conventions:........................................................................................................................................ 4 Examples.............................................................................................................................................. 5 Pendant lexcution (RUNTIME):............................................................................................................. 5 Caractristiques et critique de cette approche : .................................................................................... 6
La couche HAL se situe entre les librairies et le kernel linux, elle fournit les interfaces que doivent implmenter les drivers kernel. Elle spare la plateforme logique des interfaces matrielles. Le but de cette couche est de faciliter le portage des librairies sur diffrents matriels. La structure de base de l'architecture Android HAL a t tendu pour supporter diffrents matriels tout en assurant la compatibilit SoC tous les services Android systme et les applications. Pour faire face diffrents combinaison de fonctions matrielles et logicielles, l'actuel Android HAL a t construite au-dessus de l'interface unifie HAL .
La plupart des libs partages dans le diagramme ci-dessus reprsentent les modules HAL. La couche HAL est le lien entre n'importe quel appareil (partie du noyau) et le correspondant interface JNI. Les dtails sur la couche HAL nest gnralement pas d'intrt pour les dveloppeurs d'applications. Cependant, il est un module important pour les fournisseurs de matriel et les quipementiers impliqus dans le portage androde dans leur propre matriel et ajout de nouveau matriel.
Conventions:
/system/libs/hw/<*_HARDWARE_MODULE_ID>.<ro.product.board>.so /system/libs/hw/<*_HARDWARE_MODULE_ID>.<ro.board.platform>.so /system/libs/hw/<*_HARDWARE_MODULE_ID>.<ro.arch>.so /system/libs/hw/<*_HARDWARE_MODULE_ID>.default.so
Ils ont aussi une interface bien dfinie qui rside dans:
4
include/hardware/
Un module peut avoir plusieurs variantes: "default", "arch", "board" Et ils sont chargs dans l'ordre : "board", "arch", "default" Le code source pour "board" est habituellement dans : Partners/... Le code source pour "default" and "arch" est habituellement dans : hardware/modules/
Examples
Radio Interface Layer (RIL) hardware/ril/ BT external/bluetooth Legacy WiFi hardware/libhardware_legacy/wifi
compositeur du matriel est un HAL qui fait labstraction logique de la composition spcifique du matriel. Le SurfaceFlinger charge le compositeur matriel en utilisant la mthode hw_get_module pour obtenir le contrle sur la HAL.
Le contrat entre le service et le systme HAL est bien dfinie. Les fabricants d'appareils doivent s'assurer que ces interfaces sont mises en uvre comme prvu par les services de Android. La figure ci-dessous montrer une partie de la HAL sur la version Android ICS et les mthodes cls qui HAL devraient mettre en uvre.
Avec les nouvelles versions d'Android, la porte de HAL ont largi et il est probable qu'ils seront utilis non seulement pour labstraction matriel, mais de faire labstraction de tout comportement matriel spcifique.
L'une des principales caractristiques de cette approche est que la licence sous laquelle le partage de bibliothque est distribu est la responsabilit du fabricant du matriel. Ainsi, un fabricant de l'appareil pouvez crer un pilote de priphrique simpliste qui implmente les primitives les plus lmentaires pour accder un morceau donn de matriel et de faire ce pilote disponible sous licence GPL. Peu serait rvl sur le matriel, puisque le pilote ne ferais pas quelque chose de compliqu. Ce conducteur serait alors exposer le matriel l'espace utilisateur par mmap() ou ioctl() et la majeure partie de l'intelligence serait mis en uvre au sein d'une bibliothque en espace utilisateur qui utilise ces fonctions pour conduire le matriel. Androde n'a pas en fait spcifi la manire dont la bibliothque partage et le conducteur ou le sous-systme du noyau doivent interagir. Seule l'API fournie par la bibliothque partage pour les couches suprieures est spcifi par Androde. Quel que soit le mcanisme utilis pour charger une bibliothque , un service de systme correspondant au type de matriel est habituellement responsable du chargement et l'interfaage avec la bibliothque partag. Ce service systme sera responsable de l'interaction et la coordination avec les autres services du systme pour que le matriel se comporter cohrente avec le reste du systme et l'API exposes dveloppeurs d'applications. Habituellement, le service systme sera divis en deux parties, une partie en Java qui implmente la plupart de l'intelligence Android-spcifique et une autre partie dans C dont lemploi principal est d'interagir avec le matriel de bibliothque partage de support et d'autres fonctions de bas niveau.