Arch Linux Image for VisionFive 2

I have rebuilt the kernel from release v2.6.0 and then v2.8.0 for cwt6 (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. The verisilicon framebuffer patched has been applied since cwt5, so you can use text console on HDMI. However, accessing the u-boot prompt and extlinux boot menu may still be useful in certain situations.

Changelog for the cwt6 image:

  • The kernel is built from the VF2_v2.8.0 tag, which includes the latest benefits from Starfive (e.g. hibernation and perf), plus some additional patches (newer binutils, verisilicon framebuffer, and _zba_zbb extensions).
  • Security-oriented options are enabled by default, such as LSM, AppArmor, Audit, Tracing, and seccomp. AppArmor is up and running.
  • Added Sound Sequencer and I2C/SPI RTC.
  • Three preemption modes are available: cwt6-server (default), cwt6-desktop, and cwt6-lowlatency. You can select them from the boot menu or change the default in /boot/boot/extlinux/extlinux.conf.

Here the links to download:

make sure you got the corrected sha256sum:

  • The xz compressed file:
    ArchLinux-VF2_515_v2.8.0-cwt6.img.xz
    2ee255f9b7c343b2bb17cb017bb738ad3df8a365f4b97b41e636e6a735770ac9

  • The raw image file:
    ArchLinux-VF2_515_v2.8.0-cwt6.img
    0d0d8f497914187b52b60e2a98eca83b34452c9ac57f7db447235d1453e24fbb

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.

And if you’ve got a big enough SD or SSD, you can also create another subvolume and store the Debian Image 69 on it. But you’ll need to install dracut and create an initramfs from dracut instead of using the provided initrd . That way, you can add another option in the extlinux.conf file, giving you the ability to boot into the Debian image.

15 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 ?