RISC-V kalandok #1 (Mango Pi MQ-PRO)

írta: Elrood, 1 éve

Ez a blog bejegyzés nem termék bemutató és nem RISC-V ismertető, ezért nem készül belőle cikk. Amolyan kiírom a gondolataimat bejegyzés és feljegyzések számomra későbbre.

Bevezető

2023-ra végre megérkeztek a megfizethető, linux-os RISC-V számítógépek (SBC).

Mi az a RISC-V?

Dióhéjban egy olyan CPU architektúra (ISA), ami nyílt és ingyenes. Részletesebb leírás: [link]. Az architektúra moduláris felépítésű, opcionális bővítéseket tartalmazhat. Részletesen itt: [link].

Miért érdekes ez számomra?

A munkám (szoftvermérnök) során mindig fontosnak tartottam, hogy hatékony kódot írjak. Szerintem ezt a szokást akkor vettem fel, amikor az első munkahelyemen korai Intel Atomokra kellett szoftvert írni, ahol ezt kikényszerítette a limitált hardware. Most se jobb a helyzet, jelenleg ARM-re kell ugyanezt tennem.
X86 és ARM mellett meg szeretném ismerni a RISC-V-t is, mert ki tudja, lehet pár év múlva erre is fejlesztenem kell. Különösen az SIMD része érdekel. X86-on használtam az SSEx-n, ARM-on pedig a NEON utasításokat.
Továbbá kíváncsi vagyok arra,
- hogy áll a Linux és egyéb nyílt forráskódú fejlesztői eszközök portolása RISC-V-re. Pl. CMake, Qt, Python, NodeJS, OpenCV, FFmpeg és Docker
- tudok-e már cross-compile-olni rá C++-os kódot
- hogy működik a RISC-V vektorműveletei (SIMD). A bővítések között szerepel “pakolt-SIMD utasítások”, ami még nyitott, így valószínűleg az ezt támogató CPU-ra még várni kell

Ebben a bejegyzésben nem fogok mindnek utánajárni.
Megjegyzés Dockerhez: két image-t találtam eddig, aminek van riscv64 portja. Egyik az Ubuntu a másik pedig a hello-word.

Ehhez kellett egy RISC-V-os gép, ami Linux-t futtat és kevesebb kerül, mint $100.

Az első ilyen gép, amit találtam a Mano Pi MQ-PRO. Az 1GB-os modell ára volt $34, szállítással együtt $40.

Hardware

- Raspberry Pi Zero méretű
- Allwinner D1: 64 bit, 1 mag, 1 GHz, CPU: XuanTie C906, ISA: RV64IMAFDCVU (forrás, jelentése)
- 2D és videó encode/decode gyorsítás van, 3D nincs
- 1GB RAM (van 512MB-os verzió is)
- MicroSD kártya
- Integrált WiFi + BT (RTL8723ds)
- Mini HDMI
- USB Type-C táp és host


Egyik oldala. Kép forrása: [link]


Másik oldala. Kép forrása: [link]

A csomag még tartalmazott
- 40-es pin header-t, színkódos
- kb. 6 centis külső antennát
- két kicsi marketing matricát

Software

A weboldalon két oprendszer image érhető el: Tina-Linux és az ArmBian, de használható hozzá az Ubuntu Server is [link]. Ebben a bejegyzésben az ArmBian-t és az Ubuntu Server-t nézem meg.
Megjegyzés
- ArmBian és az Ubuntu is a Nezha dev board-ra készült. Szintén az Allwinner D1-re épül, de az ára most $150, ami nekem túl magas.
- Várhatóan az Allwinner D1 támogatása javulni fog, mert bele fog kerülni Linux kernelbe. Forrás: [link]

ArmBian

Verzió: Armbian_22.08.0-trunk_Nezha_jammy_current_5.19.0_xfce_desktop.img.xz
GUI-val (Xfce) rendelkező Linux, módosított 5.19.0 kernellel. Az ArmBian ezen verziója az Ubuntu 22.04.1-re épül. WiFi működik, a 10 éve vett USB-s ethernet működik. A rendszert apt-vel frissítettem.


ArmBian, háttérkép utólag kikapcsolva

CPU info

elrood@nezha:~$ lscpu
Architecture: riscv64
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0

elrood@nezha:~$ cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdc
mmu : sv39
uarch : thead,c906

- Byte order little endian, szerencsére ilyen az összes x86 és az ARM magok döntő többsége.
- Az ISA viszont különbözik attól, amit az egyik forrásnál találtam. Itt nem szerepel a V (vektorműveletek) és az U (user mode).

Nézzük sorra, hogy bevezőben felsoroltak közül mi működik.

CMake

OpenCV 4.7.0 projektet sikeresen legenerálta, amit fordítani is elkezdett.

Qt

Repo-ból lejön és működik. Qt Creator indításkor elhasal, de a Qt Designer működik. Nekem ez elég bizonyíték, hogy a Qt működik. Akit érdekel a qtdiag kimenete, itt megtalálja: [link].


Qt Designer

Python

elrood@nezha:~$ python3
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.pow(3, 5)
243.0
>>> import platform
>>> platform.processor()
'riscv64'
>>> exit()

Működik, viszont gond lehet az olyan python csomagokkal, amik natív binárist tartalmaznak. Például ki akartam próbálni a PyQt5-t, amit próbált lefordítani, de nem sikerült.

NodeJS

Repo-ban nincs benne, elkezdtem lefordítani a kis boardon a 18-as verziót, de 7 óra után elfogyott a memória és a swap :) . Pont ehhez kéne a cross-compile vagy qemu, de ezeknek még nem néztem utána. Szerintem működik, mert a források között van riscv64-es file-ok és github-on is találtam rá utalást: [link].

OpenCV

Nem ástam bele nagyon, de repo-ban ott van, a letöltött forráskód generátora felismeri. A toolchain is ott van a források között: [link]. Ezek alapján szerintem biztosan lefordul és működik.

FFmpeg

Működik, de a lejátszás olyan 5 másodpercenként 1 frame. Valószínűleg még semmilyen CPU szintű optimizáció nincs a kódban, csak a generikus.

Docker

Repo-ban nincs benne és a docker telepítő scriptje nem működik.
N: Skipping acquisition of configured file 'main/binary-riscv64/Packages', as repository 'http://deb.volian.org/volian scar InRelease' doesn't support architecture 'riscv64'
N: Skipping acquisition of configured file 'stable/binary-riscv64/Packages', as repository 'https://download.docker.com/linux/ubuntu jammy InRelease' doesn't support architecture 'riscv64'

OpenTTD

Nem szerepelt a listában, de ha már ott van a repo-ban, kipróbálom. Indításkor jelezte, hogy nincs GPU gyorsítás. Ezen a felbontáson, kevés járművel játszható.

Értékelés

Több mint 12 óra használat után se tapasztaltam semmilyen instabilitást. Ehhez az oprendszerhez kötelező az 1GB RAM. Még kevés is. A CPU lassú. A fejlesztés érdemes cross-compile-lal vagy QEMU-val megoldani.

Ubuntu Server 22.10

Verzió: ubuntu-22.10-preinstalled-server-riscv64+nezha.img.xz
Indítás után az apt nem akart működni. Szerencsére egy manuális időbeállítás megoldotta a problémát. Korábban írt USB-s ethernet működik, a WiFi alapból nem, de működésre bírható: [link]. Kernel: 5.19.0-1005-allwinner.

CPU info

ubuntu@ubuntu:~$ lscpu
Architecture: riscv64
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
NUMA:
NUMA node(s): 1
NUMA node0 CPU(s): 0

ubuntu@ubuntu:~$ cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdc
mmu : sv39
uarch : thead,c906

Az ISA ugyanaz, mint ArmBian alatt. Hiányzik két kiterjesztés: U és V.

Lássuk, hogy ami nem ment ArmBian-on, azok hogy muzsikálnak Ubuntu-n.

Docker

Repo-ban ott a docker.io, települ és működik.
ubuntu@ubuntu:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
3caa6dc69d0b: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

NodeJS

Repo-ban ott van, települ és működik.
ubuntu@ubuntu:~$ node --version
v18.7.0

Értékelés

Egy problémám volt, hogy nagyon lassan bootol a gép. Lemértem, mire képet ad a HDMI-n, az 1,5 perc és mire megjelenik a login a képernyőn, az 2,5 perc.
Ettül függetlenül az ubuntu-t már tekinthetjük teljesnek. A továbbiakban szerintem ezzel fogom folytatni.

Utószó

Őszintén szólva meglepődtem, hogy software-esen hogy áll a RISC-V. A GUI-s alkalmazásokról ez nem mondható el. Mentségére, normális GPU-val rendelkező, megfizethető board még nem jött ki. Talán ezen fog javítani a VisionFive 2.
A GUI-val rendelkező programokhoz amúgy is alkalmatlan ez a gép a lassú CPU és a kevés RAM miatt. Ismerkedésnek viszont tökéletes, mert stabil és azok a technológiák, amik nekem kellenek, azok működnek.