OrangePi R2S is a great new RISC-V OpenWrt device

Couple notes here:

  • the kernels in the SDK provided by the SoC or board manufacturer don't necessarily match up with what we have in OpenWrt - many SDKs are still built on 5.10 or even earlier kernels which is a no-go for trunk.

  • board manufacturers are free to do what they want in their trees, while getting a board or SoC supported in OpenWrt is a) more strict, b) the additional packages need to build for other targets as well, c) there is not much appetite in a GPU accelerator or a murky camera driver in mainline OpenWrt, as this is a router platform. Dumping (trying to dump) a DTS from an SDK into trunk and pulling in an SDK source in full won't work for mainline.

  • board manufacturers time after time say "XYZ board/router supports OpenWrt", which causes users to turn to us for support, while supporting a board that has an ancient kernel running ancient OpenWrt (not the case for the R2S of course) is out of our remits.

  • also, just lightly touching on the fact that most of the OpenWrt developers are not paid for their community efforts - which in turn means a longer timeframe (if there is interest at all) for getting hardware support upstream.

As always, we're happy to help and/or guide vendors to integrate their stuff into mainline, but that's a longer process and it's too late to start "when the device is released to the public".

5 Likes

Why the 3rd link says it's RK3399??? Shouldn't it be micro Ky X1?

1 Like

What I find compelling about this RV2 board is not its compute but its dual GigE and relatively easy potential for dual radios, combined with ample RAM. I'm interested in finding a somewhat compact mobile router that I can stick between sketchy (hotel/cafe/…) WiFi and my device(s), that can also run Pi-Hole in a container. It's nice that this board is also not super expensive.

1 Like

Too bad this does not have removable bootable storage (SDCARD), nor integrated usb-serial debug port. @xiaobo Is the bootloader code also open ?

I just realized there's this:

And I see built images for the RV2 here.

Is the bootloader code also open?

riscv64 bootloader

I'm not an expert at this but it looks like getting these supported is quite possible. I have a OrangePI rv2 myself which is basically the exact same board as the r2s but instead of the extra 2x 2.5g ports it has 2x pcie 2.0 x2 lane M.2 b/m key slots and and sdcard slot.

It was actually pretty easy to compile a new kernel and have it work with the ubuntu image. A 6.15.x kernel was easy to get up and running without too much trouble just using trees from https://github.com/jmontleon/linux-bianbu/branches it's ironic that 6.12 isn't there but I assume it wouldn't be impossible for it to work. I'm not sure about u-boot.

One of the good things about these boards compared to the Visionfive2 is you can make multiple vlan interfaces off the 1 gig ports. I dunno, I think I would still prefer the version without the extra ethernets, unless I had 2.5g internet or something. Though who knows, maybe they are strong enough to run a nas off or something but I assume you'd start paying a little bit more for that. The 1 gig ports don't seem to support setting the MTU even 1 byte above 1500 though and there may be a benefit from using jumbo mtus with these cpus though the bottleneck I see below may be from something else.

The thing with the onboard ports as well is in my opinion it's better to have intel nic igc i22x ports vs the realtek ones, but I don't think this board supports MSI / MSI-x properly so the advantage you get from using the intel nics just doing that by default isn't there anyway.

eg..

[   20.037366] e1000e 0001:01:00.0 enP1p1s0: MSI interrupt test failed, using legacy interrupt.

random stuff:

[    0.216835] raid6: int64x8  gen()  1502 MB/s
[    0.284843] raid6: int64x4  gen()  1521 MB/s
[    0.352905] raid6: int64x2  gen()  1489 MB/s
[    0.420956] raid6: int64x1  gen()  1242 MB/s
[    0.420965] raid6: using algorithm int64x4 gen() 1521 MB/s
[    0.488997] raid6: .... xor() 958 MB/s, rmw enabled
[    0.489006] raid6: using intx1 recovery algorithm


[    4.271869] xor: measuring software checksum speed
[    4.272579]    8regs           :  4734 MB/sec
[    4.273299]    32regs          :  4610 MB/sec
[    4.273890]    rvv             :  5610 MB/sec
[    4.273895] xor: using function: rvv (5610 MB/sec)
[    4.273924] async_tx: api initialized (async)

