VisionFive 2 это первый в мире высокопроизводительный RISC-V одноплатный компьютер (SBC) со встроенным графическим процессором (GPU). В сравнении с предыдущей версией, VisionFive 2 был полностью модернизирован: увеличена рабочая частота процессора, расширены возможности обработки мультимедиа. Приемлемая цена и характеристики данной платы делают VisionFive 2 самым доступным одноплатным компьютером RISC-V для разработчиков.
Hardware Features
VisionFive 2 имеет четырехядерный 64-битный SoC c RV64GC instruction set architecture (ISA), работающий на частотах до 1.5 GHz, а также интегрированный графический ускоритель IMG BXE-4-32 MC1, поддерживающий OpenCL 3.0, OpenGL ES 3.2, и Vulkan 1.2. На плате может быть распаяно 2/4/8 GB LPDDR4 RAM. Имеются устройства ввода-вывода, такие как разъем M.2, разъем eMMC, четыре порта USB 3.0, 40-контактный разъем GPIO, два порта Gigabit Ethernet, слот для TF-карт.
VisionFive 2 имеет: аудио и видео декодеры, разъемы MIPI-CSI и MIPI-DSI для подключения мультимедийных периферийных устройств. Основные характеристики VisionFive 2 приведены в следующем списке:

- Processor: StarFive JH7110 with RISC-V quad-core CPU with 2 MB L2 cache and a monitor core, supporting RV64GC ISA, working up to 1.5 GHz
- GPU: IMG BXE-4-32 MC1 with work frequency up to 600 MHz
- Memory: 2 GB/4 GB/8 GB LPDDR4 SDRAM, up to 2,800 Mbps
- Storage: Onboard TF card slot
- Flash: 16MB SPI Nor Flash GD25Q128E (to store U-Boot and BootLoader)
- Video Output: 1×2-lane MIPI DSI display port, supporting up to 1080p@30fps; 1×4-lane MIPI DSI display port, supporting up to 2K@30fps in both single display and dual display modes; 1×HDMI 2.0, supporting up to 4K@30fps or 2K@60fps (Note: Only one MIPI DSI port can be used for display at a time)
- Camera: 1×2-lane MIPI CSI camera port, supporting up to 1080p@30fps
- Encoder/Decoder: Video decoder supports up to 4K@60fps and multi-stream for H264/H265; Video encoder supports up to 1080p@30fps and multi-stream for H265; JEPG encoder/decoder
- Audio: 4-pole stereo audio jack
- Ethernet: 2×RJ45 Gigabit Ethernet ports
- USB Host: 4×USB 3.0 ports (multiplexed with a PCIe 2.0 1x lane)
- USB Device: 1×USB device port (by reusing the USB-C port)
- M.2 Connector: M.2 M-Key
- eMMC Socket: For eMMC module as OS and data storage
- 2-Pin Fan Header
- Power: USB-C port 5V DC via USB-C with PD, up to 30 W (minimum 3 A); GPIO Power In 5 V DC via GPIO heade (minimum 3 A); PoE (Power over Ethernet) Power function is enabled and requires separate PoE HAT
- 40-Pin GPIO Header 1×40-pin GPIO header, supporting various interface options: 3.3V (on 2 pins); 5V (on 2 pins); Ground (on 8 pins); GPIO; CAN bus; DMIC; I2C; I2S; PWM; SPI; UART; and so on
- Boot mode setting pins: 1-bit QSPI Nor Flash; SDIO3.0; eMMC; UART
- Reset button: To reset VisionFive 2, press and hold the Reset button for more than 3 seconds to ensure the reset is successful
- Dimensions: 100 × 74 mm
- Recommended operating temperature: 0 - 50 ℃
- Debug function: UART TX and UART RX are available through the 40-pin GPIO header
Документацию можно найти на официальном сайте компании StarFive.
Toolchain
Готовый toolchain для работы на 64-разрядных Linux машинах можно получить на нашем FTP-сервере в каталоге toolchains/x86_64. Выбирать здесь нужно последнюю версию архива с именем 'riscv64-RV64GC-linux-glibc-*.tar.xz'.
Кроме того, для работы с микроконтроллерами на архитектуре RISC-V, имеется toolchain riscv64-NONE-elf-newlib-*.tar.xz, его можно использовать, наример, для таких серий микроконтроллеров как GD32VF103.
Для самостоятельной сборки toolchain-а, необходимо получить срез репозитория toolchains, например,
$ svn co svn://radix-linux.su/radix/toolchains/trunk toolchains
и выполнить команду make в соответствующем каталоге:
$ cd toolchains/products/RISCV64-glibc/1.9.8 $ make -j8
Напомним здесь, что перед сборкой необходимо подготовить каталог для инсталляции toolchain-а так, как это описано в разделе, посвященном загрузке toolchain-ов с нашего FTP-сервера.
Boot Images
Для целевой архитектуры RISC-V мы можем использовать как U-Boot, так и GRUB в качестве EFI-загрузчика и, поэтому в каталоге очередного выпуска дистрибутива , дополнительно, будут располагаться образы SPI Nor Flash:
1.9.402 │ └── riscv64-glibc └── visionfive2 ├── app ├── base ├── boot ├── dev ├── dict ├── fonts ├── libs ├── net ├── .dialogrc ├─ @.pkglist ├── visionfive2.efi32fs ├── visionfive2.ext4fs ├── visionfive2.pkglist ├── visionfive2.spi-flash.image ├── visionfive2.spi-flash.image.md5 └─ *write-efiboot-image
Процедура создания загрузочных образов описана в разделе Boot Images и, для платы VisionFive 2, она не отличаться от записи на SD-карту образов файловых систем архитектуры X86_64.
Запись на физический носитель осуществляться с помощью скрипта write-efiboot-image, параметрами которого будут: образ FAT32 файловой системы, содержащей EFI-загрузчик GRUB и образ корневой файловой системы:
# ./write-efiboot-image -e visionfive2.efi32fs -r visionfive2.ext4fs /dev/sdg
Здесь, /dev/sdg необходимо заменить на действительное имя устройства подключенной SD-карты.
Образ visionfive2.spi-flash.image предназначен для прошивания микросхемы GD25Q128E. В нем имеются следующие разделы:
Offset | Length | Size | Part Name | Description ----------+-----------+-------+-----------+----------------- 0x0 0x40000 256k spl SPL 0xf0000 0x10000 64k uboot-env U-Boot environment variables 0x100000 0x300000 3072k uboot fw_payload.img (OpenSBI + U-Boot) 0xf00000 0x100000 1024k data Reseved
На сайте компании StarFive представлена несколько другая таблица разделов. В ней ключевыми являются смещения до SPL, U-Boot environment и fw_payload.img, которые должны оставаться неизменными.
Действительные размеры разделов лучше согласовывать с записью:
# # linux/arch/riscv/boot/dts/starfive/jh7110-visionfive-v2.dtsi: # &qspi { nor_flash: nor-flash@0 { compatible = "jedec,spi-nor"; reg=<0>; cdns,read-delay = <5>; spi-max-frequency = <100000000>; cdns,tshsl-ns = <1>; cdns,tsd2d-ns = <1>; cdns,tchsh-ns = <1>; cdns,tslch-ns = <1>; status = "okay"; partitions { compatible = "fixed-partitions"; #address-cells = <1>; #size-cells = <1>; spl@0 { reg = <0x0 0x40000>; }; uboot-env@f0000 { reg = <0xf0000 0x10000>; }; uboot@100000 { reg = <0x100000 0x300000>; }; data@f00000 { reg = <0xf00000 0x100000>; }; }; }; };
приведенной в конце файла jh7110-visionfive-v2.dtsi, в исходном коде ядра Linux. Тогда загрузчик можно будет обновлять с помощью mtd-utils, прямо на работающей системе.
Source Code
Для создания образа Radix.Linux мы используем репозитории исходных кодов ядра Linux, загрузчика U-Boot и OpenSBI, опубликованные компанией StarFive. Дополнительную информацию о программном обеспечении VisionFive 2 можно найти на страницах сайта https://doc-en.rvspace.org.
Поскольку на плате распаяна SPI Nor Flash GD25Q128E объемом 16MB и, кроме того, разработчики компании StarFive предупреждают о том, что загрузка с TF-карт в скором времени поддерживаться не будет, образ Radix.Linux имеет EFI-раздел с загрузчиком GRUB, а U-Boot прошивается непосредственно в память микросхемы GD25Q128E.
Разумеется существует возможность обновления загрузчика по UART c помощью recovery-образа публикуемого в репозитории Tools, однако мы будем прошивать загрузчик непосредственно программируя микросхему GD25Q128E.
Это позволит нам иметь актуальную версию загрузчика, а также обеспечит возможность отладки, внесенных в код изменений.
U-Boot
Сборка загрузчика осуществляется в каталоге boot/u-boot/visionfive2. Процесс сборки описан в разделе Compiling U-boot and Kernel на сайте компании StarFive. Однако рассмотрев Make-файл тоже легко разобраться в последовательности и этапах приготовления образов u-boot-spl.bin и fw_payload.img.
Пользователи, не имеющие возможности программировать микросхему GD25Q128E, могут использовать загрузчик уже прошитый в SPI Nor Flash на производстве. Однако в этом случае им будет необходимо выполнить следующие команды, находясь в командной строке U-Boot:
VisionFive2 # setenv bootcmd 'run distro_bootcmd' VisionFive2 # saveenv
Ну а мы приступим к описанию процесса записи образа visionfive2.spi-flash.image с помощью программатора ch341a и прищепки, которую обычно используют для восстановления BIOS на машинах с архитектурой X86.

Программатор должен быть доработан так, чтобы на шине данных он давал не 5V, а 3.3V. На следующем видео весьма подробно описан процесс доработки:
Прошивку мы будем осуществлять с помошью утилиты flashrom версии 1.3.0.
Если вы правильно подключили программатор, как показано на рис.2, то набрав следующую команду, вы увидите обнаруженное устройство "GD25LQ128C/GD25LQ128D".
bash-5.2# flashrom --programmer ch341a_spi -VV
flashrom v1.2 on Linux 6.1.20 (x86_64)
flashrom is free software, get the source code at https://flashrom.org
flashrom was built with libpci 3.7.0, GCC 11.2.0, little endian
Command line (3 args): flashrom --programmer ch341a_spi -VV
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Initializing ch341a_spi programmer
Device revision is 3.0.4
The following protocols are supported: SPI.
Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0xc8, id2 0x6018
. . .
Found GigaDevice flash chip "GD25LQ128C/GD25LQ128D" (16384 kB, SPI).
This chip may contain one-time programmable memory. flashrom cannot read
and may never be able to write it, hence it may not be able to completely
clone the contents of this chip (see man page for details).
===
This flash part has status UNTESTED for operations: PROBE READ ERASE WRITE
The test status of this chip may have been updated in the latest development
version of flashrom. If you are running the latest development version,
please email a report to flashrom@flashrom.org if any of the above operations
work correctly for you with this flash chip. Please include the flashrom log
file for all operations you tested (see the man page for details), and mention
which mainboard or programmer you tested in the subject line.
Thanks for your help!
No operations were specified.
На сообщение о том, что операции: PROBE READ ERASE WRITE еще не протестированы, можно не обращать внимание, так как разработчики flashrom писали, что код функций для работы с "GD25Q128E" полностью совпадает с теми, что используются для "GD25LQ128C", просто они еще не успели привести сообщения в порядок.

