J'avais beaucoup de questions similaires jusqu'à ce que je leur demande aquí . L'essentiel des informations que vous obtiendrez sur ce post est le suivant :
- Aucune application Android ne gère directement
/dev/fb0
il existe ou non. Au lieu de cela, ils communiquent avec le processus système nommé "Surface Flinger", qui est l'analogue du serveur X sur les Linux.
- Cette communication s'effectue par le biais de Binder, qui est un protocole RPC spécifique à Android, réservé aux hôtes locaux et similaire aux pipes d'Unix.
- Même le dragueur de surface ne peut pas voir le
/dev/fb0
directement. Au lieu de cela, il communique avec le HAL (couche d'abstraction matérielle). Jusqu'à Android 8, la HAL était un ensemble de librairies partagées dans /lib/hw
. Depuis Android8, le HAL est également un ensemble de services système qui communiquent par l'intermédiaire d'un binder avec le Surface Flinger (bien que les HAL à librairie partagée soient toujours possibles).
- L'accès direct à l'affichage se fait dans la bibliothèque HAL (service) responsable de cette tâche.
Les librairies HAL (services) sont développées par le fournisseur du téléphone. Ha peut développer une /dev/fb0
et utiliser un hal capable de le gérer, mais il peut aussi développer toute méthode personnalisée. Dans le second cas, vous n'aurez pas de /dev/fb0
dans le noyau.
De plus, et c'est déjà une chose spécifique à linux : /dev
n'a pas besoin d'avoir tous les fichiers du périphérique existant sur votre système. C'est généralement le cas, mais ce n'est pas une obligation. (Sur la plupart des distributions Linux, le logiciel nommé udev automatise cette tâche, mais Android ne l'utilise pas). /dev
a fichiers de périphérique sur un Linux vous pouvez voir qu'ils commencent par un c
(fichier de périphériques de caractères) ou b
(fichier de périphérique de bloc) dans le ls -l
et également sur Android :
crw-rw---- 1 root video 29, 0 Dec 10 09:08 /dev/fb0
brw-rw---- 1 root disk 8, 0 Dec 11 07:21 /dev/sda
-rwxr-xr-x 1 root root 1302248 Apr 18 2019 /bin/bash
/dev/fb0
est un fichier de périphérique de caractères, /dev/sda
est un fichier de périphérique de bloc, tandis que /bin/bash
est un fichier ordinaire et non un périphérique.
Vous pouvez créer des fichiers de périphérique avec l'option mknod mais attention : il nécessite Root.
Il est tout à fait possible que /dev/fb0
est créé ailleurs sur votre système, peut-être à un endroit caché derrière les mêmes montages réservés aux utilisateurs. Il est également possible que fb0 ne soit pas créé du tout, bien que son pilote soit compilé dans le noyau.
Nous pouvons vérifier, quels fichiers de périphériques sont compilés dans le noyau, dans le fichier procfs. /proc/devices
. Il doit contenir la ligne
Character devices:
...
29 fb
...
Ce fichier procfs est pratiquement toujours lisible même en tant qu'utilisateur. S'il n'existe pas, alors votre HAL responsable de l'affichage communique d'une autre manière avec le noyau.
S'il existe, alors vous pouvez créer le périphérique framebuffer par une commande
mknod /dev/fb0 c 29 0
en tant que racine. (En fait, vous pouvez toujours le créer en tant que Root, mais si la ligne ci-dessus n'existe pas dans le fichier /proc/devices
alors il ne sera pas utilisable).
P.s. dans LineageOS, mes expériences sont de loin les meilleures en compilant une image userdebug. Cela n'a pas ralenti mon système du tout, mais toutes les choses de rooting, adb ont fonctionné dedans très correctement.
0 votes
L'implémentation matérielle d'Android est totalement spécifique à chaque fournisseur. Il n'y a pas de standardisation. De nombreux équipementiers n'exposent pas les interfaces Linux standard en
/dev
,/sys
,/proc
,/config
etc. De nombreux appels de service ne fonctionnent pas non plus. Au lieu de cela, les HAL fermés des OEM interagissent avec le matériel par le biais de différentes IPC, en particulier les Binders.0 votes
@IrfanLatif Merci ! Cela m'a beaucoup aidé.