2023-02-27 - Bas Magré

StarFive VisionFive 2 - Fedora 37 external GPU ATI Radeon 5450 running Quake2

I wanted to compile and test a few programs on a RISC-V. I only ran into the problem of minimal support of the onboard GPU and custom build Debian from the StarFive Team.

So below you can see my “solution”. (Part I)

Hardware

  • StarFive VisionFive 2
  • BEYIMEI PCIE Riser-Ver010X GPU Riser, 1X tot 16X (4PIN/6PIN/MOLEX) PCIE-verlengkabel, M.2 naar PCI-E Riser Card Bitcoin Litecoin Ethereum. This is about 11 EURO on amazon, so no big deal… amazon-link
  • ATI Radeon 5450, Bought on a Dutch second-hand website, for 10 EURO.
  • An ATX power supply (was still lying around in the house)
  • For debugging a USB to TTL (was still lying around in the house), is about 5 EURO.
img

My first setup was with a too light power supply for the video card, you can still see it in the background (no longer connected). I always used this to connect a hard disk externally. If this also happens to you, you will see that the video card is recognized by the kernel, but that you see a lot of errors. [ 817.910347] pcie_plda 2c000000.pcie: AXI fetch error

Debugging

The longest I spent trying to get a working kernel that had the ATI video card and audio over HDMI working.

I have spent a lot of hours to get Kernel driver in use: radeon and Kernel driver in use: snd_hda_intel in my screen :)

$ lspci -k
0000:00:00.0 PCI bridge: PLDA XpressRich-AXI Ref Design (rev 02)
lspci: Unable to load libkmod resources: error -2
0000:01:00.0 USB controller: VIA Technologies, Inc. VL805/806 xHCI USB 3.0 Controller (rev 01)
        Subsystem: VIA Technologies, Inc. VL805/806 xHCI USB 3.0 Controller
        Kernel driver in use: xhci_hcd
0001:00:00.0 PCI bridge: PLDA XpressRich-AXI Ref Design (rev 02)
0001:01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cedar [Radeon HD 5000/6000/7350/8350 Series]
        Subsystem: ASUSTeK Computer Inc. Device 0366
        Kernel driver in use: radeon
0001:01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cedar HDMI Audio [Radeon HD 5400/6300/7300 Series]
        Subsystem: ASUSTeK Computer Inc. Device aa68
        Kernel driver in use: snd_hda_intel
# or for Audio
$ inxi -aA
Audio:
  Device-1: AMD Cedar HDMI Audio [Radeon HD 5400/6300/7300 Series] vendor: ASUSTeK
    driver: snd_hda_intel v: kernel bus-ID: 0001:01:00.1 chip-ID: 1002:aa68 class-ID: 0403
  Device-2: jh7110-pwmdac driver: starfive_pwmdac bus-ID: N/A chip-ID: starfive:100b0000
    class-ID: pwmdac
  Device-3: jh7110-hdmi driver: innohdmi_starfive bus-ID: N/A chip-ID: starfive:29590000
    class-ID: hdmi
  Device-4: simple-audio-card driver: N/A bus-ID: N/A chip-ID: simple-audio-card:soc
    class-ID: snd-card0
  Device-5: simple-audio-card driver: asoc_simple_card bus-ID: N/A
    chip-ID: simple-audio-card:soc class-ID: snd-card1
  Device-6: simple-audio-card driver: N/A bus-ID: N/A chip-ID: simple-audio-card:soc
    class-ID: snd-card2
  Device-7: simple-audio-card driver: asoc_simple_card bus-ID: N/A
    chip-ID: simple-audio-card:soc class-ID: snd-card3
  Device-8: simple-audio-card driver: N/A bus-ID: N/A chip-ID: simple-audio-card:soc
    class-ID: snd-card4
  Device-9: simple-audio-card driver: N/A bus-ID: N/A chip-ID: simple-audio-card:soc
    class-ID: snd-card5
  Device-10: simple-audio-card driver: N/A bus-ID: N/A chip-ID: simple-audio-card:soc
    class-ID: snd-card6
  Sound API: ALSA v: k5.15.0-dirty running: yes
  Sound Server-1: PulseAudio v: 16.1 running: no
  Sound Server-2: PipeWire v: 0.3.59 running: yes