Прежде чем шить новый образ visionfive2.spi-flash.image, мы рекомендуем сохранить существующую прошивку на случай, если будет необходимо восстановить предыдущее содержимое GD25Q128E. Сделать это лучще несколько раз и сравнить контрольные суммы архивных образов:
bash-5.2# flashrom --programmer ch341a_spi -r GD25Q128E.bin -c "GD25LQ128C/GD25LQ128D" bash-5.2# flashrom --programmer ch341a_spi -r GD25Q128E-2.bin -c "GD25LQ128C/GD25LQ128D" bash-5.2# flashrom --programmer ch341a_spi -r GD25Q128E-3.bin -c "GD25LQ128C/GD25LQ128D" bash-5.2# sha256sum GD25Q128E-2.bin GD25Q128E-3.bin GD25Q128E.bin 658de4da3c9ec801e8c0c2cee8ba07bfb387019a682a15d9350e0103d52e372f GD25Q128E-2.bin 658de4da3c9ec801e8c0c2cee8ba07bfb387019a682a15d9350e0103d52e372f GD25Q128E-3.bin 658de4da3c9ec801e8c0c2cee8ba07bfb387019a682a15d9350e0103d52e372f GD25Q128E.bin
Если контрольные суммы совпадают, то сохраненная копия верна и можно обновлять содержимое GD25Q128E с помощью команды:
bash-5.2# flashrom --programmer ch341a_spi --write spi-flash.image -c "GD25LQ128C/GD25LQ128D"
В случае успеха, на консоль будет выведено сообщение:
bash-5.2# flashrom --programmer ch341a_spi --write spi-flash.image -c "GD25LQ128C/GD25LQ128D" flashrom v1.2 on Linux 6.1.20 (x86_64) flashrom is free software, get the source code at https://flashrom.org Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). Found GigaDevice flash chip "GD25LQ128C/GD25LQ128D" (16384 kB, SPI) on ch341a_spi. === . . . Reading old flash chip contents... done. Erasing and writing flash chip... Erase/write done. Verifying flash... VERIFIED.
Теперь надо перевести переключатели вправо (RGPIO_0 = 0, RGPIO_1 = 0), как показано на рис.3, подключить SD-карту с образом Radix.Linux и, можно запускать плату.

