This commit is contained in:
Bas Magré 2024-02-10 17:08:07 +01:00
parent c5daf1dd85
commit bfef57b04b
3 changed files with 433 additions and 25 deletions

View file

@ -183,7 +183,7 @@ I have installed Fedora linux and had to install some stuff to be able to cross
```bash
$ sudo dnf group install "Development Tools"
$ sudo dnf install git gcc-plugin-devel libmpc-devel gcc-c++ gcc-c++-riscv64-linux-gnu ncurses-devel libmpc-devel
$ sudo dnf install git gcc-plugin-devel libmpc-devel gcc-c++ gcc-c++-riscv64-linux-gnu ncurses-devel libmpc-devel nano
```
We need to checkout the kernel of StarFive and make some changes
@ -382,6 +382,7 @@ Compile the kernel, config is now ready!
I added -j 16 (i have 16 thread on my machine!)
```bash
# build kernel
$ make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j 16
SYNC include/config/auto.conf
WRAP arch/riscv/include/generated/uapi/asm/errno.h
@ -395,10 +396,47 @@ $ make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j 16
# takes a long time!!!
...
...
NM .tmp_vmlinux.kallsyms2.syms
KSYMS .tmp_vmlinux.kallsyms2.S
AS .tmp_vmlinux.kallsyms2.S
LD vmlinux
NM System.map
SORTTAB vmlinux
OBJCOPY arch/riscv/boot/Image
GZIP arch/riscv/boot/Image.gz
Kernel: arch/riscv/boot/Image.gz is ready
# build kernel modules
$ make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- modules -j 16
CALL scripts/checksyscalls.sh
# install modules to dir
$ mkdir ~/OpenSuseTumbleweed/modules
$ make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- INSTALL_MOD_PATH=~/OpenSuseTumbleweed/modules modules_install -j 16
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/arch/riscv/kvm/kvm.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/crypto/authenc.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/crypto/authencesn.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/crypto/blake2b_generic.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/crypto/cbc.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/crypto/echainiv.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/crypto/seqiv.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/crypto/xor.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/crypto/xxhash_generic.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/drivers/clk/starfive/clk-starfive-jh7100-audio.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/drivers/gpu/drm/drm_shmem_helper.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/drivers/gpu/drm/virtio/virtio-gpu.ko
...
...
...
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/net/netfilter/xt_nat.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/net/sched/cls_cgroup.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/net/xfrm/xfrm_algo.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/net/xfrm/xfrm_user.ko
INSTALL /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+/kernel/net/netfilter/xt_tcpudp.ko
DEPMOD /home/opvolger/OpenSuseTumbleweed/modules/lib/modules/6.1.31+
```
The kernel is Done! Now copy it to the boot partition on the SD-card!
The kernel is Done!
### EFI-boot from Ubuntu (cd-boot-images-riscv64_10_all.deb)
@ -415,8 +453,20 @@ $ wget http://mirrors.kernel.org/ubuntu/pool/main/c/cd-boot-images-riscv64/cd-bo
$ sudo yum install dpkg
# unpack the file
$ dpkg-deb -x cd-boot-images-riscv64_10_all.deb cd-boot-images-riscv64_10_all
# on my computer i flashed the OpenSuse Tumbleweed to /dev/sdb We need to copy bootriscv64.efi to the EFI-partition
```
## Copy/Change files to SD-card
On my computer i flashed the OpenSuse Tumbleweed to /dev/sdb
### EFI-partition
We need to copy bootriscv64.efi to the EFI-partition
```bash
$ cd ~/OpenSuseTumbleweed
$ mkdir -p sd/efi
# EFI partition is the first partition
$ sudo mount /dev/sdb1 ~/OpenSuseTumbleweed/sd/efi
# We will now replace the efi boot from OpenSuse Tumbleweed with the Ubuntu version
$ sudo cp cd-boot-images-riscv64_10_all/usr/share/cd-boot-images-riscv64/tree/EFI/boot/bootriscv64.efi sd/efi/EFI/BOOT/bootriscv64.efi
@ -424,56 +474,414 @@ $ sudo cp cd-boot-images-riscv64_10_all/usr/share/cd-boot-images-riscv64/tree/EF
$ sudo umount ~/OpenSuseTumbleweed/sd/efi
```
cp vmlinuz-6.1.31+ System and dtb + libs
### ROOT-partition
We need to copy the kernel files
```bash
sudo cp /home/opvolger/Downloads/SF2_2023_11_20/opensuse2/dtb-6.1.31+ /run/media/opvolger/ROOT/boot/
sudo cp /home/opvolger/Downloads/SF2_2023_11_20/opensuse2/vmlinuz-6.1.31+ /run/media/opvolger/ROOT/boot/
sudo cp /home/opvolger/Downloads/SF2_2023_11_20/opensuse2/System.map-6.1.31+ /run/media/opvolger/ROOT/boot/
sudo cp /home/opvolger/Downloads/SF2_2023_11_20/opensuse2/initrd.img-6.1.31+ /run/media/opvolger/ROOT/boot/
sudo cp /home/opvolger/Downloads/SF2_2023_11_20/opensuse2/initrd/usr/lib/modules/6.1.31+/ /run/media/opvolger/ROOT/usr/lib/modules -R
$ cd ~/OpenSuseTumbleweed
$ mkdir -p sd/root
# ROOT partition is the 3e partition
$ sudo mount /dev/sdb3 ~/OpenSuseTumbleweed/sd/root
# copy kernel files
$ sudo cp linux/arch/riscv/boot/dts/starfive/jh7110-visionfive-v2.dtb ~/OpenSuseTumbleweed/sd/root/boot/dtb-6.1.31+
$ sudo cp linux/arch/riscv/boot/Image ~/OpenSuseTumbleweed/sd/root/boot/Image-6.1.31+
$ sudo cp linux/System.map ~/OpenSuseTumbleweed/sd/root/boot/System.map-6.1.31+
$ sudo cp modules/lib/modules/6.1.31+ ~/OpenSuseTumbleweed/sd/root/usr/lib/modules -R
```
edit grub2.cfg
#### Edit grub2.cfg
We need to edit the current grub2.cfg so we can boot the created kernel.
```bash
sudo nano /run/media/opvolger/ROOT/boot/grub2/grub.cfg
sudo nano ~/OpenSuseTumbleweed/sd/root/boot/grub2/grub.cfg
```
edit /etc/fstab
Scroll until tou see:
```bash
sudo nano /run/media/opvolger/ROOT/etc/fstab
```ini
### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE Tumbleweed' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c0fea55f-b955-491e-82fb-eef04b20619d' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root c0fea55f-b955-491e-82fb-eef04b20619d
echo 'Loading Linux 6.8.0-rc3-83-default ...'
linux /boot/Image-6.8.0-rc3-83-default root=UUID=c0fea55f-b955-491e-82fb-eef04b20619d loglevel=3 splash=silent systemd.show_status=1 console=ttyS0,115200n8
echo 'Loading initial ramdisk ...'
initrd /boot/initrd-6.8.0-rc3-83-default
}
submenu 'Advanced options for openSUSE Tumbleweed' --hotkey=1 $menuentry_id_option 'gnulinux-advanced-c0fea55f-b955-491e-82fb-eef04b20619d' {
menuentry 'openSUSE Tumbleweed, with Linux 6.8.0-rc3-83-default' --hotkey=2 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-rc3-83-default-advanced-c0fea55f>
```
Change it to: (I deleted the search line changes the linux line and replaced the initrd for devicetree)
```ini
### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE Tumbleweed' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c0fea55f-b955-491e-82fb-eef04b20619d' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
echo 'Loading Linux 6.1.31+ ...'
linux /boot/Image-6.1.31+ root=/dev/mmcblk1p3 ro efi=debug earlycon console=ttyS0,115200n8
echo 'Loading devicetree 6.1.31+'
devicetree /boot/dtb-6.1.31+
}
submenu 'Advanced options for openSUSE Tumbleweed' --hotkey=1 $menuentry_id_option 'gnulinux-advanced-c0fea55f-b955-491e-82fb-eef04b20619d' {
menuentry 'openSUSE Tumbleweed, with Linux 6.8.0-rc3-83-default' --hotkey=2 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-rc3-83-default-advanced-c0fea55f>
```
Save and Exit
#### Edit fstab
I needed this, i think the kernel has no vfat compiled.
```bash
sudo nano /run/media/opvolger/ROOT/etc/grub.d/40_custom
sudo nano ~/OpenSuseTumbleweed/sd/root/etc/fstab
```
from:
```ini
UUID=9a7b06a0-0385-44c1-8487-8881b55420ab swap swap defaults 0 0
UUID=c0fea55f-b955-491e-82fb-eef04b20619d / ext4 noatime,nobarrier 0 1
UUID=9035-7EB0 /boot/efi vfat defaults 0 0
```
to:
```ini
UUID=9a7b06a0-0385-44c1-8487-8881b55420ab swap swap defaults 0 0
UUID=c0fea55f-b955-491e-82fb-eef04b20619d / ext4 noatime,nobarrier 0 1
#UUID=9035-7EB0 /boot/efi vfat defaults 0 0
```
#### Add item in grub2 40_custom
We need to add a grub option, so as we rebuild grub (get a new grub2.cfg) we still can boot the custom kernel.
```bash
sudo nano ~/OpenSuseTumbleweed/sd/root/etc/grub.d/40_custom
```
```ini
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'openSUSE Tumbleweed, with Linux 6.1.31+' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 1a05dd52-4f43-495e-8de1-e6372d24d24d
echo 'Loading Linux 6.1.31+'
linux /boot/vmlinuz-6.1.31+ root=/dev/mmcblk1p3 ro efi=debug earlycon console=ttyS0,115200n8
linux /boot/Image-6.1.31+ root=/dev/mmcblk1p3 ro efi=debug earlycon console=ttyS0,115200n8
echo 'Loading devicetree 6.1.31+'
devicetree /boot/dtb-6.1.31+
}
```
Login root/linux
### Set default grub item on boot
Update Grub + install kde + codecs
De default boot option is item 0. We have added a new custom item we want to boot in the future as default.
```bash
useradd opvolger
passwd opvolger
grub2-mkconfig -o /boot/grub2/grub.cfg
zypper install -t pattern kde kde_plasma
zypper install opi neofetch chromium nano
opi codecs
$ sudo nano ~/OpenSuseTumbleweed/sd/root/etc/default/grub
```
from:
```ini
GRUB_DEFAULT=0
```
to
```ini
GRUB_DEFAULT=3
```
## Umount
```bash
# umount again
$ sudo umount ~/OpenSuseTumbleweed/sd/root
```
## GParted
The root-partition will not be resized. So we have to do this.
I use GParted, yes it can be done command-line but this is easyer.
![fix blocka](OpenSuseATIRadeonR9_290/fix_blocks.png)
![fix blocka](OpenSuseATIRadeonR9_290/resize.png)
and apply the changes!
## Boot the StarFive VisionFive 2
Insert the SD-card in the StarFive VisionFive 2 and boot it up.
```bash
Welcome to openSUSE Tumbleweed 20240208 - Kernel 6.1.31+ (ttyS0).
end0: fe80::4b03:cfeb:7489:a749
end1:
wlp1s0u1u1:
StarFive login: [ 20.805126] starfive-eth-plat 16040000.ethernet end1: Link is Up - 1Gbps/Full - flow control rx/tx
[ 20.814211] IPv6: ADDRCONF(NETDEV_CHANGE): end1: link becomes ready
Welcome to openSUSE Tumbleweed 20240208 - Kernel 6.1.31+ (ttyS0).
end0: fe80::4b03:cfeb:7489:a749
end1: 192.168.2.17 fe80::d24e:a2cc:d51b:b14b
wlp1s0u1u1:
StarFive login:
Welcome to openSUSE Tumbleweed 20240208 - Kernel 6.1.31+ (ttyS0).
end0:
end1: 192.168.2.17 fe80::d24e:a2cc:d51b:b14b
wlp1s0u1u1:
riscv login: [ 38.081393] mipi_0p9: disabling
```
You can now log in with username root and password linux
```bash
riscv login: root
Password:
Have a lot of fun...
```
Create user and fix boot
```bash
# create a user
$ useradd opvolger
# set password for user
$ passwd opvolger
New password:
Retype new password:
passwd: password updated successfully
# create a new grub.cfg
$ grub2-mkconfig -o /boot/grub2/grub.cfg
[ 219.384928] device-mapper: ioctl: 4.47.0-ioctl (2022-07-28) initialised: dm-devel@redhat.com
Generating grub configuration file ...
Found theme: /boot/grub2/themes/openSUSE/theme.txt
Found linux image: /boot/Image-6.8.0-rc3-83-default
Found initrd image: /boot/initrd-6.8.0-rc3-83-default
Found linux image: /boot/Image-6.1.31+
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
```
Fix Tumbleweed repo's
```bash
# disable updates repo (Tumbleweed has no updates)
$ zypper lr
Repository priorities are without effect. All enabled repositories share the same priority.
# | Alias | Name | Enabled | GPG Check | Refresh
--+--------------------------------------+-------+---------+-----------+--------
1 | Factory-Contrib-StarFive:VisionFive2 | Fac-> | Yes | ( p) Yes | Yes
2 | repo-debug | ope-> | No | ---- | ----
3 | repo-openh264 | Ope-> | Yes | ( p) Yes | Yes
4 | repo-oss | ope-> | Yes | ( p) Yes | Yes
5 | repo-source | ope-> | No | ---- | ----
6 | repo-update | ope-> | Yes | ( p) Yes | Yes
$ zypper mr -d 6
Repository 'repo-update' has been successfully disabled.
# update repo's
$ zypper update
New repository or package signing key received:
Repository: Factory-Contrib-StarFive:VisionFive2
Key Fingerprint: 1CE6 63CF D3C2 3AA6 4CB0 9374 F824 F2D3 FEC6 4695
Key Name: devel:RISCV OBS Project <devel:RISCV@build.opensuse.org>
Key Algorithm: RSA 2048
Key Created: Thu Apr 7 08:44:18 2022
Key Expires: Sat Jun 15 08:44:18 2024
Rpm Name: gpg-pubkey-fec64695-624ea462
Note: Signing data enables the recipient to verify that no modifications
occurred after the data were signed. Accepting data with no, wrong or
unknown signature can lead to a corrupted system and in extreme cases even
to a system compromise.
Note: A GPG pubkey is clearly identified by its fingerprint. Do not rely on
the key's name. If you are not sure whether the presented key is authentic,
ask the repository provider or check their web site. Many providers maintain
a web page showing the fingerprints of the GPG keys they are using.
Do you want to reject the key, trust temporarily, or trust always? [r/t/a/?] (r): a
Retrieving repository 'Factory-Contrib-StarFive:VisionFive2' metadata ....[done]
Building repository 'Factory-Contrib-StarFive:VisionFive2' cache .........[done]
Retrieving repository 'Open H.264 Codec (openSUSE Tumbleweed)' metadata ..[done]
Building repository 'Open H.264 Codec (openSUSE Tumbleweed)' cache .......[done]
Retrieving repository 'openSUSE-Tumbleweed-Oss' metadata .................[done]
Building repository 'openSUSE-Tumbleweed-Oss' cache ......................[done]
Loading repository data...
Reading installed packages...
Nothing to do.
```
Install stuff for KDE: browsers/codecs
```bash
# install some stuff
# obi can install codecs
# neofetch to show specs
# chromium a browser
# nano for editing
$ zypper install opi neofetch chromium nano
$ neofetch
...... root@riscv.home
.,cdxxxoc,. .:kKMMMNWMMMNk:. ---------------
cKMMN0OOOKWMMXo. A ;0MWk:' ':OMMk. OS: openSUSE Tumbleweed riscv64
;WMK;' 'lKMMNM, :NMK' 'OMW; Host: StarFive VisionFive V2
cMW; WMMMN ,XMK' oMM. Kernel: 6.1.31+
.MMc ''^*~l. xMN: KM0 Uptime: 8 mins
'MM. .NMO oMM Packages: 774 (rpm)
.MM, .kMMl xMN Shell: bash 5.2.26
KM0 .kMM0' .dl>~,. .WMd Resolution: 1920x1080
'XM0. ,OMMK' OMMM7' .XMK Terminal: /dev/ttyS0
*WMO:. .;xNMMk' NNNMKl. .xWMx CPU: (4) @ 1.500GHz
^ONMMNXMMMKx; V 'xNMWKkxllox0NMWk' GPU: AMD ATI Radeon R9 290/390
''''' ':dOOXXKOxl' Memory: 110MiB / 7868MiB
# install opi codecs (will give some errors, not everyting is there for riscv)
$ opi codecs
Do you want to install codecs from Packman repository? (Y/n) y
Adding packman repo
1. ftp.fau.de - University of Erlangen, Germany - 1h sync
2. ftp.halifax.rwth-aachen.de - University of Aachen, Germany - 1h sync
3. ftp.gwdg.de - University of Göttingen, Germany - 4h sync
4. mirror.karneval.cz - TES Media, Czech Republic - 1h sync
5. mirrors.aliyun.com - Alibaba Cloud, China - 24h sync
Pick a mirror near your location (0 to quit): 1
Import package signing key 'PackMan Project (signing key) <packman@links2linux.de>' (Y/n) Y
Repository 'Factory-Contrib-StarFive:VisionFive2' is up to date.
Retrieving repository 'Packman' metadata .................................[done]
Building repository 'Packman' cache ......................................[done]
Repository 'Open H.264 Codec (openSUSE Tumbleweed)' is up to date.
Repository 'openSUSE-Tumbleweed-Oss' is up to date.
All repositories have been refreshed.
Loading repository data...
Reading installed packages...
Computing distribution upgrade...
Nothing to do.
Loading repository data...
Reading installed packages...
'ffmpeg>=5' not found in package names. Trying capabilities.
Package 'gstreamer-plugins-bad-codecs' not found in specified repositories.
Package 'gstreamer-plugins-ugly-codecs' not found in specified repositories.
Package 'pipewire-aptx' not found in specified repositories.
Package 'vlc-codecs' not found in specified repositories.
'ffmpeg' not found in package names. Trying capabilities.
'libavcodec-full' not found in package names. Trying capabilities.
No provider of 'libavcodec-full' found.
'libfdk-aac2' not found in package names. Trying capabilities.
'libfdk-aac2' is already installed.
'gstreamer-plugins-libav' not found in package names. Trying capabilities.
Resolving package dependencies...
The following 42 NEW packages are going to be installed:
ffmpeg-6 gstreamer gstreamer-plugins-base gstreamer-plugins-libav
libSDL2-2_0-0 libSPIRV-Tools-2023_6_rc1 libXv1 libass9 libavdevice60
libavfilter9 libbs2b0 libcdda_interface0 libcdda_paranoia0 libcdio19
libcdio_cdda2 libcdio_paranoia2 libdc1394-26 libdovi3 libfftw3-3 libglslang14
libgraphene-1_0-0 libgstallocators-1_0-0 libgstapp-1_0-0 libgstaudio-1_0-0
libgstgl-1_0-0 libgstpbutils-1_0-0 libgstreamer-1_0-0 libgstriff-1_0-0
libgsttag-1_0-0 libgstvideo-1_0-0 liborc-0_4-0 libplacebo338 libpostproc57
librubberband2 libshaderc_shared1 libswscale7 libvidstab1_1 libvisual-0_4-0
libvmaf3 libwayland-cursor0 libwayland-egl1 libzimg2
42 new packages to install.
Overall download size: 13.7 MiB. Already cached: 0 B. After the operation,
additional 33.3 MiB will be used.
Continue? [y/n/v/...? shows all options] (y): y
...
...
...
...
161 new packages to install.
Overall download size: 32.8 MiB. Already cached: 0 B. After the operation,
additional 107.6 MiB will be used.
Continue? [y/n/v/...? shows all options] (y): y
...
...
...
...
(160/161) Installing: gstreamer-plugins-bad-1.22.9-1.1.riscv64 ...........[done]
(161/161) Installing: gstreamer-plugins-good-extra-1.22.9-1.1.riscv64 ....[done]
%posttrans(cantarell-fonts-0.303.1-1.2.noarch) script output:
Failed to connect to bus: No medium found
Failed to connect to bus: No medium found
Running post-transaction scripts .........................................[done]
Do you want to install openh264 codecs from openSUSE openh264 repository? (Y/n) y
Installing from existing repo 'Open H.264 Codec (openSUSE Tumbleweed)'
Loading repository data...
Reading installed packages...
Computing distribution upgrade...
Nothing to do.
Loading repository data...
Reading installed packages...
'libgstopenh264.so()(64bit)' not found in package names. Trying capabilities.
No provider of 'libgstopenh264.so()(64bit)' found.
'mozilla-openh264' not found in package names. Trying capabilities.
No provider of 'mozilla-openh264' found.
Resolving package dependencies...
Nothing to do.
```
Install the KDE desktop
```bash
# install KDE desktop
$ zypper install -t pattern kde kde_plasma
...
...
...
The following 19 NEW patterns are going to be installed:
fonts fonts_opt games kde kde_games kde_internet kde_multimedia kde_office
kde_pim kde_plasma kde_utilities kde_utilities_opt kde_yast multimedia office
x11 x11_enhanced x11_yast yast2_desktop
1128 new packages to install.
Overall download size: 926.3 MiB. Already cached: 0 B. After the operation,
additional 2.4 GiB will be used.
Continue? [y/n/v/...? shows all options] (y): y
...
...
...
# reboot, sometimes it hangs! then hard reset the board!
$ reboot
```
Done! You will now have OpenSuse on RISC-V
![screenshot of OpenSuse on RISC-V](OpenSuseATIRadeonR9_290/screenshot.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB