Tag Archives: ARM

Tester un système Linux RISC-V avec qemu sur ARM et ArchLinuxARM

There is also an english tutorial with more informations here

Pour cela, on peut utiliser la distribution Busybear-linux, très limitée, mais déjà bien pour un premier test de Qemu avec RISC-V (Site officiel, le CPU à sources ouvertes et sous license libre). il a l’avantage de fournir un système pré-compilé, prêt à l’emploi ici : github.com/michaeljclark/busybear-linux/releases

Les deux fichiers indispensables sont :
* bbl.bz2 = boot
* busybear.bin.bz2 = système

Récupérer les fichiers de busybear et les décompresser :

ver=1.0
wget https://github.com/michaeljclark/busybear-linux/releases/download/v$ver/bbl.bz2
wget https://github.com/michaeljclark/busybear-linux/releases/download/v$ver/busybear.bin.bz2
bzcat bbl.bz2 >bbl
bzcat busybear.bin.bz2 >busybear.bin

Les explications que j’ai récupéré viennent du le wiki d’arch pour le périphérique réseau : //wiki.archlinux.fr/Qemu car BusyBear donne des instruction pour des anciens systèmes Debian/Ubuntu (avant le passage à Netplan).

Sur archlinux(ARM) nous avons donc besoin d’uml_utilities qui se trouve dans la grande yaourtière.

wget https://aur.archlinux.org/cgit/aur.git/snapshot/uml_utilities.tar.gz
tar xf uml_utilities.tar.gz
cd uml_utilities
makepkg -A # ignore l'architecture définie dans le PKGBUILD