GRUB
GRUB версии 2.06 мы собрали с минимальным набором изменений, достаточных для работы на SoCs с архитектурой RISC-V. И если подключиться с помощью, например, minicom, к отладочному порту (рис. 3), то можно видеть процесс загрузки и, в том числе, интерфейс GRUB.
Если вы не хотите использовать GRUB, а предпочитаете чтобы U-Boot загружал ядро Linux самостоятельно, то вы можете просто удалить или переименовать файл bootriscv64.efi на первом разделе SD-карты так, как показано на следующем листинге:
bash-5.2# mkdir tmp bash-5.2# mount /dev/sdg tmp bash-5.2# cd tmp/efi/boot bash-5.2# mv bootriscv64.efi bootriscv64.efi.backup
Boot from NVME
Мы немного изменили переменные окружения U-Boot c тем расчетом, чтобы последовательность выбора устройств для загрузки системы была следующей:
VisionFive2 # printenv boot_targets VisionFive2 # boot_targets=mmc1 mmc0 nvme0 dhcp
Таким образом, если после загрузки с SD-карты инсталлировать систему на устройство /dev/nvme0n1 по инструкции представленной в разделе Install Instructions и извлечь SD-карту, то, при следующем включении питания, плата загрузится с NVME диска.
Однако если подключены оба устройства: SD-карта и NVME диск, то загрузка будет осуществляться с SD-карты.
GPU
SoC JH7110 содержит встроенный графический ускоритель Imagination BXE-4-32 MC1, работающий на частоте до 600 MHz. На работающей системе Radix.Linux вы можете собрать примеры программ mesa-demos и glmark2.
Сделать это можно, например, следующим образом:
bash-5.2$ git clone https://github.com/glmark2/glmark2 bash-5.2$ cd glmark2 bash-5.2$ mkdir build bash-5.2$ cd build bash-5.2$ meson setup --prefix=/usr -Dflavours=drm-gl,x11-gl . .. bash-5.2$ ninja
И инсталлировать glmark2 от имени пользователя root:
bash-5.2# ninja install
Примеры mesa-demos, перед сборкой, достаточно сконфигурировать командой:
bash-5.2$ meson setup --prefix=/usr . ..
Запускать примеры необходимо используя переменную окружения GALLIUM_DRIVER=softpipe:
bash-5.2$ GALLIUM_DRIVER=softpipe gears

Переменная GALLIUM_DRIVER=softpipe необходима, так как llvmpipe еще не поддерживает архитектуру RISC-V.
В заключение, необходимо отметить, что компания StarFive уделяет большое внимание поддержке разработчиков программного обеспечения для своих устройств. Документацию и статьи, посвященные устройствам серии VisionFive можно найти на официальном сайте, где имеется исчерпывающая документация и большое количество примеров.