Arch Linux Image for VisionFive 2

I have rebuilt the kernel from release v2.6.0 (GitHub - starfive-tech/VisionFive2) to include Btrfs and various other USB, network, and WiFi drivers. Additionally, it includes almost everything in the “Networking” section as I intend to use this board as a home server in the future. As such, I did not focus much on the GUI and GPU. However, I also built the JPU, VENC, and VDEC modules for this kernel.

I then used the rootfs from https://riscv.mirror.pkgbuild.com/ to create my own initial image and subsequently updated all packages and installed NetworkManager, OpenSSH and other necessary components to make it ready for use. To access the IP address, the kernel must be run with a USB serial console. Once the IP address is obtained, it can be easily accessed via SSH. (Accessing the IP address is no longer necessary on cwt5, however, accessing the u-boot prompt and extlinux boot menu may still be useful in certain situations.)

Changelog for the cwt5 image:

  • The kernel has been built on VF2 Arch Linux with gcc12 (patch for newer binutils applied).
  • The verisilicon framebuffer patch has been applied, resulting in the availability of text console on HDMI.
  • The kernel has been enabled with the capability to load compressed firmware, allowing it to directly use .bin.xz firmwares from Arch Linux packages. The firmware files that were copied over from the Debian Image 69 have also been compressed.
  • The NVMe hardware monitor has been enabled, allowing you to view the NVMe temperature via the sensors command.
  • Chrony has been installed and enabled, allowing the board to synchronize with NTP at boot time.
  • The issue of incorrect ownership of the /home/user directory has been resolved and the permissions have been set to 750.
  • The root history from the build time has been cleared.

Here the links to download:

make sure you got the corrected sha256sum:

  • The bz2 compressed file:
    ArchLinux-VF2_515_v2.6.0-cwt5.img.bz2
    98a15f56650a87f32bbcb33310485273c515d9d436ff0ac2802e3b75df75b3e0

  • The raw image file:
    ArchLinux-VF2_515_v2.6.0-cwt5.img
    5a7636e35d461b94e47879d3542990995e45e2b8aa6e91e930011e8d10a181ef

root password is starfive
user password is user
user is sudoer, and it can run sudo without password.

It can be used as a base building block for your project.

After flashing the image to an SD card of at least 32 GB, please edit partition 3 and expand it to the rest of the available space. Then use the following command to maximize the partition.

btrfs filesystem resize max /

If you wish to mount NVMe as the root partition, please format it as btrfs and then create a subvolume with the desired name. Mount the path /mnt which already in the /etc/fstab (so just run mount /mnt as root), then use rsync to copy the contents of /mnt/arch-minimal to the new subvolume on the NVMe. Finally, edit the /boot/boot/extlinux/extlinux.conf and the /etc/fstab on the new subvolume.

The kernel source and other necessary components such as GPU drivers are already included in the /home/user/VisionFive2 directory.

Additionally, if you have a large enough SD or SSD, you can also create another subvolume and place the contents of the Debian Image 69 on it. This will allow you to create another menu option in the extlinux.conf file, enabling you to boot into the Debian image. This can be done using a SD card reader. (I am currently doing this on my VF2)

14 Likes

You’re a ROCK STAR!!!

1 Like

That’s what I was waiting for ! Thanks. I will test it soon !

One comment:

It’s the sum for ArchLinux-VF2_515_v2.6.0-cwt4.img.bz2 and not for ArchLinux-VF2_515_v2.6.0-cwt4.img !

2 Likes

I was able to boot on it and log in via SSH but the output is blank (maybe because my device is a 2K one).
I ran some bench with crypsetup and openssl (thanks for 3.0.7 version) and I can say that it’s roughly half the figures I can find on my rpi4:

  • openssl
# openssl speed --multi $(nproc) rsa4096 2>&1 | tail -n 2 |  awk 'BEGIN {"openssl version"|  getline opensslversion; close("openssl version"); print opensslversion} { printf ("%s\t%s\n",$(NF-1),$NF) }'
OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
sign/s  verify/s
40.6    3004.4
  • cryptsetup
# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       133068 iterations per second for 256-bit key
PBKDF2-sha256     172010 iterations per second for 256-bit key
PBKDF2-sha512     146449 iterations per second for 256-bit key
PBKDF2-ripemd160  114774 iterations per second for 256-bit key
PBKDF2-whirlpool   44582 iterations per second for 256-bit key
argon2i       4 iterations, 235741 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      4 iterations, 237449 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b        32.2 MiB/s        32.1 MiB/s
    serpent-cbc        128b        18.9 MiB/s        20.1 MiB/s
    twofish-cbc        128b        30.1 MiB/s        32.1 MiB/s
        aes-cbc        256b        32.1 MiB/s        32.1 MiB/s
    serpent-cbc        256b        19.7 MiB/s        20.1 MiB/s
    twofish-cbc        256b        30.4 MiB/s        32.1 MiB/s
        aes-xts        256b        28.2 MiB/s        29.0 MiB/s
    serpent-xts        256b        19.5 MiB/s        20.1 MiB/s
    twofish-xts        256b        31.0 MiB/s        32.0 MiB/s
        aes-xts        512b        29.0 MiB/s        29.0 MiB/s
    serpent-xts        512b        20.1 MiB/s        20.1 MiB/s
    twofish-xts        512b        31.9 MiB/s        32.1 MiB/s
  • And finally, the entropy is quite good:
#  cat /proc/sys/kernel/random/entropy_avail
3781
1 Like

One error:

# sudo pacman -Syyu
:: Synchronizing package databases...
 core.db failed to download
error: failed retrieving file 'core.db' from riscv.mirror.pkgbuild.com : SSL certificate problem: certificate is not yet valid
error: failed to synchronize all databases (download library error)

SSL certificate problem: certificate is not yet valid

The mirrorlist file was unchanged:

# grep -B 1 ^Server /etc/pacman.d/mirrorlist | head -n 2
## Worldwide
Server = https://riscv.mirror.pkgbuild.com/repo/$repo

Edit: solved by setting time

Its because time is not in sync. You need to set the right system time.

1 Like

Yes, thanks !

1 Like

Cool! Could you share your kernel config ?

To be fair none of those tests are using hardware acceleration from the Encrypt Engines, because openssl does not (yet).
And even once support is added, and patches pushed up stream, the Encrypt Engines will probably not help at all with ripemd160, whirlpool, serpent, twofish.

The kernel config is already in /boot/boot

Yes probably but I have a CPU comparaison now and I think that starfive RISC-V can really improve.

And also, I have an OS where I can install almost everything that I want and which is almost up-to-date (besides the kernel for now).

Are not the ones, that I need/wanted. I would be more focused on AES,chacha and blake2.
I know that when NEON instructions were included in the kernel crypto layer, we saw improvements on ARMv8. I hope it will be the same for RISC-V with hardware acceleration integration.

1 Like

Ah… the output is blank because I didn’t start the X or any DM. I didn’t do anything about it, from what I see on Debian image 69, they patched and build a lot of things in /usr/local my image is roughly an Arch origin.

I don’t even see any console/login prompt.

Because the GPU driver doesn’t support framebuffer yet.

yet

1 Like

2 changed files with 9 additions and 0 deletions .

small changes to see “things”…

I’m sure that there was lots of time spent gaining all the knowledge to know exactly what needed to be added and where. And head scratching and going “Why is this not working, this should be working”.

1 Like

May be I will try patching the kernel and rebuild it once I get back to office after my long weekend.

2 Likes

Indeed !
Sometimes, small changes make some great things: HUGE Improvements made to Linux Kernel Functions!! 8450% Increase - Open Source is Great. - YouTube

1 Like

It would be great ! But don’t worry we all can wait after your long week-end I think.
Do you plan to cross-compiling it ? (I think that manjaro-arm guys use cross compilation to save time)
If not it should take a looooooooooot of time, shouldn’t it ?