openssl speed aes-128-cbc
version: 3.0.13
built on: Wed Feb  5 13:17:43 2025 UTC
options: bn(64,64)
compiler: gcc -fPIC -pthread -Wa,--noexecstack -Wall -fzero-call-used-regs=used-gpr -DOPENSSL_TLS_SECURITY_LEVEL=2 -g -O2 -fno-omit-frame-pointer -ffile-prefix-map=/build/openssl-LFaoFq/openssl-3.0.13=. -fstack-protector-strong -Wformat -Werror=format-security -fno-stack-clash-protection -fdebug-prefix-map=/build/openssl-LFaoFq/openssl-3.0.13=/usr/src/openssl-3.0.13-0ubuntu3.5 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=3
CPUINFO: N/A
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-128-cbc      24698.00k    31572.78k    33883.31k    34524.16k    34712.23k    34690.39k

old e1000e pci-e board with mtu 8500:
iperf3 -c 192.168.10.237 --bidir
Connecting to host 192.168.10.237, port 5201
[  5] local 192.168.10.177 port 33870 connected to 192.168.10.237 port 5201
[  7] local 192.168.10.177 port 33872 connected to 192.168.10.237 port 5201
[ ID][Role] Interval           Transfer     Bitrate         Retr  Cwnd
[  5][TX-C]   0.00-1.00   sec   119 MBytes   997 Mbits/sec    0    478 KBytes       
[  7][RX-C]   0.00-1.00   sec   111 MBytes   932 Mbits/sec                  
[  5][TX-C]   1.00-2.00   sec   115 MBytes   966 Mbits/sec    0    478 KBytes       
[  7][RX-C]   1.00-2.00   sec   116 MBytes   969 Mbits/sec                  
[  5][TX-C]   2.00-3.00   sec   116 MBytes   976 Mbits/sec    0    495 KBytes       
[  7][RX-C]   2.00-3.00   sec   116 MBytes   973 Mbits/sec                  
[  5][TX-C]   3.00-4.00   sec   114 MBytes   959 Mbits/sec    0    561 KBytes       
[  7][RX-C]   3.00-4.00   sec   116 MBytes   973 Mbits/sec                  
[  5][TX-C]   4.00-5.00   sec   114 MBytes   958 Mbits/sec    0    528 KBytes       
[  7][RX-C]   4.00-5.00   sec   117 MBytes   978 Mbits/sec                  
[  5][TX-C]   5.00-6.00   sec   115 MBytes   963 Mbits/sec    0    495 KBytes       
[  7][RX-C]   5.00-6.00   sec   116 MBytes   977 Mbits/sec                  
[  5][TX-C]   6.00-7.00   sec   116 MBytes   971 Mbits/sec    0    578 KBytes       
[  7][RX-C]   6.00-7.00   sec   116 MBytes   969 Mbits/sec                  
[  5][TX-C]   7.00-8.00   sec   116 MBytes   972 Mbits/sec    0    578 KBytes       
[  7][RX-C]   7.00-8.00   sec   115 MBytes   967 Mbits/sec                  
[  5][TX-C]   8.00-9.00   sec   116 MBytes   975 Mbits/sec    0    594 KBytes       
[  7][RX-C]   8.00-9.00   sec   114 MBytes   959 Mbits/sec                  
[  5][TX-C]   9.00-10.00  sec   115 MBytes   968 Mbits/sec    0   33.0 KBytes       
[  7][RX-C]   9.00-10.00  sec   115 MBytes   968 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID][Role] Interval           Transfer     Bitrate         Retr
[  5][TX-C]   0.00-10.00  sec  1.13 GBytes   971 Mbits/sec    0            sender
[  5][TX-C]   0.00-10.00  sec  1.13 GBytes   968 Mbits/sec                  receiver
[  7][RX-C]   0.00-10.00  sec  1.13 GBytes   969 Mbits/sec    0            sender
[  7][RX-C]   0.00-10.00  sec  1.13 GBytes   966 Mbits/sec                  receiver

iperf Done.