The longest it take to findout I had to add firmwares to the kernel. I got the error’s with:

$ journalctl -b | grep radeon
$ journalctl -b | grep amdgpu
$ journalctl -b | grep firmware

After this it was only getting the Fedora root partition on my SD-card. The “Frankenstein” Debian-build-69 is fun if you want to see the board working with the onboard GPU, but those drivers are really unfinished and X11 was as fast as I could see completely custom build for this GPU. (No OpenGL, OpenGL ES 3 only).

DIY Step by step

Create SD-card

My machine has a SD-card reader on /dev/mmcblk0 this can of course be difference on your machine.

Download the Debian-Image-69 from StarFive VisionFive 2 Support page (I used the torrent in the google drive). Download the Fedora RISC-V image Fedora-Developer-37-20221130.n.0-nvme.raw.img.xz link and extract it to Fedora-Developer-37-20221130.n.0-nvme.raw.img

# create a loop device of image
$ sudo losetup -f -P ~/Downloads/Image-69/starfive-jh7110-VF2_515_v2.5.0-69.img
$ sudo losetup -f -P ~/Downloads/Fedora-Developer-37-20221130.n.0-nvme.raw.img
# find your loop device
$ losetup -l
NAME        SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                               DIO LOG-SEC
/dev/loop1          0      0         1  1 /var/lib/snapd/snaps/gnome-3-28-1804_161.snap                             0     512
/dev/loop8          0      0         1  1 /var/lib/snapd/snaps/gtk-common-themes_1534.snap                          0     512
/dev/loop15         0      0         0  0 /home/opvolger/Downloads/Fedora-Developer-37-20221130.n.0-nvme.raw.img    0     512
/dev/loop6          0      0         1  1 /var/lib/snapd/snaps/core18_2679.snap                                     0     512
/dev/loop13         0      0         1  1 /var/lib/snapd/snaps/wine-platform-runtime_335.snap                       0     512
/dev/loop4          0      0         1  1 /var/lib/snapd/snaps/bare_5.snap                                          0     512
/dev/loop11         0      0         1  1 /var/lib/snapd/snaps/wine-platform-5-stable_18.snap                       0     512
/dev/loop2          0      0         1  1 /var/lib/snapd/snaps/core18_2697.snap                                     0     512
/dev/loop0          0      0         1  1 /var/lib/snapd/snaps/gtk-common-themes_1535.snap                          0     512
/dev/loop9          0      0         1  1 /var/lib/snapd/snaps/snapd_18357.snap                                     0     512
/dev/loop7          0      0         1  1 /var/lib/snapd/snaps/snapd_17950.snap                                     0     512
/dev/loop14         0      0         0  0 /home/opvolger/Downloads/Image-69/starfive-jh7110-VF2_515_v2.5.0-69.img   0     512
/dev/loop5          0      0         1  1 /var/lib/snapd/snaps/cncra_63.snap                                        0     512
/dev/loop12         0      0         1  1 /var/lib/snapd/snaps/wine-platform-runtime_334.snap                       0     512
/dev/loop3          0      0         1  1 /var/lib/snapd/snaps/cncra_76.snap                                        0     512
/dev/loop10         0      0         1  1 /var/lib/snapd/snaps/wine-platform-5-stable_16.snap                       0     512
# in my case it is loop14 and loop15

# insert your SD-card and delete all partitions (I had 3)
$ sudo fdisk /dev/mmcblk0
[sudo] password for opvolger: 

Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-3, default 3): 1

Partition 1 has been deleted.

Command (m for help): d
Partition number (2,3, default 3): 2

Partition 2 has been deleted.

Command (m for help): d
Selected partition 3
Partition 3 has been deleted.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

# add all 3 partitions (not all data) of the Debain-Image-69 to the SD-card
$ sudo dd if=/dev/loop14 of=/dev/mmcblk0 status=progress
[sudo] password for opvolger: 
1121309184 bytes (1.1 GB, 1.0 GiB) copied, 93 s, 12.1 MB/s^C
2190529+0 records in
2190529+0 records out
1121550848 bytes (1.1 GB, 1.0 GiB) copied, 95.7358 s, 11.7 MB/s
# You can hit Ctrl+C after about 1GB (I did!)
# the Fedora img has only 2 partitions, 2nd is the root partition. We need to (re)place the root partition of the Debain-Image-69 (3th partition now on the SD-card)
$ sudo dd if=/dev/loop15p2 of=/dev/mmcblk0p3 status=progress
9975758848 bytes (10 GB, 9.3 GiB) copied, 319 s, 31.3 MB/s 
19537853+0 records in
19537853+0 records out
10003380736 bytes (10 GB, 9.3 GiB) copied, 384.316 s, 26.0 MB/s

Remove the SD-card and put it back in again.

Building the Linux Kernel

I build this on my own machine, otherwise it will take a very long time. so cross compile! Everything is neatly explained if you click through to the “linux” repo of all (yet) custom code for the SBC. link

$ mkdir ~/visionfive2
$ cd visionfive2
$ git clone https://github.com/starfive-tech/linux.git
Cloning into 'linux'...
remote: Enumerating objects: 9350943, done.
remote: Counting objects: 100% (1061/1061), done.
remote: Compressing objects: 100% (425/425), done.
Receiving objects:   1% (160706/9350943), 77.16 MiB | 14.26 MiB/s
Done
$ cd linux
$ git checkout JH7110_VisionFive2_devel # not working with tag 'VF2_v2.10.4', may in the feature it will (again)
$ git checkout VF2_v2.8.0
Updating files: 100% (20490/20490), done.
Switched to branch 'JH7110_VisionFive2_devel'
Your branch is up to date with 'origin/JH7110_VisionFive2_devel'.

Now we have the modified kernel 5.15 that workes with VisionFive 2. We can use the instructions of the other branch link. Here and there I deviated a little from it

I am running Manjaro on got an error. I fixxed it in arch/riscv/Makefile on line +/- 56 (find this online).

...
...
...
# ISA string setting
riscv-march-$(CONFIG_ARCH_RV32I)    := rv32ima
riscv-march-$(CONFIG_ARCH_RV64I)    := rv64ima
riscv-march-$(CONFIG_FPU)       := $(riscv-march-y)fd
riscv-march-$(CONFIG_RISCV_ISA_C)   := $(riscv-march-y)c

# Newer binutils versions default to ISA spec version 20191213 which moves some
# instructions from the I extension to the Zicsr and Zifencei extensions.
toolchain-need-zicsr-zifencei := $(call cc-option-yn, -march=$(riscv-march-y)_zicsr_zifencei)
riscv-march-$(toolchain-need-zicsr-zifencei) := $(riscv-march-y)_zicsr_zifencei

KBUILD_CFLAGS += -march=$(subst fd,,$(riscv-march-y))
KBUILD_AFLAGS += -march=$(riscv-march-y)
...
...
...
# create the .config with all you need for only the StarFive VisionFive 2
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- starfive_jh7110_defconfig

# open the menu
make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv menuconfig

Now we have to add the ATI video-card and HDMI-audio.

Device Drivers ---> [HIT ENTER]
  Generic Driver Options ---> [HIT ENTER]
    Firmware loader ---> [HIT ENTER]
      () Build named firmware blobs into the kernel binary [HIT ENTER]

enter this in the line:

radeon/CYPRESS_uvd.bin radeon/CEDAR_smc.bin radeon/CEDAR_me.bin radeon/CEDAR_pfp.bin radeon/CEDAR_rlc.bin

Select Exit,Exit,Exit

Device Drivers --->
  Graphics support ---> [HIT ENTER]
    <*> ATI Radeon [hit space twice]

Select Exit

Device Drivers --->
  Sound card support ---> [HIT ENTER]
    Advanced Linux Sound Architecture ---> [HIT ENTER]
      HD-Audio --->
        Build HDMI/DisplayPort HD-audio codec support [hit space twice]

Select Exit,Exit,Exit,Exit

Now save your changes! as .config and Exit

We can compile the kernel, I have 8 cores in my machine… so I added -j 8

$ make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j 8
  SYNC    include/config/auto.conf
  CALL    scripts/atomic/check-atomics.sh
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  CC      sound/core/sound.o
  CC      sound/core/init.o
  CC      sound/core/control.o
  UPD     kernel/config_data
  AR      sound/pci/ac97/built-in.a
  CC      sound/pci/hda/hda_bind.o
  CC      sound/pci/hda/hda_codec.o
  GZIP    kernel/config_data.gz
  CC      kernel/configs.o
  CC      drivers/tty/vt/keyboard.o
  AR      kernel/built-in.a
  CC      sound/core/vmaster.o
  CC      sound/usb/card.o
  CC      sound/pci/hda/hda_jack.o
  CC      sound/core/ctljack.o
