OrangePi R2S is a great new RISC-V OpenWrt device

Not familiar with the device, but it seems to have a 16MB NOR chip where the U-Boot should reside. If they make proper use of U-Boot features you should be able to modify the boot order by setting a U-Boot environment variable. Unfortunately most OEMs don’t understand how to make proper use of the U-Boot environment variables, so there is a very slim chance that it is actually supported.

1 Like

There is a (Kernel 6.18) Risc-V UEFI Image available at Armbian - unfortunately, it does not boot all the way with RV2, but the UEFI seems to work :slight_smile: You could probably extract the UEFI part:

@Pulver
If you want the original source, just go straight to the actual source of the work.

@RaylynnKnight
You’re right. I couldn’t change the boot order either, because what we have is poorly implemented and obfuscated.

@johnkarazou
Is it really possible to flash the image directly to the RV2’s NVMe from a Linux PC after booting OpenWrt from NVMe (It’s possible that for the R2S a similar command could be used, adapted to its integrated MMC storage, but I can’t test it to confirm):
For RV2:

pv openwrt.img | ssh root@[device_address]'dd of=/dev/nvme0n1 bs=4M conv=fsync && reboot'

Ah - just happened to see the armbian image and tried it on my RV2, thanks for the link.

31 January & 1 February 2026

2 Likes

Hello,

Your current fork cannot work on an EXT4 file system, the system detects inconsistency in data structures and becomes read-only to protect itself, it can only work on squashfs.

The Ethernet driver is not well implemented, packets larger than 1464 bytes are ignored, it has not been possible for me to use your fork as a PPPoE router.

Hello Manelio,

I haven't run into these issues. Can you give some more information? Did you follow the instructions as written and what method did you use to flash it?

For PPPoE, does your provider require VLAN? If yes, you must edit the interfaces via terminal.

I'm currently using MTU 1506 as my provider requires this, no packet loss detected!
Try changing the ethernet cable maybe?

As for flashing remotely from another Linux machine, I'm not sure as I haven't tried it. What I do is test with SD cards and flash directly from my PC to the NVMe before attaching it to the RV2.

Thanks!