1500 mtu:
iperf3 -c 192.168.10.237 --bidir
Connecting to host 192.168.10.237, port 5201
[  5] local 192.168.10.177 port 35788 connected to 192.168.10.237 port 5201
[  7] local 192.168.10.177 port 35794 connected to 192.168.10.237 port 5201
[ ID][Role] Interval           Transfer     Bitrate         Retr  Cwnd
[  5][TX-C]   0.00-1.00   sec  69.9 MBytes   586 Mbits/sec    0    402 KBytes       
[  7][RX-C]   0.00-1.00   sec  98.1 MBytes   822 Mbits/sec                  
[  5][TX-C]   1.00-2.00   sec  65.8 MBytes   552 Mbits/sec    0    396 KBytes       
[  7][RX-C]   1.00-2.00   sec   110 MBytes   923 Mbits/sec                  
[  5][TX-C]   2.00-3.00   sec  65.6 MBytes   550 Mbits/sec    0    421 KBytes       
[  7][RX-C]   2.00-3.00   sec   111 MBytes   927 Mbits/sec                  
[  5][TX-C]   3.00-4.00   sec  65.4 MBytes   548 Mbits/sec    0    424 KBytes       
[  7][RX-C]   3.00-4.00   sec   109 MBytes   916 Mbits/sec                  
[  5][TX-C]   4.00-5.00   sec  65.5 MBytes   549 Mbits/sec    0    416 KBytes       
[  7][RX-C]   4.00-5.00   sec   109 MBytes   912 Mbits/sec                  
[  5][TX-C]   5.00-6.00   sec  66.0 MBytes   554 Mbits/sec    0    419 KBytes       
[  7][RX-C]   5.00-6.00   sec   110 MBytes   926 Mbits/sec                  
[  5][TX-C]   6.00-7.00   sec  65.0 MBytes   545 Mbits/sec    0    396 KBytes       
[  7][RX-C]   6.00-7.00   sec   110 MBytes   921 Mbits/sec                  
[  5][TX-C]   7.00-8.00   sec  66.4 MBytes   557 Mbits/sec    0    419 KBytes       
[  7][RX-C]   7.00-8.00   sec   109 MBytes   918 Mbits/sec                  
[  5][TX-C]   8.00-9.00   sec  64.9 MBytes   544 Mbits/sec    0    441 KBytes       
[  7][RX-C]   8.00-9.00   sec   109 MBytes   916 Mbits/sec                  
[  5][TX-C]   9.00-10.00  sec  66.1 MBytes   555 Mbits/sec    0   5.66 KBytes       
[  7][RX-C]   9.00-10.00  sec   110 MBytes   928 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID][Role] Interval           Transfer     Bitrate         Retr
[  5][TX-C]   0.00-10.00  sec   660 MBytes   554 Mbits/sec    0            sender
[  5][TX-C]   0.00-10.00  sec   658 MBytes   552 Mbits/sec                  receiver
[  7][RX-C]   0.00-10.00  sec  1.06 GBytes   913 Mbits/sec    0            sender
[  7][RX-C]   0.00-10.00  sec  1.06 GBytes   911 Mbits/sec                  receiver

iperf Done.

Oh, and idle power is pretty good, with this old e1000e 1g board plugged in still is only idling at 2w

Don't have this R2s yet so unsure about the 2.5g interfaces, but the RV2 will be in my staging spacemit target.

1 Like

According to some benchmarks, the Ky X1 (Almost equivalent to the SpacemiT K1) is about the same as a Raspberry Pi 3 in single core performance. Will it actually be able to route 2.5GbE?

Can't agree.
Why NanoPi can upstream PR almost all their devices then?

NanoPi (ARM)'s SoC was launched early, has a large market share, and is widely used. As a result, the probability of submitting upstream code is naturally high, which is a gradual process.
RISC-V is an open-source instruction set architecture (ISA) that gradually improves its upstream code development stage, relying on everyone to port or contribute code upstream together.

1 Like

A router is not all about CPU performance, the I/O side (ethernet/ switch drivers, offloading, etc.) matters a lot more than the CPU itself. There's no alternative to actually testing the SOC/ device for the intended purpose.

1 Like

I just got the R2S anyone know the default credentials for the bainbu system installed on the EMMC from factory? I am also able to test any image people need help with.

cool device! is it support in mainstream kernel?

Download User Manual

Everyone to migrate the code together :grinning_cat: