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 (with fdtfile=starfive/jh7110-milkv-mars.dtb prior to Linux v6.18-rc1), Milk-V Mars CM Lite (with fdtfile=starfive/jh7110-milkv-mars.dtb prior to Linux v6.18-rc1), 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
Refer to the official U-Boot StarFive boards documentation for detailed instructions specific to your particular board variant, on building and uploading U-Boot SPL plus U-Boot Main to SPI Flash memory. This guide follows the official U-Boot usage advice however with the following packaged builds of U-Boot in the Debian package archives:
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
cd u-boot-starfive_2025.01-3_riscv64/usr/lib/u-boot/starfive_visionfive2
(Optional advice for advanced users) instructions for using another small board computer host as a serial interface
If you want to use serial console from a Raspberry Pi GPIO, after connecting the right pins of both devices, stop the getty service providing a login via serial and use device /dev/ttyS1 wherever /dev/ttyUSB0 is used in this guide:
# Stop service providing login via serial console (would conflict with us using that console) `sudo systemctl stop getty@tty1.service` # Use device /dev/ttyS1 instead of USB device `sudo tio /dev/ttyS1 -o 1`
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 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.
Installation to/from USB media is supported in debian-installer but results in failure to boot the system for boards that need cdns3 USB modules, c.f. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1120745 "initramfs-tools: Failure to boot installed system from USB media on Pine64 Star64 board"
Workaround Bug #1120745 for missing USB driver module in Debian 13 Trixie initramfs
The problem exists with Debian Installer able to install to USB media but the installed system is not bootable due to missing USB driver in initramfs, affecting all JH-7110 SoC using boards that make use of the integrated Cadence USB functionality on the JH-7110 SoC. As a workaround during the last step of installation, at the Finish the installation: Installation complete prompt:
Advance screen text window to the (n)ext screen window for access to a command line prompt
Control-a,n
Pin Debian Testing to reduced priority
`cat > /target/etc/apt/preferences.d/debian-testing-pin200.pref << EOF` Package: * Pin: release a=testing Pin-Priority: 200 EOF
Add Debian Testing to apt sources
`cat > /target/etc/apt/sources.list.d/debian-testing.sources << EOF` Types: deb deb-src URIs: http://deb.debian.org/debian Suites: testing Components: main non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg EOF
Install initramfs-tools with the fix from Debian testing
`chroot /target apt update` `chroot /target apt install -t testing initramfs-tools`
Return screen text window to the (p)revious screen window and continue with the installation
Control-a,p
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. For these commands to be successful it will first be necessary that there is a valid environment to modify having run env save from U-Boot command line environment.
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.