Il faut ensuite passer en root (ou avoir mis des droits sudo globaux à l’utilisateur pour installer ce paquet :

su - root
cd dossier_de_l'archive
pacman -U uml_utilities*.pkg.tar.xz

Profiter d’être en root pour préparer l’interface réseau pour qemu (remplacer alarm par l’utilisateur de votre choix :

tunctl -u alarm -t tap0
ifconfig tap0 192.168.0.1 netmask 255.255.255.0 up

Puis se deloguer de root par logout ou exit.

Dans le dossier où sont placer les deux fichiers préalablement décompressés :

qemu-system-riscv64 \
  -nographic -machine virt -kernel bbl \
  -append "root=/dev/vda ro console=ttyS0" \
  -drive file=busybear.bin,format=raw,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -net nic -net tap,ifname=tap0,script=no

Le boot sur busybear/RiscV va alors commencer. Il se bloc pendant quelques secondes sur le logo RISC-V en ASCII-art :

qemu-system-riscv64: warning: hub port hub0port0 has no peer
qemu-system-riscv64: warning: vlan 0 with no nics
qemu-system-riscv64: warning: netdev hub0port0 has no peer
qemu-system-riscv64: warning: requested NIC (anonymous, model unspecified) was not created (not supported by this machine?)
              vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
                  vvvvvvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrr       vvvvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrr      vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr    vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr    vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr    vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrr      vvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrr       vvvvvvvvvvvvvvvvvvvvvv
rr                vvvvvvvvvvvvvvvvvvvvvv
rr            vvvvvvvvvvvvvvvvvvvvvvvv      rr
rrrr      vvvvvvvvvvvvvvvvvvvvvvvvvv      rrrr
rrrrrr      vvvvvvvvvvvvvvvvvvvvvv      rrrrrr
rrrrrrrr      vvvvvvvvvvvvvvvvvv      rrrrrrrr
rrrrrrrrrr      vvvvvvvvvvvvvv      rrrrrrrrrr
rrrrrrrrrrrr      vvvvvvvvvv      rrrrrrrrrrrr
rrrrrrrrrrrrrr      vvvvvv      rrrrrrrrrrrrrr
rrrrrrrrrrrrrrrr      vv      rrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrr          rrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrr      rrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrr  rrrrrrrrrrrrrrrrrrrrrr

       INSTRUCTION SETS WANT TO BE FREE

On voit aux message du kernel que c’est encore un noyau assez simple :

[...]
[   10.190000] This architecture does not have kernel memory protection.
[...]

On arrive enfin au prompt où pour se connecter il faut utiliser :
* Identifiant : root
* Mot de passe : busybear.

Et voilà !

ucbvax login: root
Password:
    ____                   ____                     __    _
   / __ )__  _________  __/ __ )___  ____ ______   / /   (_)___  __  ___  __
  / __  / / / / ___/ / / / __  / _ \/ __ `/ ___/  / /   / / __ \/ / / / |/_/
 / /_/ / /_/ (__  ) /_/ / /_/ /  __/ /_/ / /     / /___/ / / / / /_/ />  <
/_____/\__,_/____/\__, /_____/\___/\__,_/_/     /_____/_/_/ /_/\__,_/_/|_|
                 /____/
root@ucbvax:~# cat /proc/cpuinfo
hart    : 0
isa     : rv64imafdcsu
mmu     : sv48

Pour configurer le réseau :

ifconfig sit0 192.168.0.10 netmask 255.255.255.0 up

On peut aussi le modifier dans /etc/hosts/interfaces pour qu'il soit pris en compte au reboot :

auto lo
iface lo inet loopback

auto sit0
iface sit0 inet static
  address 192.168.0.10
  netmask 255.255.255.0
  broadcast 192.168.0.255
  gateway 192.168.0.1

!!! Attention, les cache/resolever DNS par défaut dans /etc/resolv.conf sont ceux de Google !!! Changer par un de votre réseau ou de votre fournisseur d'accès. Ceux de Google :

root@ucbvax:~# cat /etc/resolv.conf 
nameserver 8.8.8.8
nameserver 8.8.4.4

Vrai départ pour les pilotes libres pour les GPU Mali

Si les premiers pilotes amorcés en 2012 avaient étés abandonnées un peu plus d’un an plus tard, depuis l’été 2017 des nouveaux pilotes ; Lima Driver pour l’architecture Utgard (Mali-400 et 450) et Panfrost, pour architecture Midgard (Mali-Txxx) et Bitfrost, sont tous deux partis en flèche, au point d’effectuer les fonctions basiques et de bientôt pouvoir rejoindre le noyau Linux et la bibliothèque Mesa.

Luc Verhaegen (libv) avait commencé le premier pilote libre pour le processeur graphique ARM Mali-400 (architecture ugard) aux alentours de 2012, pour l’abandonner aux alentours de 2013. Les pilotes étaient restés figés depuis, à part quelques mises à jour minimes avortées. Mais depuis l’été 2017, Qiang Yu à relancé le projet et suit au plus près le noyaux Linux (aujourd’hui 4.17rc) et Mesa (aujourd’hui 18), pour une intégration rapide à ceux-ci.

D’un autre côté, Panfrost est un pilote réunissant le travail de Connor Abbott (qui avait fait un début de pilote en 2013 également pour l’architecture Midgard (Mali-T6xx et supérieur), créé un désassembleur de shaders, puis différents outils (compilateur Lima) pour l’architecture Midgard et Bitfrost (Mali-Gxx). Toujours au même moment, Alyssa Rosenzweig, qui a commencé le développement pour l’architecture Midgard avec le pilot Chai, coordonne ses travaux avec ceux de Connor Abbott dans un projet nommé Panfrost. Les progrès sont très rapide comme pour le nouveau pilote Lima. Les auteurs prévoient d’utiliser LLVMpipe pour l’émulation Logicielle des parties non encore intégrées pendant leur progression. en mai 2018, le test du cube utilisant des shaders initialement produit pour le pilote Freedreno, fonctionne parfaitement. Les shaders passent par NIR (une représentation intermédiaire des langages de shaders (comme glsl) dont le but est de faciliter la compilation dans le langage du processeur lui même), de Jason Ekstrand.

Vous pouvez suivre leur progrès :
* Sur le blog d’Alyssa Rosenzweig pour Panfrost (et les sources sur GitLab).
* Sur le compte dépôt git des sources de Qiang Yu pour Lima sur gitlab.Freedesktop.org (linux-lima (pilote noyau DRM) et mesa-lima (pilote OpenGL ES/Gallium pour Mesa))
* Compte GitHub de Connor Abbott.

Blender est utilisable sur ARMv7 (32 bits) sans acceleration 3D grâce à LLVMpipe.

blender-17:2.76-1.0001-armv7h.pkg.tar.xz (paquet pour Archlinux ARM). (version mise à jour par l’équipe blender par défaut en utilisant le PKGBUILD d’archlinux x86, compile tout seul maintenant et devrais être intégré dans le build automatique archlinux ARM : blender-17:2.76.b-3-armv7h.pkg.tar.xz cette version ne marche plus en raison de la mise à jour d’autres librairies, utilisez pacman maintenant)

J’ai proposé un patch, accepté (mais retravaillé) par la formidable équipe Blender qui permet de compiler sur des architectures non-x86 (non Intel). J’ai proposé ce soir un PKGBUILD et patch pour Archlinux ARM en attendant que sorte la prochaine version de Blender.

.Sur mon Chromebook ARM (Asus Chromebook C201, utilisant un Rockchip RK3288 : CPU=4*Cortex-A17@1.8 Ghz + GPU=Mali-T764, uniquement compatible OpenGL ES (vivement Vulkan)), ça tourne plutôt bien en pure rendu logiciel, grâce à LLVMpipe pour l’interface et à la puissance de la machine pour le rendu. Il n’y a pas encore d’optimisation SIMD ARM NEON (pour ARMv7) ou pour (ARMv8) pour Cycle.

C’est une machine que j’ai pris il y a 2 semaines qui à l’avantage d’être :
* pas cher (200€ 2Go RAM, 250€ 4Go RAM en France) / 150$ 2 Go RAM, 200$ 4Go RAM aux États-Unis, cherchez l’erreur).
* Avoir une bonne autonomie : 13heure sous chromeOS (installé par défaut), jusqu’à environ 3j (oui, 72 heures de marche !!!) sous GNU/LInux, si on coupe les modules Wifi/BT lorsque l’on ne s’en sert pas.
* Être malgré tout léger (900 grammes), la faible consommation et grande efficacité du Rockchip permettant d’avoir cette autonomie avec une batterie 2 cellules/38 Wh, et évitant d’avoir à embarquer radiateur et ventilateur.
* Bien carburer malgré ces caractéristiques.

Je vais faire un autre article ou une page pour expliquer comment l’installer.

Il reste à installer le support OpenCL, pour utiliser l’accélération du GPGPU avec rendu 3d de Cycle (2e rendu en fin de vidéo).

En plus de son côté très léger et grande autonomie (introuvable sur les processeurs Intel, forcément plus lourds, avec pour les plus léger une autonomie moindre), J’aime bien le fait que ce soit une marque de République de Chine (Taïwan) et un processeur de République populaire de Chine (Chine continentale), parce qu’aucun de ce pays divisé en 2 n’est en guerre, je n’ai donc pas l’impression de participer à l’effort de guerre. De moins polluer (plus grande efficacité énergétique).

Qemu pour Arch Linux ARM

Compilation personnelle de Qemu pour Arch Linux ARM, comme il n’est pas encore dans le dépôt officiel (il faudrait que je vérifie le Yaourt). Pour le moment j’ai du désactivé spice(Sur Wikipedia en français) qui permet d’avoir un contrôle visuel de la machine virtuelle. Il est toujours possible de se connecter en console.

Maintenant obsolete, préferer le dépot officiel.

C’est dans mon dépôt habituel, il faut installer les paquets suivants (avec dépendances) :

* libseccomp-2.2.3-1-armv7h.pkg.tar.xz
* iasl-20150408-1.1-armv7h.pkg.tar.xz
* leveldb-1.18-1.1-armv7h.pkg.tar.xz

Vous aurez aussi besoin de paquet SeaBIOS « any » (indépendant de l’architecture matérielle), que l’on peut trouver ici
https://www.archlinux.org/packages/extra/any/seabios/, cliquez sur Download From Mirror dans la boîte de droite.

J’ai fait une copie locale au cas où :
* seabios-1.8.2-1-any.pkg.tar.xz (seabios-1.9.3-1-any.pkg.tar.xz)

Et bien sûre du paquet Qemu lui même :
* qemu-2.3.0-3-armv7h.pkg.tar.xz

Pour installer ensuite, sous root ou en sudo :

pacman -U libseccomp-2.2.3-1-armv7h.pkg.tar.xz iasl-20150408-1.1-armv7h.pkg.tar.xz \
  leveldb-1.18-1.1-armv7h.pkg.tar.xz seabios-1.8.2-1-any.pkg.tar.xz \
  qemu-2.3.0-3-armv7h.pkg.tar.xz

Je ne les ai pas optimisé pour la 3e génération des Cortex-A (Cortex-A7/a15/a17), ils fonctionnent donc sur tous les Cortex-A, pas que sur Cubieboard2.

J’espère avoir bientôt un smartbook basé sur le Rockchip RK3288 pour d’autres expérimentations avec les ARM. Différents constructeurs fabriquent des modèles en 11″ avec environ 10 heures d’autonomie, vendus entre 150 et 250 $ en fonction des configurations (2 ou 4 Go de RAM, 16 ou 32Go de SSD). Ils sont largement utilisables comme pc de travail (web/terminal/bureautique, etc…) et différentes distributions Linux (dont Arch Linux ARM, Debian, Ubuntu, peuvent être installés dessus) :
* Asus (C201 11.6″ Chromebook et Chromebook Flip C100P (10″), ce dernier pouvant également être utilisé comme tablette)
* Haier Chromebook C11
* Hisense Chromebook C11
* CTL H4 Chromebook for education

Devant le succès de cette plateforme, MediaTek propose une solution similaire basée sur le MT8173, Quad-cœur 64-bits big.LITTLE.