Binary drivers/fr

Cette page décrit la procédure pour installer et configurer les pilotes binaires dans l'espace utilisateur, que les systèmes sunxi requièrent encore pour fonctionner complètement.

= Pilote 3D et réglage de l’accélération matérielle 2D/3D sous X =

Les sun4i et sun5i utilisent un Mali400MP1, le sun7i utilise quant à lui un Mali400MP2 (double cœur). Nous avons un support disponible pour différentes versions de la pile du pilote Mali binaire, qui s'adapte avec le noyau version r3p0. Nous supportont le framebuffer et X11 comme système de fenêtrage.

Pilote Mali du noyau
Tout d'abord, obtenez un pilote d'affichage fonctionnel.

La configuration par défaut du noyau devrait avoir les pilotes noyau Mali sous forme de module. Vous devriez pouvoir les charger en lancant simplement

 modprobe mali

Une situation plus propre consiste à avoir ces modules chargés automatiquement au démarrage, en ajoutant ce qui suit au fichier /etc/modules :

ump mali mali_drm

Les permissions par défaut de /dev/ump et /dev/mali les rendent inutilisables pour les utilisateurs normaux. Ajoutez ces fichiers dans /etc/udev/rules.d/, par exemple dans un fichier nommé 50-mali.rules, avec le contenu suivant :  KERNEL=="mali", MODE="0660", GROUP="video" KERNEL=="ump", MODE="0660", GROUP="video" Cela devrait permettre aux utilisateur faisant partis du groupe 'video', les bonnes permissions pour utiliser avec succès le pilote mali.

Pour ajouter un utilisateur dans le groupe vidéo :