(Also I've created a telegram group if anyone wants to join and do some work on this! https://t.me/OrangePiRV2)

I have tried both flashing to SD and NVMe, it works, but if you try to modify something through ssh it remains in RO, you can modify it if you deactivate RO with mount -o remount,rw / but after a while it becomes RO again. The flashing method is not relevant, I flashed it anyway, it flashes well, that is not a problem.

The problem of packet length is general but where it is most noticeable is in TLS transfers that have a larger size, some WEBS like this one cannot be loaded by any device connected to this PPPoE router, Android devices are not even able to obtain the time even though I have the time server well configured.

My provider is configured with mtu 1492 vlan 20, This is my WAN interface:

config interface 'wan'
option device 'eth0.20'
option proto 'pppoe'
option username 'xxxxxxxxx@yyyy'
option password 'zzzzzzzz'
option ipv6 'auto'
option keepalive '0 1'
option mtu '1492'

(At the time, I sent you a private message in case you want to contact me by email, since I don't see instant messaging as viable, in my case.)

Hello guys,
I impulse bought this board (the R2S, not the RV2) a while ago for the price and Ethernet ports, but it took me a while to get to work on it.

First of all, to flash the internal eMMC you don't really need Windows or KyDevTool at all!
You only need some files from the KyDevTool ZIP and Android's fastboot, as I explain in this other post.

Then, I need to preface this by saying that I'm no OpenWRT nor Linux kernel developer.
I took OrangePi's custom OpenWRT tree and merged it with the official tree, adapting the patches as needed up to version 24.10.5.
I haven't tested my build yet, but it boots and that's something; I'll surely upload my tree to GitHub when I'm done testing.

Have a nice day!

2 Likes

Hi @xiaobo,
how did you fix the vq0/vq1 load average issue in the firmware image you provided?
Commenting the DTS definition for &rcpu seems to not be enough.

I seem to understand that it's related to ARM SCMI (which is some sort of ACPI equivalent) and I see various dmesg logs for rcpu/rproc, but it's not obvious to me how it works.

I am simply disabling devices in the power domain and suspect that communication issues between the power control i2c and the power management chip are causing the load to increase. The side effect is that the operating system cannot automatically complete the reboot, and can only disconnect and then turn on the power to complete the reboot.

1 Like

Thanks for the information, but I don't think that's the best approach: the 2.0 load average is only showing "apparent load" since those two kernel threads are not actually consuming any CPU time.
I think it's better to have a wrong but harmless load average figure than mess up the reboot functionality (and who knows what else).
I am trying to investigate the cause within the source code, it's probably a misbehaving driver.


Edit:
I believe to have fixed it by simply replacing wait_for_completion_timeout with its interruptible variant in function __process_theread of drivers/remoteproc/x1-rproc.c.
After rebuilding and flashing I have ~0 load average at idle, vq0/vq1 are in SW state.

Hi everybody,
I have uploaded my source tree, you can find it here.

It starts from orangepi-xunlong/openwrt branch openwrt-24.10 (the one with RV2/R2S support), merges with upstream OpenWRT up to v24.10.5 (kernel v6.6.119) while adjusting and slimming down vendor patches (removes most patched-in drivers) and fixing the load average issue.

The opir2s_defconfig I use is very barebones, so I don't think it's useful to publish a prebuilt image here as any additional package would still need to be built from source anyway.

I will have a look at porting the patches to OpenWRT v25.12 (kernel v6.12) when it's released, but I can't guarantee anything.

I hope somebody finds this useful, at least until we can run mainline Linux on this board!

2 Likes

Hello LaXiS96,

I imagine that with the basic configuration this error wouldn't occur (I haven't tested it), but with a more complete configuration I got this error and I'm sharing it in case it's helpful: (I don't think it's an unsolvable error)

make[5]: Entering directory '/home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s/build_dir/target-riscv64_riscv64_musl/linux-ky_riscv64/linux-6.6.119'
CC drivers/gpu/drm/ky/ky_planes.o
drivers/gpu/drm/ky/ky_planes.c: In function 'ky_drm_plane_create_color_properties':
drivers/gpu/drm/ky/ky_planes.c:592:16: error: ISO C90 forbids variable length array 'enum_list' [-Werror=vla]
592 | struct drm_prop_enum_list enum_list[max_t(int, DRM_COLOR_ENCODING_MAX,
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[11]: *** [scripts/Makefile.build:243: drivers/gpu/drm/ky/ky_planes.o] Error 1
make[10]: *** [scripts/Makefile.build:480: drivers/gpu/drm/ky] Error 2
make[9]: *** [scripts/Makefile.build:480: drivers/gpu/drm] Error 2
make[8]: *** [scripts/Makefile.build:480: drivers/gpu] Error 2
make[7]: *** [scripts/Makefile.build:480: drivers] Error 2
make[6]: *** [/home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s/build_dir/target-riscv64_riscv64_musl/linux-ky_riscv64/linux-6.6.119/Makefile:1924: .] Error 2
make[5]: *** [Makefile:234: __sub-make] Error 2
make[5]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s/build_dir/target-riscv64_riscv64_musl/linux-ky_riscv64/linux-6.6.119'
make[4]: *** [Makefile:43: /home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s/build_dir/target-riscv64_riscv64_musl/linux-ky_riscv64/linux-6.6.119/.modules] Error 2
make[4]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s/target/linux/ky'
make[3]: *** [Makefile:12: compile] Error 2
make[3]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s/target/linux'
time: target/linux/compile#1.27#0.59#1.81
ERROR: target/linux failed to build.
make[2]: *** [target/Makefile:32: target/linux/compile] Error 1
make[2]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s'
make[1]: *** [target/Makefile:25: /home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s/staging_dir/target-riscv64_riscv64_musl/stamp/.target_compile] Error 2
make[1]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s'
make: *** [/home/asubuntu/OW/OPRV2-LaXiS96/openwrt-orangepi-r2s/include/toplevel.mk:233: world] Error 2

That error can be ignored by setting these in make menuconfig or adding them to your defconfig:

CONFIG_DEVEL=y
CONFIG_KERNEL_CFLAGS="-Wno-vla"

They are already included in opir2s_defconfig but not in opirv2_defconfig (I haven't really tested the RV2 build since I only have the R2S).

Confirmed, that was the only thing I'd omitted from your initial config, and adding it compiles it. But I'll start with your config to generate a new, more complete one and see how far it goes. I'll test it carefully.

Thanks

1 Like

Hello LaXiS96,
With my config, which came from compiling the image generated with the repository of johnkarazou, I managed to compile simply by adding to the config:

CONFIG_DEVEL=y
CONFIG_KERNEL_CFLAGS="-Wno-vla"
But check your repository's config because without adding anything, if you do the usual:
git clone ``https://github.com/LaXiS96/openwrt-orangepi-r2s.git
cd openwrt-orangepi-r2s
./scripts/feeds update -a
./scripts/feeds install -a
in menuconfig, select ky, rv2
the result is:
drivers/gpu/drm/ky/ky_planes.c: In function 'ky_drm_plane_create_color_properties':
drivers/gpu/drm/ky/ky_planes.c:592:16: error: ISO C90 forbids variable length array 'enum_list' [-Werror=vla]
592 | struct drm_prop_enum_list enum_list[max_t(int, DRM_COLOR_ENCODING_MAX,
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[11]: *** [scripts/Makefile.build:243: drivers/gpu/drm/ky/ky_planes.o] Error 1
make[10]: *** [scripts/Makefile.build:480: drivers/gpu/drm/ky] Error 2
make[9]: *** [scripts/Makefile.build:480: drivers/gpu/drm] Error 2
make[8]: *** [scripts/Makefile.build:480: drivers/gpu] Error 2
make[7]: *** [scripts/Makefile.build:480: drivers] Error 2
make[6]: *** [/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/build_dir/target-riscv64_riscv64_musl/linux-ky_riscv64/linux-6.6.119/Makefile:1924: .] Error 2
make[5]: *** [Makefile:234: __sub-make] Error 2
make[5]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/build_dir/target-riscv64_riscv64_musl/linux-ky_riscv64/linux-6.6.119'
make[4]: *** [Makefile:43: /home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/build_dir/target-riscv64_riscv64_musl/linux-ky_riscv64/linux-6.6.119/.modules] Error 2
make[4]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/target/linux/ky'
make[3]: *** [Makefile:12: compile] Error 2
make[3]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/target/linux'
time: target/linux/compile#829.38#103.21#938.09
ERROR: target/linux failed to build.
make[2]: *** [target/Makefile:32: target/linux/compile] Error 1
make[2]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s'
make[1]: *** [target/Makefile:25: /home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/staging_dir/target-riscv64_riscv64_musl/stamp/.target_compile] Error 2
make[1]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s'
make: *** [/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/include/toplevel.mk:233: world] Error 2

and if you add the following to the config:
CONFIG_DEVEL=y
CONFIG_KERNEL_CFLAGS="-Wno-vla"
the result is:
error: ext4_allocate_best_fit_partial: failed to allocate 2949 blocks, out of space?
make[5]: *** [Makefile:66: /home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/build_dir/target-riscv64_riscv64_musl/linux-ky_riscv64/tmp/openwrt-ky-riscv64-x1_orangepi-rv2-squashfs-sysupgrade.img.gz] Error 1
make[5]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/target/linux/ky/image'
make[4]: *** [Makefile:42: install] Error 2
make[4]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/target/linux/ky'
make[3]: *** [Makefile:12: install] Error 2
make[3]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/target/linux'
time: target/linux/install#13.53#4.47#14.05
ERROR: target/linux failed to build.
make[2]: *** [target/Makefile:32: target/linux/install] Error 1
make[2]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s'
make[1]: *** [target/Makefile:26: /home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/staging_dir/target-riscv64_riscv64_musl/stamp/.target_install] Error 2
make[1]: Leaving directory '/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s'
make: *** [/home/asubuntu/OW/OPRV2-LaXiS96-cfg-original/openwrt-orangepi-r2s/include/toplevel.mk:233: world] Error 2

Hello! I need a photo from the R2S board, can you send one to me? Does not need to be good, 1024 pixels width is fine, but with permission to publish on github / Armbian.com website.

Background: I just completed a pull request to Armbian.com for the Orange Pi RV2, see [1]. Kernel 6.6 and 6.19. While working on that board, I added files for the R2S sister board (e.g. add *.dts and r8125 eth). The pull request robo now want photos for publishing on the Armbian website and I hesitate to reproduce material grabbed from the web. I can throw away the R2V stuff b/c I do not need it - or add that photo.

Also (while optional and if one person here is interested) I just generated an R2S image, that can be downloaded[2] and installed. I am interested in feedback (runs or runs not, all Eth working?).

Ah - and while I am here: the Orange Pi RV2 (as you probably know) has two M.2 slots (m-key). I have an adapter for e/a-key, making the board a tri band router. Here is a photo (taken from the respective Armbian forum thread[3]).

LG && TIA // Sven-Ola

[1] https://github.com/armbian/build/pull/9299
[2] https://privat-in.de/ (navigate to downloads)
[3] https://forum.armbian.com/topic/56846-orange-pi-rv2/

1 Like

Thanks to Github member https://github.com/peterwillcn I got a decent photo from the R2S, posted as attachment to the respective Armbian PR (the one mentioned above). Many thanks Peter!