Accélération 2D/3D/Vidéo sur la cubieboard2 (et MyPaint v1.1 + tablette graphique Wacom)

J’ai réussi ce week-end à obtenir, finalement assez facilement un support matériel relativement complet de la Cubieboard2. Il a fallu pour cela utiliser la version stage (bêta) du noyau Linux-Sunxi, ainsi que suivre pas à pas une page d’explication de la compilation du noyau sur le wiki de linux-sunxi.org. J’en ai profité pour traduire en français et améliorer certaines pages de documentation.

Focus qui a crée l’image système à l’origine de mes modifications, a aussi crée un article sur le sujet en s’inspirant de certaines de mes recommandations et maintenant, l’image modifiée est disponible dans la section download de cubieboard.org. Vous pouvez tout de même lire la suite pour comprendre comment faire dans le cas d’une autre distribution (j’ai du l’appliquer de nouveau certaines de ces règles pour ma version de (l/x)ubuntu 13.10

Compilation du noyau

Tutorial pour le noyau (choisissez la branche stage), à faire sur un PC puissant de préférence, évitez sur la Cubieboard, ça risque de prendre environ 1 heure.

En gros, après avoir installé les outils de cross-compilation :

Si vous voulez optimiser un peu votre code, si possible utilisez GCC-4.8 (disponible sur Ubuntu 13.10), mais au moins, pensez à régler la variable d’environnement CFLAG avant chaque configuration de compilation :

export CFLAGS="-O3 -march=armv7-a -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard"

Donc la procédure complète pour faire son noyau en 5 lignes (et pas mal de temps), si vous avez peu de mémoire (<=2Go), quittez le maximum de service, éventuellement arrêtez X11, cela permet d'avoir plus de cache pour la compilation et pourrait aller beaucoup plus vite (2 à 10 fois). Ne pas utiliser les zip de github.com, ils sont complétements bogués, utilisez plutôt la commande git !!! :

git clone https://github.com/linux-sunxi/linux-sunxi -b stage/sunxi-3.4 # Clone la branche stage
cd linux-sunxi
cp -a  arch/arm/configs/sun7i_defconfig .config     # Copie de la configuration standard pour AllWinner A20
sed -i 's/CONFIG_SUNXI_EMAC=m/CONFIG_SUNXI_EMAC=y/g' .config    # Lie le pilote réseau en dur plutôt qu'en module, afin de l'avoir au reboot.
make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules    # Compilation, peut prendre beaucoup de temps

remplacer le 8 à -j8 par le nombre de cœurs de votre processeur. J’ai utilisé un core i7 (2 cœurs * 2 (hyperthreading (hyperenfilade)) = 8 cœurs), ça a pris environ 6 minutes à compiler.

Une précision, j’ai utilisé l’image système dont j’ai parlé dans un précédent billet. Pour remplacer les fichiers du noyau et modules, avec, en utilisant pour l’exemple :
* /arc/compilation/linux-sunxi, répertoire du noyau.
* /mnt/sdc1 partition uboot et /mnt/sdd1 partition système (sur disque SATA).

mv /mnt/sdc1/uImage /mnt/sdc1/uImage.old                # Sauvegarde une copie de l'ancien noyau
cp -a /arc/compilation/linux-sunxi/arch/arm/boot/uImage /mnt/sdc1/  # Copie le nouveau noyau
mv /mnt/sdd1/lib/firmware /mnt/sdd1/lib/firmware.old         # Sauvegarde une copie des anciens firmwares
mv /mnt/sdd1/lib/modules /mnt/sdd1/lib/modules.old          # Sauvegarde une copie des anciens modules noyau
cd /arc/compilation/linux-sunxi/            # Passe dans le dossier du noyau et installe les modules noyau et firmwares
make INSTALL_MOD_PATH=/mnt/sdd1/lib/modules  ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install

Compilation des pilotes X11 libres + propriétaires presque idéaux

Suivre ces instructions pour les pilotes graphique.

fbturbo, anciennement sunxifb (renommé puisqu’il sert sur toutes les plate-formes utilisant un GPU ARM Mali, voir d’avantage) est un pilote libre 2D permettant l’accélération de la gestion du bureau, par une meilleure gestion du framebuffer. Il est environ 10 * plus rapide pour la 2D et accélère au passage jusqu’à trois fois les opération 3D.

Le pilote 3D, Mali à déjà un concurrent libre dont je n’ai pas encore testé l’installation. Ses développeurs annoncent également de meilleurs performances que le pilote propriétaire et fermé, et annoncent également pouvoir les améliorer d’avantage dans un avenir assez proche.

Je ne sais pas encore à cause de quelle partie, mais mplayer et VLC, peuvent jouer sans problèmes mes vidéos (mieux que ce que j’ai sur intel avec mon core i7). A priori tous les formats ne sont pas gérés, mais le VLC par défaut de Linaro, inclus les chaînes de télévision de la Freebox, j’ai pu regarder sans problèmes quelques chaînes chinoises pour tester. Je n’ai pas un débit suffisant pour les chaîne HD de la Freebox, mais je peux jouer sans problème des vidéos HD à traver internet, du moins celles que j’ai fait pour montrer ce que donne la Cubieboard2 aujourd’hui :

Voici une démonstration de MyPaint avec tablette Wacom (je n’est pas tenté de faire un chef d’œuvre, juste de faire un test de performance des différentes brosses ^^) => liste des tablettes supportées par le pilote Linux

Mypaint v1.1 avec tablette Wacom sur cubieboard2, accélération 2d minimale

Screencast de Mypaint v1.1 avec tablette Wacom sur cubieboard2, accélération 2d minimale

Au passage, il faut savoir que sur ce genre de plate-forme, seule l’accélération OpenGL ES (version pour l’embarqué) est gérée, pas l’accélération OpenGL. Voici une vidéo de comparaison d’un benchmark dans les 2 modes, à gauche Open GL, à droite OpenGL ES :

glmark2 (OpenGL à gauche), contre glmark2-es2 (OpenGL ES) à droite

glmark2 (OpenGL à gauche), contre glmark2-es2 (OpenGL ES) à droite

Vous pouvez voir d’autres vidéos de tests que j’ai faites ce week-end dans le dossier : /cubieboard/demos_video.201310/

Mise à jour 2014Paquets glmark2 pour ArchlinuxARM, fonctionne beuacoup mieux en rendu purement logiciel grace au pilote LLVMpipe (en anglais) (3 à 4 fois plus rapide).

2 thoughts on “Accélération 2D/3D/Vidéo sur la cubieboard2 (et MyPaint v1.1 + tablette graphique Wacom)

  1. MartinB

    Greetings from Czech Republic!

    I wondering if you can desribe how to compile version for internal NAND booting instead of booting with uboot from SATA drive. I’m absolute begginer when it comes down to compiling distros, but I’m interested in using Cubie for Vjing (via custom OpenFrameworks application, basicaly C++ and OpenGL), but somehow, there is problem with accessing hardware acceleration, which as I see you somehow solved. Maybe if you could upload already compiled image or at least provide some information, that would be awesome!

    Best regards

    Martin

    1. Popolon Post author

      You must first know, that Cubieboard1/2, have a Mali GPU, that, as all ARM GPU, until there is an ARM platform with PCI or desktop/server GPU, doesn’t support OpenGL acceleration, it only supports OpenGL ES, embedded subset of OpenGL. This is good enough for most task. So first this framwork must be ported to OpenGL ES. I seen, there was some effort to port it to OpenGL ES only, about one year ago and some report success about it:

      http://forum.openframeworks.cc/index.php/topic,9107.0.html

      I installed NAND image at first with allwinner tool for Linux, but I had error, and image I used was very instable. I currently try to have a good system on HDD or µSD, and then will backport it to NAND. I must first manage to write into NAND from µSD or SATA booted system, the allwinner application from allwinner doesn’t work well.

      Ultimatly, I would like to have a quick booting image from NAND, like an hibernated image, so, it can populate memory really quickly, have a little partition for users data, and be able to choose between NAND and SATA or µSD for a more complete standard desktop system or server oriented system.

Laisser un commentaire