Contents
Overall Status
Core Components |
||
Boot Standard Kernel: |
|
|
LAN network card: |
|
|
Detect hard drives (NVMe): |
|
|
Detect hard drives (microSD): |
|
|
USB ports |
|
|
Analog audio output |
|
|
HDMI |
|
|
Extra Features |
||
CPU Frequency Scaling |
|
|
Hibernation |
[?] |
|
Sleep / Suspend |
[?] |
|
Power Off / Reboot |
|
|
Xorg |
[?] |
|
Legend :
= OK ;
= Unsupported(No Driver) ;
= Error (Couldn't get it working); [?] Unknown, Not Test ; [-] Not-applicable
= Configuration Required;
= Only works with a non-free driver and or firmware
Basic VisionFive V2 hardware support (PCIe, MMC, Ethernet networking) is present for Debian 13 ("Trixie") release
- Not supported: CAN, MIPI DSI, HDMI/ DC8200
Variant boards with StarFive JH7110 CPU also supported: Pine64 Star64, Milk-V Mars
Limited support for Milk-V Mars CM, Milk-V Mars CM Lite, DeepComputing FML13v01 (DC-ROMA RISC-V Mainboard for Framework Laptop 13)
Current support state could be followed at RVSpace JH7110 Upstream Status page.
Installation
Be sure to set the DIP switches correctly for your boot medium. Boot methods SD and eMMC directly from StarFive JH7110 CPU loader are deprecated and should not be used as they have been removed from vendor documentation and are incompatible to GUID Partition Table disk representation. Remaining valid boot methods are UART for recovery action and SPI NOR flash for U-Boot bootloader (which can then itself correctly boot from SD and eMMC). See VisionFive 2 Boot Mode Settings for more details.
Update firmware (U-Boot)
It is required to update SPI NOR flash to contain a version of U-Boot upstream release v2025.01 or newer: https://packages.debian.org/trixie/riscv64/u-boot-starfive/download
wget http://deb.debian.org/debian/pool/main/u/u-boot/u-boot-starfive_2025.01-3_riscv64.deb
dpkg -x u-boot-starfive_2025.01-3_riscv64.deb u-boot-starfive_2025.01-3_riscv64
Downloading U-Boot using a USB media
Copy u-boot-spl.bin.normal.out and u-boot.itb from u-boot-starfive_2025.01-3_riscv64/usr/lib/u-boot/starfive_visionfive2 to a USB media using a FAT partition.
Insert the USB media in one of the port of the board, power-on the board and get ready to interrupt the boot process
U-Boot 2025.01-2 (Mar 08 2025 - 03:17:41 +0000)
CPU: sifive,u74-mc
Model: StarFive VisionFive 2 v1.2A
DRAM: 4 GiB
Core: 136 devices, 26 uclasses, devicetree: board
WDT: Not starting watchdog@13070000
MMC: mmc@16010000: 0, mmc@16020000: 1
Loading Environment from SPIFlash... SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB
OK
StarFive EEPROM format v2
--------EEPROM INFO--------
Vendor : StarFive Technology Co., Ltd.
Product full SN: VF7110A1-2243-XXXXXXXX-XXXXXXXX
data version: 0x2
PCB revision: 0xa1
BOM revision: A
Ethernet MAC0 address: 6c:cf:39:xx:xx:xx
Ethernet MAC1 address: 6c:cf:39:xx:xx:xx
--------EEPROM INFO--------
starfive_7110_pcie pcie@2b000000: Starfive PCIe bus probed.
starfive_7110_pcie pcie@2c000000: Starfive PCIe bus probed.
In: serial@10000000
Out: serial@10000000
Err: serial@10000000
Net: eth0: ethernet@16030000, eth1: ethernet@16040000
starting USB...
Bus xhci_pci: Register 5000420 NbrPorts 5
Starting the controller
USB XHCI 1.00
scanning bus xhci_pci for devices... 3 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
Working FDT set to ff72da10
Hit any key to stop autoboot: 0
StarFive #sf probe
SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB StarFive #
load usb 0:1 $loadaddr u-boot-spl.bin.normal.out && sf update $loadaddr 0 $filesize
147274 bytes read in 3 ms (46.8 MiB/s) device 0 offset 0x0, size 0x23f4a 12288 bytes written, 134986 bytes skipped in 0.92s, speed 1587458 B/s StarFive #
load usb 0:1 $loadaddr u-boot.itb && sf update $loadaddr 0x100000 $filesize
1024523 bytes read in 13 ms (75.2 MiB/s) device 0 offset 0x100000, size 0xfa20b 925696 bytes written, 98827 bytes skipped in 7.590s, speed 138168 B/s StarFive #
eraseenv
Erasing Environment on SPIFlash... OK StarFive #
reset
resetting ...
Downloading U-Boot through the serial port
cd u-boot-starfive_2025.01-3_riscv64/usr/lib/u-boot/starfive_visionfive2
Connect a USB-to-Serial converter to the board’s GPIO header. Set the boot mode DIP switch to enable system recovery via UART boot mode. Start a serial terminal such as tio on the host PC and run:
tio /dev/ttyUSB0 -o 1
You should see output similar to the following:
[18:59:33.964] tio 3.9 [18:59:33.964] Press ctrl-t q to quit [18:59:33.981] Connected to /dev/ttyUSB0
Power on the board. The console will display boot messages and you will be ready to enter commands over the UART serial connection.
(C)StarFive CC (C)StarFive CCC
^t-x
[19:51:55.164] Please enter which X modem protocol to use: [19:51:55.164] (0) XMODEM-1K send [19:51:55.164] (1) XMODEM-CRC send [19:51:55.164] (2) XMODEM-CRC receive
0
[19:51:55.928] Send file with XMODEM-1K [19:51:55.928] Enter file name:
u-boot-spl.bin.normal.out
[19:52:10.856] Sending file 'u-boot-spl.bin.normal.out' [19:52:10.856] Press any key to abort transfer ...…| [19:52:24.880] Done U-Boot SPL 2025.01-3 (Apr 08 2025 - 23:07:41 +0000) DDR version: dc2e84f0. Trying to boot from UART CCC
^t-y
[19:52:42.978] Send file with YMODEM [19:52:42.978] Enter file name:
u-boot.itb
[19:53:13.244] Sending file 'u-boot.itb' [19:53:13.244] Press any key to abort transfer ...…| [19:54:49.926] Done Loaded 1024523 bytes U-Boot 2025.01-3 (Apr 08 2025 - 23:07:41 +0000) CPU: sifive,u74-mc Model: Pine64 Star64 DRAM: 4 GiB Core: 136 devices, 26 uclasses, devicetree: board WDT: Not starting watchdog@13070000 MMC: mmc@16010000: 0, mmc@16020000: 1 Loading Environment from SPIFlash... SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB OK StarFive EEPROM format v2 --------EEPROM INFO-------- Vendor : PINE64 Product full SN: STAR64V1-2310-D004E000-0000xxxx data version: 0x2 PCB revision: 0xc1 BOM revision: A Ethernet MAC0 address: 6c:cf:39:00:xx:xx Ethernet MAC1 address: 6c:cf:39:00:xx:xx --------EEPROM INFO-------- starfive_7110_pcie pcie@2b000000: Starfive PCIe bus probed. starfive_7110_pcie pcie@2c000000: Starfive PCIe bus probed. In: serial@10000000 Out: serial@10000000 Err: serial@10000000 Net: eth0: ethernet@16030000, eth1: ethernet@16040000 libfdt fdt_check_header(): FDT_ERR_BADMAGIC Card did not respond to voltage select! : -110 Card did not respond to voltage select! : -110 bootmode flash device 0 Card did not respond to voltage select! : -110 Hit any key to stop autoboot: 2 1 0
press enter i.e. or any other key to interrupt autoboot here
StarFive #
sf probe
StarFive # sf probe SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB StarFive #
loady $loadaddr && sf update $loadaddr 0 $filesize
StarFive # loady $loadaddr && sf update $loadaddr 0 $filesize ## Ready for binary (ymodem) download to 0xA0000000 at 115200 bps... CCC
^t-y
[19:56:10.630] Send file with YMODEM [19:56:10.630] Enter file name:
u-boot-spl.bin.normal.out
[19:56:24.803] Sending file 'u-boot-spl.bin.normal.out' [19:56:24.803] Press any key to abort transfer ...…| [19:56:42.619] Done ## Total Size = 0x00023f4a = 147274 Bytes ## Start Addr = 0xA0000000 device 0 offset 0x0, size 0x23f4a 147274 bytes written, 0 bytes skipped in 0.783s, speed 191868 B/s StarFive #
loady $loadaddr && sf update $loadaddr 100000 $filesize
StarFive # loady $loadaddr && sf update $loadaddr 100000 $filesize ## Ready for binary (ymodem) download to 0xA0000000 at 115200 bps... CCC
^t-y
[19:57:40.296] Send file with YMODEM [19:57:40.296] Enter file name:
u-boot.itb
[19:58:01.384] Sending file 'u-boot.itb' [19:58:01.384] Press any key to abort transfer ...…| [19:59:37.930] Done ## Total Size = 0x000fa20b = 1024523 Bytes ## Start Addr = 0xA0000000 device 0 offset 0x100000, size 0xfa20b 925696 bytes written, 98827 bytes skipped in 7.517s, speed 139509 B/s StarFive #
env erase
StarFive # env erase Erasing Environment on SPIFlash... OK StarFive #
Debian 13 Trixie installation
Adjust the boot mode DIP switch to select the 'QSPI NOR Flash' boot mode for normal operation.
Booting debian-installer from USB media
Prepare the USB image on a Linux host: wget https://deb.debian.org/debian/dists/trixie/main/installer-riscv64/current/images/netboot/mini.iso
or
wget https://cdimage.debian.org/cdimage/trixie_di_rc2/riscv64/iso-cd/debian-trixie-DI-rc2-riscv64-netinst.iso
or any other debian-installer flavour.
Dump the corresponding ISO image to the USB media. In the following command, the "X" is a letter in the range a-z. You should be able to see to which device the USB stick was mapped by running the command lsblk before and after inserting it. (The output of dmesg (as root) is another possible method for that.)
cp mini.iso /dev/sdX
sync
Insert the USB media in one of the port of the board and power-on the board
U-Boot SPL 2025.01-2 (Mar 08 2025 - 03:17:41 +0000)
DDR version: dc2e84f0.
Trying to boot from SPI
U-Boot 2025.01-2 (Mar 08 2025 - 03:17:41 +0000)
CPU: sifive,u74-mc
Model: StarFive VisionFive 2 v1.2A
DRAM: 4 GiB
Core: 136 devices, 26 uclasses, devicetree: board
WDT: Not starting wathdog@13070000
MMC: mmc@16010000: 0, mmc@16020000: 1
Loading Environment from SPIFlash... SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB
OK
StarFive EEPROM format v2
--------EEPROM INFO--------
Vendor : StarFive Technology Co., Ltd.
Product full SN: VF7110A1-2243-XXXXXXXX-XXXXXXXX
data version: 0x2
PCB revision: 0xa1
BOM revision: A
Ethernet MAC0 address: 6c:cf:39:xx:xx:xx
Ethernet MAC1 address: 6c:cf:39:xx:xx:xx
--------EEPROM INFO--------
starfive_7110_pcie pcie@2b000000: Starfive PCIe bus probed.
starfive_7110_pcie pcie@2c000000: Starfive PCIe bus probed.
In: serial@10000000
Out: serial@10000000
Err: serial@10000000
Net: eth0: ethernet@16030000, eth1: ethernet@16040000
starting USB...
Bus xhci_pci: Register 5000420 NbrPorts 5
Starting the controller
USB XHCI 1.00
scanning bus xhci_pci for devices... 3 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
Working FDT set to ff72da10
Hit any key to stop autoboot: 2 1 0
Device 0: Vendor: 0x126f Rev: T0928A0 Prod: 12282220A0365
Type: Hard Disk
Capacity: 228936.5 MB = 223.5 GB (468862128 x 512)
... is now current device
Scanning nvme 0:1...
37516 bytes read in 0 ms
Card did not respond to voltage select! : -110
Card did not respond to voltage select! : -110
Booting: usb 0
error: no suitable video mode found.At this point, the GRUB menu should appear, select Install or another installation method in the sub-menus. In case GRUB does not start automatically, you can try the following commands from U-Boot:
usb start
run bootcmd_usb0
Booting debian-installer from serial port
wget https://deb.debian.org/debian/dists/trixie/main/installer-riscv64/current/images/netboot/mini.efi
tio /dev/ttyUSB0 -o 1
Use a suitable serial terminal i.e. tio described herein:
[21:18:47.463] tio 3.9 [21:18:47.463] Press ctrl-t q to quit [21:18:47.480] Connected to /dev/ttyUSB0
power-on the board ready to enter commands over UART serial
U-Boot SPL 2025.01-3 (Apr 08 2025 - 23:07:41 +0000) DDR version: dc2e84f0. Trying to boot from SPI U-Boot 2025.01-3 (Apr 08 2025 - 23:07:41 +0000) CPU: sifive,u74-mc Model: Pine64 Star64 DRAM: 4 GiB Core: 136 devices, 26 uclasses, devicetree: board WDT: Not starting watchdog@13070000 MMC: mmc@16010000: 0, mmc@16020000: 1 Loading Environment from SPIFlash... SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB *** Warning - bad CRC, using default environment StarFive EEPROM format v2 --------EEPROM INFO-------- Vendor : PINE64 Product full SN: STAR64V1-2310-D004E000-0000xxxx data version: 0x2 PCB revision: 0xc1 BOM revision: A Ethernet MAC0 address: 6c:cf:39:00:xx:xx Ethernet MAC1 address: 6c:cf:39:00:xx:xx --------EEPROM INFO-------- starfive_7110_pcie pcie@2b000000: Starfive PCIe bus probed. starfive_7110_pcie pcie@2c000000: Starfive PCIe bus probed. In: serial@10000000 Out: serial@10000000 Err: serial@10000000 Net: eth0: ethernet@16030000, eth1: ethernet@16040000 starting USB... No USB controllers found Working FDT set to ff72da10 Hit any key to stop autoboot: 2 1 0
press enter i.e. or any other key to interrupt autoboot here
StarFive #
(optional) Set devicetree search path in U-Boot if needed i.e. Milk-V Mars CM and Milk-V Mars CM Lite on U-Boot v2025.01: env set fdtfile starfive/jh7110-milkv-mars.dtb ; env save
If you want to avoid the long wait (~2h) of transferring the 70 MiB+ mini.efi over a 115 kbps serial connection, you can instead transfer it via a TFTP server, from MMC storage, or from USB on board variants that support USB in U-Boot. See the U-Boot documentation for more details on alternatives to serial data transfer.
loady $loadaddr && bootefi $loadaddr
StarFive # loady $loadaddr && bootefi $loadaddr ## Ready for binary (ymodem) download to 0x82000000 at 115200 bps... CCC
^t-y
[21:24:32.232] Send file with YMODEM [21:24:32.232] Enter file name:
mini.efi
[21:24:51.255] Sending file 'mini.efi' [21:24:51.255] Press any key to abort transfer ...…| [23:17:31.511] Done ## Total Size = 0x047cba00 = 75282944 Bytes ## Start Addr = 0x82000000 Card did not respond to voltage select! : -110 Card did not respond to voltage select! : -110 Cannot persist EFI variables without system partition Booting /MemoryMapped(0x0,0x82000000,0x867cba00) EFI stub: Booting Linux Kernel... EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path EFI stub: Using DTB from configuration table EFI stub: Exiting boot services... [ 0.000000] Linux version 6.12.33+deb13-riscv64 (debian-kernel@lists.debian.org) (riscv64-linux-gnu-gcc-14 (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44) #1 SMP Debian 6.12.33-1 (2025-06-19) [ 0.000000] Machine model: Pine64 Star64 …
Common part
From then on are the familiar steps in sequence for a debian-installer workflow.
Installation notes:
The help text at set up users and passwords prompt may be obscured, it reads that if you want to enable sudo instead of a root password then enter twice a blank password when asked to configure a root password.
- EFI System Partition must be sized large enough to contain two copies of Grub2 EFI + U-Boot EFI environment variable storage + all riscv64 devicetree blob files, of about 1MiB sum total. However, for wide compatibility the minimum recommended ESP sizing should be of length 260MiB (~272MB). As of Debian Trixie release the use of Grub2 EFI avoids the need of Linux kernel and initial ramdisk images stored on the ESP and so the ESP does not need to be sized any larger than the minimum.
- Swap partition is recommended for NVMe storage and should be omitted on slower or wear-cycle sensitive media such as SD card.
When asked if you want to install for removable media a "No" answer installs Grub2 on EFI System Partition as EFI/debian/grubriscv64.efi while a default "Yes" answer will place an additional copy of the Grub2 bootloader as EFI/BOOT/BOOTRISCV64.EFI. Choose "Yes" so that U-Boot EFI will find the Grub2 bootloader automatically.
U-Boot Linux Access
To access and edit U-Boot environment from a running OS, one can use u-boot-tools which are available in Debian repositories.
u-boot-tools should be configured to read the environment:
# Edit /etc/fw_env.config and set to content as below: # NOR example # MTD device name Device offset Env. size Flash sector size Number of sectors /dev/mtd1 0x0000 0x10000 0x1000
When configuration above is complete, one can try to read environment using fw_printenv and set using fw_setenv commands.
LUA Support
At the moment (Feb 10th, 2024), LUA JIT compilation support is not implemented for RISC-V, see Add support for RISC-V issue for the current state. A work in progress JIT support is available at LuaJIT.