groupadd USER video (ou USER est le nom de l'utilisateur).

Puis déconnecter et reconnecter USER pour qu'il puisse bénéficier de ces nouveaux droits.

Installer les pilotes binaires Mali
Nous avons un dépôt tout-en-un prêt pour vous, appelé sunxi-mali.

Vous avez besoin de libdri2-dev, xorg-dev et xutils-dev pour les construire avec succès.

 apt-get install git build-essential libdri2-dev xorg-dev xutils-dev


 * Certaines distributions possèdent libdri2 compilé en binaire X11. Dans ce cas, libdri2 est séparé dans un dépôt github https://github.com/robclark/libdri2. Pour le compiler vous avez besoin d'installer libdrm-dev.

Tout d'abord, nous avons besoin de cloner le dépôt, qui est un peu moins simple en raison de notre utilisation des sous-modules git pour les binaaires. Soyez certain de faire cela sur le système cible et en tant que root, comme nous allons les installer directement sur le système.

 git clone https://github.com/linux-sunxi/sunxi-mali.git cd sunxi-mali git submodule init git submodule update

Maintenant, vous pouvez descendre dans sunxi-mali, si tout va bien, vous n'aurez plus qu'à faire cela :

 make install

Cela devrait permettre l’auto-détection de la version du pilote noyau, quelle ABI vous utilisez et selon les cas, que vous avez besoin du suport de X11 ou du framebuffer (en vérifiant libX11). Il fabriquera alors libUMP.so (ARM Mali's Universal Memory Provider), installera libUMP, les binaires GLES/EGL dans le dossier /usr/lib/, et les entêtes UMP et EGL/GLES dans le dossier /usr/include/.

Si ma nécessite d'être utilisé avec un bureau X11, il est alors également nécessaire de configurer X (Le polite X11 fbdev par défaut ne fonctionnera pas !). Allez à la section suivante.

Réglage de X
Si vous utilisez seulement la console en frambuffer et avez vérifié que la version framebuffer des binaires Mali ont été installés, vous pouvez alors passer cette section.

Le GPU Mali fournit l’accélération matérielle aux applications 3D utilisant OpenGL ES2. Il y a également des fonctions d'accélération 2D au cœur des SoC A1x et A20, tels, le curseur de souris matériel et le moteur G2D pour accélérer les tracés sous X. Vous pouvez activer l'accélération 2D sous X en utilisant le pilote sunxifb (renommé récemment fbturbo) sans avoir la version X11 des pilotes Mali binaires installés. Si la version X11 des pilotes Mali binaires sont installés, le pilote fbturbo (ou sunxifb) le détecte automatiquement et fournit l'intégration d'OpenGL ES2 pour les applications 3D.

Pour compiler et installer le pilote xorg, installez d'abord les paquets de développement suivant, utilisé pour construire les pilotes X :

 apt-get install build-essential xorg-dev xutils-dev x11proto-dri2-dev libltdl-dev libtool automake

Récupérez à présent le pilote sunxifb xf86 :

 git clone https://github.com/ssvb/xf86-video-sunxifb.git

L'ancien pilote stable, qui ne fournissait pas d'accélération 2D, est encore disponible à git://github.com/linux-sunxi/xf86-video-mali.git

Compilee et installer le pilote fbturbo xf86 (cela est nécessaire même si vous l'avez déjà installé pour la 2d uniquement) :

 autoreconf -vi ./configure --prefix=/usr make make install

Copiez alors à la place du fichier xorg.conf par défaut pour le pilote fbturbo :  cp xorg.conf /usr/share/X11/xorg.conf.d/99-sunxifb.conf

Vous devriez alors pouvoir (re)démarrer votre seveur X, passez un coup d'œil à /var/log/Xorg.0.log, afin de vérifier que le bon pilote à été chargé :

... (II) Module sunxifb: vendor="X.Org Foundation" compiled for 1.12.4, module version = 0.3.1 Module class: X.Org Video Driver ABI class: X.Org Video Driver, version 12.1 (II) SUNXIFB: driver for framebuffer: sunxifb (--) using VT number 7 ...

Assurez vous également que vous n'avez pas les lignes suivantes dans ce fichier de log. Si vous les voyez, une reconstruction propre et une réinstallation du pilote fbturbo sera alors nécessaire :

(II) SUNXIFB(0): no 3D acceleration because the driver has been compiled without libUMP (II) SUNXIFB(0): if this is wrong and needs to be fixed, please check ./configure log

Les pilotes sont installés dans /usr/lib/xorg/modules/drivers/ :

fbturbo_drv.la fbturbo_drv.so

Vérifier la pile de pilote EGL/GLES
Depuis le répertoire ou est situé la copie du dépôt mali-sunxi, vous pouvez lancer :

 make test test/test

Si au make test vous obtenez l'erreur suivante : /usr/bin/ld: /tmp/ccKm2Nl8.o: référence au symbole non défini «XNextEvent» /usr/bin/ld: note: «XNextEvent» est défini dans le DSO /usr/lib/arm-linux-gnueabihf/libX11.so.6 donc essayez de l'ajouter à la ligne de  commande du lieur /usr/lib/arm-linux-gnueabihf/libX11.so.6: could not read symbols: Opération invalide collect2: erreur: ld a retourné 1 code d'état d'exécution make: *** [test] Erreur 1

éditez test/Makefile et modifier la ligne de compilation où il manque -lX11 de la façon suivante :

$(CC) $(CFLAGS) -o $@ test.c -lEGL -lGLESv2 -lX11

Recommencez alors

make test && test/test

Vous devriez alors voir un triangle fluide, soit afficher dans l'angle haut-gauche du framebuffer, soit dans une fenêtre X. Ce programme affiche dans la console le moteur de rendu utilisé :

... GL Vendor: "ARM" GL Renderer: "Mali-400 MP" GL Version: "OpenGL ES 2.0" ...

Ça fonctionne !

Paquets binaires
Le Projet Cubian fournit des paquets deb, orienté Debian. Les paquets contiennent les binaires précompilés (armhf) et leur dépendances, ainsi que les configurations de X et les règles udev. Après avoir installé ces paquets, tout devrait fonction directement. Atttention, ces paquets sont d'abord à destination de Debian, avec Linaro (13.09), Ubuntu Raring, il effacera les paquets de la plupart des applications qt/kde, ainsi que les bibliothèques EGL. wget -O - http://packages.cubian.org/cubian.gpg.key | apt-key add - echo "deb http://packages.cubian.org/ wheezy main" >> /etc/apt/sources.list apt-get update apt-get install xserver-xorg-video-sunximali sunxi-disp-test

Vous pouvez facilement le test avec

sunxi-disp-test

Si cela vous affiche un triangle coloré sur un fond gris, mesurant 480 x 480 pixels, alors tout fonctionne !

Les autres programmes de test fournis sont sunxi_disp_g2d_bench et sunxi_disp_vsync_demo.

Les anciennes bibliothèques Mesa bloquent toujours dans le passage
Si vous voyez ce message :

libEGL warning: failed to create a pipe screen for Mali DRI2 libEGL warning: DRI2: failed to open Mali DRI2 (search paths /usr/lib/arm-linux-gnueabihf/dri)

Le meilleur conseil est de mettre la bibliothèque mesa-egl de côté :

 mv /usr/lib/arm-linux-gnueabihf/mesa-egl/ /usr/lib/arm-linux-gnueabihf/.mesa-egl/

Ça ne parait pas très propre, mais au moins cela permet de remplacer le rendu purement logiciel par l’accélération 3D matérielle.

Symboles X manquants
symbol lookup error: /usr/lib/libGLESv2.so.2: undefined symbol: XextCreateExtension

Cela est dût à des mauvaises dépendances des bibliothèques du binaire libMali.so qui a été fournit. Nous avons contourné cela dans la biblithèque libUMP.so crée manuellement. Vérifiez donc que la bibliothèque libUMP.so chargée est bien celle faite manuellement.

Vous pouvez trouver la version de libUMP.so actuellement active à l'aide de la commande

 ldd gles2_application

L'écran s’étend et il est impossible de le redemarrer
Cela semble lié à certaines version de fbturbo (à vérifier), mais en tout cas, l'option DPMS off, qui sert à éteindre l'écran, l'éteint bien, mais il est impossible de le rallumer, à moins de redémarrer le système. On peut voir (en se connectant via la console ou en ssh), une ligne contenant le message suivant dans dmesg :

disp clks: lcd 146000000 pre_scale 1 hdmi 146000000 pll 219000000 2x 1

Afin de continuer à bénéficier de DPMS (suspend et standby qui fonctionne), mais de ne pas verrouiller définitivement l'écran, il est possible d'ajouter dans /usr/share/X11/xorg.conf.d/99-sunxifb.conf dans la  :

Option "OffTime" "0"

= Pilote d'accélération multimédia = Ajouter ici les informations pour obtenir l'accélération via CedarX fonctionnant.


 * mplayer et vlc semblent gérer l’accélération matérielle par défaut.