...
...
...
  LD      vmlinux
  SORTTAB vmlinux
  SYSMAP  System.map
  MODPOST modules-only.symvers
  OBJCOPY arch/riscv/boot/Image
  GZIP    arch/riscv/boot/Image.gz
  GEN     Module.symvers
  LD [M]  drivers/net/wireless/eswin/wlan_ecr6600u_usb.ko
  Kernel: arch/riscv/boot/Image.gz is ready
$ mkdir -p ~/visionfive2/kernel
$ make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv INSTALL_PATH=~/visionfive2/kernel zinstall -j 8
sh ./arch/riscv/boot/install.sh 5.15.0-dirty \
arch/riscv/boot/Image.gz System.map "/home/opvolger/visionfive2/kernel"
Installing compressed kernel

The kernel is Done! Now copy it to the boot partition!

BOOT/ROOT Copy kernel

We have the SD-card inserted (again).

$ mkdir -p ~/visionfive2/boot
$ mkdir -p ~/visionfive2/root
# mount boot and root partition
$ sudo mount /dev/mmcblk0p2 ~/visionfive2/boot
$ sudo mount /dev/mmcblk0p3 ~/visionfive2/root
# copy the kernel
$ sudo cp ~/visionfive2/kernel/*dirty ~/visionfive2/boot/boot

BOOT/ROOT Add the boot option

$ sudo nano ~/visionfive2/boot/boot/extlinux/extlinux.conf

We have to change the kernel from /boot/vmlinuz-5.15.0-starfive to /boot/vmlinuz-5.15.0-dirty

## /boot/extlinux/extlinux.conf
##
## IMPORTANT WARNING
##
## The configuration of this file is generated automatically.
## Do not edit this file manually, use: u-boot-update

default l0
menu title U-Boot menu
prompt 0
timeout 50


label l0
        menu label Debian GNU/Linux bookworm/sid 5.15.0-starfive
        linux /boot/vmlinuz-5.15.0-starfive
        initrd /boot/initrd.img-5.15.0-starfive
        fdtdir /boot/dtbs/
        append  root=/dev/mmcblk1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0

label l0r
        menu label Debian GNU/Linux bookworm/sid 5.15.0-starfive (rescue target)
        linux /boot/vmlinuz-5.15.0-starfive
        initrd /boot/initrd.img-5.15.0-starfive
        fdtdir /boot/dtbs/
        append  root=/dev/mmcblk1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0 single

to

## /boot/extlinux/extlinux.conf
##
## IMPORTANT WARNING
##
## The configuration of this file is generated automatically.
## Do not edit this file manually, use: u-boot-update

default l0
menu title U-Boot menu
prompt 0
timeout 50


label l0
        menu label Fedora GNU/Linux bookworm/sid 5.15.0-dirty
        linux /boot/vmlinuz-5.15.0-dirty
        initrd /boot/initrd.img-5.15.0-starfive
        fdtdir /boot/dtbs/
        append  root=/dev/mmcblk1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0

label l0r
        menu label Debian GNU/Linux bookworm/sid 5.15.0-starfive (rescue target)
        linux /boot/vmlinuz-5.15.0-starfive
        initrd /boot/initrd.img-5.15.0-starfive
        fdtdir /boot/dtbs/
        append  root=/dev/mmcblk1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0 single

BOOT/ROOT Fix the fstab of the root partition

We have to change the /boot mount point. The UUID and type are different. We have to findout the new UUID and change the type from ext4 to vfat. (Debian image works with vfat!)

$ blkid /dev/mmcblk0p2
/dev/mmcblk0p2: SEC_TYPE="msdos" UUID="9936-8B5F" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="9ba5bebd-7dd9-4a43-b352-3b197302ead9"

$ sudo nano ~/visionfive2/root/etc/fstab

change

UUID=d9334329-e2ad-4b72-8f5f-b61406e9d461  / ext4    defaults,noatime,x-systemd.device-timeout=300s,x-systemd.mount-timeout=300s 0 0
UUID=53e7246e-90c3-42c4-b447-3ebc9fe1fdfc  /boot ext4    defaults,noatime,x-systemd.device-timeout=300s,x-systemd.mount-timeout=300s 0 0

to

UUID=d9334329-e2ad-4b72-8f5f-b61406e9d461  / ext4    defaults,noatime,x-systemd.device-timeout=300s,x-systemd.mount-timeout=300s 0 0
UUID=9936-8B5F  /boot vfat    defaults,noatime,x-systemd.device-timeout=30s,x-systemd.mount-timeout=30s 0 0

BOOT/ROOT Yum repo’s

There is no real release yet of RISC-V of Fedora (mainline). So we need to disable alot of repo’s

$ sudo nano ~/visionfive2/root/etc/yum.repos.d/fedora-cisco-openh264.repo 
$ sudo nano ~/visionfive2/root/etc/yum.repos.d/fedora-modular.repo 
$ sudo nano ~/visionfive2/root/etc/yum.repos.d/fedora-riscv.repo 
$ sudo nano ~/visionfive2/root/etc/yum.repos.d/fedora-updates-modular.repo 
$ sudo nano ~/visionfive2/root/etc/yum.repos.d/fedora-updates.repo 
$ sudo nano ~/visionfive2/root/etc/yum.repos.d/fedora-updates-testing-modular.repo 
$ sudo nano ~/visionfive2/root/etc/yum.repos.d/fedora-updates-testing.repo

and change

enabled=1

to

enabled=0

We only have to update one file

$ sudo nano ~/visionfive2/root/etc/yum.repos.d/fedora.repo
[fedora]
name=Fedora $releasever - $basearch
#baseurl=http://download.example/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
countme=1
metadata_expire=6h
...
...
...
...

to

[fedora]
name=Fedora $releasever - $basearch
baseurl=https://dl.fedoraproject.org/pub/alt/risc-v/repo/fedora/37/latest/riscv64/
#metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
countme=1
metadata_expire=6h
...
...
...
...
...

BOOT it up!

# umount the SD-card
$ sudo umount ~/visionfive2/root/
$ sudo umount ~/visionfive2/boot/

Put the SD-card into the VisionFive 2 and turn it on! We have to wait for dev-zram0.device …

Now we connect to the VisionFive 2 (ip will be different)

$ ssh riscv@192.168.2.20
The authenticity of host '192.168.2.20 (192.168.2.20)' can't be established.
ED25519 key fingerprint is SHA256:cqqk6Zm4/oC0tSwrC4JtT29MPpOC7Ye9yAuxQMklugM.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.20' (ED25519) to the list of known hosts.
riscv@192.168.2.20's password: 

Now first remove zram!

[riscv@fedora-riscv ~]$ sudo yum remove zram-generator-defaults

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for riscv:
Dependencies resolved.
===============================================================================================================
 Package                           Architecture      Version                  Repository                  Size
===============================================================================================================
Removing:
 zram-generator-defaults           noarch            1.1.2-2.fc37             @koji-override-0           320  
Removing unused dependencies:
 zram-generator                    riscv64           1.1.2-2.fc37             @koji-override-0           728 k

Transaction Summary
===============================================================================================================
Remove  2 Packages

Freed space: 728 k
Is this ok [y/N]: y
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                       1/1 
  Erasing          : zram-generator-defaults-1.1.2-2.fc37.noarch                                           1/2 
  Erasing          : zram-generator-1.1.2-2.fc37.riscv64                                                   2/2 
  Running scriptlet: zram-generator-1.1.2-2.fc37.riscv64                                                   2/2 
  Verifying        : zram-generator-1.1.2-2.fc37.riscv64                                                   1/2 
  Verifying        : zram-generator-defaults-1.1.2-2.fc37.noarch                                           2/2 

Removed:
  zram-generator-1.1.2-2.fc37.riscv64                zram-generator-defaults-1.1.2-2.fc37.noarch               

Complete!

Update

$ sudo dnf update --exclude=kernel-* --exclude=uboot-* --exclude=opensbi-*
$ sudo dnf install firefox @gnome-desktop --skip-broken # pptp is not yet there

Compile Quake2

# clean yum clean all
[riscv@fedora-riscv ~]$ sudo yum clean all
0 files removed
# install packages needed for compiling (Y)Quake2
# GPG is not working, so no check on it (this will take a while)
[riscv@fedora-riscv ~]$ sudo yum install SDL2-devel openal-soft-devel libcurl-devel --nogpgcheck 
Fedora 37 - riscv64                                     71% [======================================-               ] 1.3 MB/s |  40 MB     00:12 ETA
...
...
...
  Verifying        : openal-soft-devel-1.22.2-2.fc37.riscv64                                                                                   10/10 

Installed:
  SDL2-2.24.0-1.fc37.riscv64                       SDL2-devel-2.24.0-1.fc37.riscv64                    libcurl-devel-7.85.0-2.fc37.riscv64           
  libdecor-0.1.0-3.fc37.riscv64                    libglvnd-core-devel-1:1.5.0-1.fc37.riscv64          libglvnd-devel-1:1.5.0-1.fc37.riscv64         
  libmysofa-1.2.1-3.fc37.riscv64                   mesa-libEGL-devel-22.2.2-1.fc37.riscv64             openal-soft-1.22.2-2.fc37.riscv64             
  openal-soft-devel-1.22.2-2.fc37.riscv64         

Complete!

Now clone Quake2 and build it!

[riscv@fedora-riscv ~]$ git clone https://github.com/yquake2/yquake2.git
Cloning into 'yquake2'...
remote: Enumerating objects: 27461, done.
remote: Counting objects: 100% (452/452), done.
remote: Compressing objects: 100% (203/203), done.
remote: Total 27461 (delta 278), reused 386 (delta 248), pack-reused 27009
Receiving objects: 100% (27461/27461), 24.93 MiB | 8.24 MiB/s, done.
Resolving deltas: 100% (19048/19048), done.
[riscv@fedora-riscv ~]$ cd yquake2
[riscv@fedora-riscv yquake2]$ make
Build configuration
============================
YQ2_ARCH = riscv64 COMPILER = gcc
WITH_CURL = yes
WITH_OPENAL = yes
WITH_RPATH = yes
WITH_SYSTEMWIDE = no
WITH_SYSTEMDIR = 
============================

===> Building quake2
make release/quake2
make[1]: Entering directory '/home/riscv/yquake2'
===> CC src/backends/generic/misc.c
===> CC src/client/cl_cin.c
===> CC src/client/cl_console.c
...
...
...
...
...
===> CC src/client/refresh/files/pvs.c
===> CC src/common/shared/shared.c
===> CC src/common/md4.c
===> CC src/backends/unix/shared/hunk.c
===> LD release/ref_soft.so
make[1]: Leaving directory '/home/riscv/yquake2'
[riscv@fedora-riscv ~]$ cd
[riscv@fedora-riscv ~]$ mkdir -p ~/.yq2/baseq2
# if you own Quake2 copy the content of your baseq2 folder to ~/.yq2/baseq2
# if not.. get the demo version of pak0.pak and other files from here:
[riscv@fedora-riscv ~]$ git clone https://github.com/drags/docker-quake2.git
Cloning into 'docker-quake2'...
remote: Enumerating objects: 1190, done.
remote: Total 1190 (delta 0), reused 0 (delta 0), pack-reused 1190
Receiving objects: 100% (1190/1190), 70.91 MiB | 8.56 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Updating files: 100% (1191/1191), done.
[riscv@fedora-riscv ~]$ cp -R docker-quake2/baseq2/* ~/.yq2/baseq2/
# we have do not need x86 :)
[riscv@fedora-riscv ~]$ rm ~/.yq2/baseq2/gamex86_64.so
# create maps.lst
[riscv@fedora-riscv ~]$ cat <<EOT >> ~/.yq2/baseq2/maps.lst
q2dm1 "The Edge" \
q2dm2 "Tokay's Towers" \
q2dm3 "The Frag Pipe" \
q2dm4 "Lost Hallways" \
q2dm5 "The Pits" \
q2dm6 "Lava Tomb" \
q2dm7 "The Slimy Place" \
q2dm8 "WareHouse"
EOT

Done!

Play Quake2

Login X11 and start ~/yquake2/release/quake2

img

Here you can see the YouTube Demo:

YouTube Demo