OrangePi R2S is a great new RISC-V OpenWrt device

The OrangePi R2S adopts an open chip micro Ky X1 8-core RISC-V AI processor, providing universal computing power with 2TOPS CPU fusion. It has 2GB/4GB/8GB LPDDR4X operating memory and supports 8GB eMMC, It exquisite and compact, with a size of only 79.2 * 46 * 1.6 mm, making it easy to install in various small spaces.



Orange Pi R2S specifications:

  • SoC – Ky X1
    • CPU – 8-core X60 RISC-V (RV64GCVB) processor @ 1.6 GHz
    • GPU – Imagination IMG BXE-2-32 @ 819 MHz with support for OpenGL ES3.2, Vulkan 1.3, OpenCL 3.0; 20 GFLOPS
    • VPU
      • H.265, H.264, VP8, VP9, MPEG4, MPEG2 decoder up to 4K @ 60fps
      • H.265, H.264, VP8, VP9 encoder up to 4K @ 30fps
      • Support simultaneous processing
        • 1080p60 encoding + 1080p60 decoding
        • 1080p30 H.264/H.265 encoding + 4Kp30 H.264/H.265 decoding
    • AI performance – 2.0 TOPS (INT8) through “CPU core fusion”
    • RVA 22 Profile RVV 1.0 compliant
  • System Memory – 2GB, 4GB, or 8GB LPDDR4X
  • Storage
    • 8GB eMMC flash
    • 10-pin MicroSD card transfer connector (not sure what it is for and how to use it yet)
  • Video Output – N/A
  • Networking
    • 2x 2.5GbE RJ45 ports via RealTek RTL8125BG controllers
    • 2x Gigabit Ethernet RJ45 ports via YT8531C-CA controllers
  • USB
    • 1x USB 3.0 port
    • 1x USB 2.0 port; also used for OS flashing and updates
  • Debugging – 3-pin header for serial console
  • Misc
    • MaskROM key
    • Power LED
    • 4x LEDs for 2.5GbE and GbE
  • Power Supply
    • 5V/3A via USB Type-C port
    • SpacemIT P1 PMIC
  • Dimensions – 79.2 x 46 mm
  • Weight – 60 grams

Download User Manual
Everyone to migrate the code together :grinning_cat:

Starting kernel ...

[    0.000000] Booting Linux on hartid 0
[    0.000000] Linux version 6.18.41 (builder@buildhost) (riscv64-openwrt-linux-musl-gcc (OpenWrt GCC 14.4.0) 14.4.0, GNU ld (GNU Binutils) 2.46.1) #0 SMP Tue Aug  4 13:04:42 2026
[    0.000000] Machine model: OrangePi R2S
[    0.000000] SBI specification v3.0 detected
[    0.000000] SBI implementation ID=0x1 Version=0x10009
[    0.000000] SBI TIME extension detected
[    0.000000] SBI IPI extension detected
[    0.000000] SBI RFENCE extension detected
[    0.000000] SBI SRST extension detected
[    0.000000] SBI DBCN extension detected
[    0.000000] SBI FWFT extension detected
[    0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
[    0.000000] printk: legacy bootconsole [sbi0] enabled
[    0.000000] efi: UEFI not found.
[    0.000000] OF: reserved mem: 0x000000007f000000..0x000000007fffffff (16384 KiB) map non-reusable framebuffer@7f000000
[    0.000000] OF: reserved mem: 0x0000000000000000..0x000000000003ffff (256 KiB) nomap non-reusable mmode_resv0@0
[    0.000000] OF: reserved mem: 0x0000000000040000..0x000000000007ffff (256 KiB) nomap non-reusable mmode_resv1@40000
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000000000000-0x00000000ffffffff]
[    0.000000]   Normal   [mem 0x0000000100000000-0x000000027fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000000007ffff]
[    0.000000]   node   0: [mem 0x0000000000080000-0x000000007fffffff]
[    0.000000]   node   0: [mem 0x0000000100000000-0x000000027fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000027fffffff]
[    0.000000] On node 0, zone Normal: 524288 pages in unavailable ranges
[    0.000000] SBI HSM extension detected
[    0.000000] riscv: base ISA extensions acdfimv
[    0.000000] riscv: ELF capabilities acdfimv
[    0.000000] Ticket spinlock: enabled
[    0.000000] percpu: Embedded 20 pages/cpu s44376 r8192 d29352 u81920
[    0.000000] pcpu-alloc: s44376 r8192 d29352 u81920 alloc=20*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 [0] 4 [0] 5 [0] 6 [0] 7
[    0.000000] Kernel command line: earlycon=sbi console=ttyS0,115200 root=PARTUUID=a613ed35-1288-3c2e-bb49-7d0fb95b5404 rootwait
[    0.000000] printk: log buffer data + meta data: 131072 + 458752 = 589824 bytes
[    0.000000] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)
[    0.000000] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[    0.000000] software IO TLB: area num 8.
[    0.000000] software IO TLB: mapped [mem 0x0000000079d78000-0x000000007dd78000] (64MB)
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 2097152
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] 	Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.000000] RCU Tasks Trace: Setting shift to 3 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=8.
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] riscv-intc: 64 local interrupts mapped
[    0.000000] riscv: providing IPIs using SBI IPI extension
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000001] sched_clock: 64 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    0.007985] riscv-timer: Timer interrupt in S-mode is available via sstc extension
[    0.015757] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
[    0.025902] pid_max: default: 32768 minimum: 301
[    0.033379] Mount-cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.038053] Mountpoint-cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.052601] ASID allocator using 16 bits (65536 entries)
[    0.055098] rcu: Hierarchical SRCU implementation.
[    0.059795] rcu: 	Max phase no-delay instances is 1000.
[    0.065166] Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level
[    0.073168] EFI services will not be available.
[    0.077970] smp: Bringing up secondary CPUs ...
[    0.089478] smp: Brought up 1 node, 8 CPUs
[    0.091418] Memory: 8103052K/8388608K available (7142K kernel code, 2495K rwdata, 4096K rodata, 3580K init, 326K bss, 280716K reserved, 0K cma-reserved)
[    0.111779] posixtimers hash table entries: 4096 (order: 4, 65536 bytes, linear)
[    0.116359] futex hash table entries: 2048 (131072 bytes on 1 NUMA nodes, total 128 KiB, linear).
[    0.127194] pinctrl core: initialized pinctrl subsystem
[    0.130997] DMI not present or invalid.
[    0.135154] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.140453] DMA: preallocated 1024 KiB GFP_KERNEL pool for atomic allocations
[    0.147269] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.155495] thermal_sys: Registered thermal governor 'fair_share'
[    0.155501] thermal_sys: Registered thermal governor 'bang_bang'
[    0.161213] thermal_sys: Registered thermal governor 'step_wise'
[    0.167211] thermal_sys: Registered thermal governor 'user_space'
[    0.173272] cpuidle: using governor ladder
[    0.183382] cpuidle: using governor menu
[    0.187587] SBI misaligned access exception delegation ok
[    0.243180] cpu7: Ratio of byte access time to unaligned word access is 1.92, unaligned accesses are fast
[    0.243181] cpu4: Ratio of byte access time to unaligned word access is 1.82, unaligned accesses are fast
[    0.243181] cpu5: Ratio of byte access time to unaligned word access is 1.92, unaligned accesses are fast
[    0.243181] cpu6: Ratio of byte access time to unaligned word access is 1.81, unaligned accesses are fast
[    0.243181] cpu1: Ratio of byte access time to unaligned word access is 2.20, unaligned accesses are fast
[    0.243181] cpu2: Ratio of byte access time to unaligned word access is 2.29, unaligned accesses are fast
[    0.243181] cpu3: Ratio of byte access time to unaligned word access is 2.22, unaligned accesses are fast
[    0.363230] cpu0: Ratio of byte access time to unaligned word access is 10.12, unaligned accesses are fast
[    0.394846] iommu: Default domain type: Translated
[    0.396709] iommu: DMA domain TLB invalidation policy: strict mode
[    0.403505] SCSI subsystem initialized
[    0.406780] usbcore: registered new interface driver usbfs
[    0.412101] usbcore: registered new interface driver hub
[    0.417440] usbcore: registered new device driver usb
[    0.423801] clocksource: Switched to clocksource riscv_clocksource
[    0.432285] NET: Registered PF_INET protocol family
[    0.434525] IP idents hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.449367] tcp_listen_portaddr_hash hash table entries: 4096 (order: 4, 65536 bytes, linear)
[    0.455067] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.462718] TCP established hash table entries: 65536 (order: 7, 524288 bytes, linear)
[    0.470916] TCP bind hash table entries: 65536 (order: 9, 2097152 bytes, linear)
[    0.480038] TCP: Hash tables configured (established 65536 bind 65536)
[    0.484998] MPTCP token hash table entries: 8192 (order: 6, 196608 bytes, linear)
[    0.492390] UDP hash table entries: 4096 (order: 6, 262144 bytes, linear)
[    0.498950] UDP-Lite hash table entries: 4096 (order: 6, 262144 bytes, linear)
[    0.506525] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.511610] PCI: CLS 0 bytes, default 64
[    0.516881] workingset: timestamp_bits=46 max_order=21 bucket_order=0
[    0.522492] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.527745] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[    0.596331] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 250)
[    0.602613] riscv-plic: interrupt-controller@e0000000: mapped 159 interrupts with 8 handlers for 16 contexts.
[    0.612803] k1-pinctrl d401e000.pinctrl: no syscon found, disable power voltage switch functionality
[    0.627284] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
[    0.640790] loop: module loaded
[    0.644459] usbcore: registered new interface driver usb-storage
[    0.647564] usbcore: registered new device driver onboard-usb-dev
[    0.653887] i2c_dev: i2c /dev entries driver
[    0.660068] sdhci: Secure Digital Host Controller Interface driver
[    0.664068] sdhci: Copyright(c) Pierre Ossman
[    0.668375] sdhci-pltfm: SDHCI platform and OF driver helper
[    0.706325] mmc0: SDHCI controller on d4281000.mmc [d4281000.mmc] using ADMA
[    0.711727] NET: Registered PF_INET6 protocol family
[    0.717327] Segment Routing with IPv6
[    0.719073] In-situ OAM (IOAM) with IPv6
[    0.723019] NET: Registered PF_PACKET protocol family
[    0.728054] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    0.741126] 8021q: 802.1Q VLAN Support v1.8
[    0.776514] mmp-pdma d4000000.dma-controller: initialized 16 channels
[    0.780765] printk: legacy console [ttyS0] disabled
[    0.785469] d4017000.serial: ttyS0 at MMIO 0xd4017000 (irq = 16, base_baud = 921600) is a XScale
[    0.793702] printk: legacy console [ttyS0] enabled
[    0.800044] mmc0: new HS400 Enhanced strobe MMC card at address 0001
[    0.803209] printk: legacy bootconsole [sbi0] disabled
[    0.810469] mmcblk0: mmc0:0001 8GTF4R 7.28 GiB
[    0.837238] Alternate GPT is invalid, using primary GPT.
[    0.840514]  mmcblk0: p1 p2 p3 p4
[    0.844636] mmcblk0boot0: mmc0:0001 8GTF4R 4.00 MiB
[    0.849823] mmcblk0boot1: mmc0:0001 8GTF4R 4.00 MiB
[    0.854400] mmcblk0rpmb: mmc0:0001 8GTF4R 512 KiB, chardev (247:0)
[    1.087837] /soc/i2c@d401d800/pmic@41: Fixed dependency cycle(s) with /soc/i2c@d401d800/pmic@41/regulators/buck5
[    1.115566] spacemit-p1-rtc spacemit-p1-rtc.2.auto: registered as rtc0
[    1.120833] spacemit-p1-rtc spacemit-p1-rtc.2.auto: setting system clock to 2026-08-04T13:16:14 UTC (1785849374)
[    1.135028] spacemit-k1-pcie ca400000.pcie: host bridge /soc/pcie-bus/pcie@ca400000 ranges:
[    1.135073] spacemit-k1-pcie ca800000.pcie: host bridge /soc/pcie-bus/pcie@ca800000 ranges:
[    1.136644] xhci-hcd xhci-hcd.3.auto: xHCI Host Controller
[    1.136703] xhci-hcd xhci-hcd.3.auto: new USB bus registered, assigned bus number 1
[    1.136870] xhci-hcd xhci-hcd.3.auto: hcc params 0x0220fe6d hci version 0x110 quirks 0x0000808000000010
[    1.136919] xhci-hcd xhci-hcd.3.auto: irq 21, io mem 0xc0a00000
[    1.137102] xhci-hcd xhci-hcd.3.auto: xHCI Host Controller
[    1.137113] xhci-hcd xhci-hcd.3.auto: new USB bus registered, assigned bus number 2
[    1.137124] xhci-hcd xhci-hcd.3.auto: Host supports USB 3.0 SuperSpeed
[    1.137302] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.18
[    1.137310] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.137316] usb usb1: Product: xHCI Host Controller
[    1.137321] usb usb1: Manufacturer: Linux 6.18.41 xhci-hcd
[    1.137326] usb usb1: SerialNumber: xhci-hcd.3.auto
[    1.137684] hub 1-0:1.0: USB hub found
[    1.137724] hub 1-0:1.0: 1 port detected
[    1.138112] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[    1.138214] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 6.18
[    1.138223] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.138228] usb usb2: Product: xHCI Host Controller
[    1.138232] usb usb2: Manufacturer: Linux 6.18.41 xhci-hcd
[    1.138237] usb usb2: SerialNumber: xhci-hcd.3.auto
[    1.138530] hub 2-0:1.0: USB hub found
[    1.138564] hub 2-0:1.0: 1 port detected
[    1.139462] clk: Disabling unused clocks
[    1.140719] spacemit-k1-pcie ca400000.pcie:       IO 0x009f002000..0x009f101fff -> 0x0000000000
[    1.149066] spacemit-k1-pcie ca800000.pcie:       IO 0x00b7002000..0x00b7101fff -> 0x0000000000
[    1.154501] spacemit-k1-pcie ca400000.pcie:      MEM 0x0090000000..0x009effffff -> 0x0090000000
[    1.257599] spacemit-k1-pcie ca400000.pcie: iATU: unroll T, 8 ob, 8 ib, align 4K, limit 4G
[    1.258859] spacemit-k1-pcie ca800000.pcie:      MEM 0x00a0000000..0x00afffffff -> 0x00a0000000
[    1.328556] spacemit-k1-pcie ca800000.pcie:      MEM 0x00b0000000..0x00b6ffffff -> 0x00b0000000
[    1.337441] check access for rdinit=/init failed: -2, ignoring
[    1.363804] spacemit-k1-pcie ca400000.pcie: PCIe Gen.1 x1 link up
[    1.367525] spacemit-k1-pcie ca400000.pcie: PCI host bridge to bus 0001:00
[    1.374138] pci_bus 0001:00: root bus resource [bus 00-ff]
[    1.379574] pci_bus 0001:00: root bus resource [io  0x0000-0xfffff]
[    1.385834] pci_bus 0001:00: root bus resource [mem 0x90000000-0x9effffff]
[    1.394919] pci_bus 0001:00: resource 4 [io  0x0000-0xfffff]
[    1.398325] pci_bus 0001:00: resource 5 [mem 0x90000000-0x9effffff]
[    1.404990] pci 0001:00:00.0: [1e5d:3003] type 01 class 0x060400 PCIe Root Port
[    1.411881] pci 0001:00:00.0: BAR 0 [mem 0x00000000-0x000fffff]
[    1.417792] pci 0001:00:00.0: BAR 1 [mem 0x00000000-0x000fffff]
[    1.423672] pci 0001:00:00.0: PCI bridge to [bus 01-ff]
[    1.428894] pci 0001:00:00.0:   bridge window [io  0x0000-0x0fff]
[    1.431627] spacemit-k1-pcie ca800000.pcie: iATU: unroll T, 8 ob, 8 ib, align 4K, limit 4G
[    1.434965] pci 0001:00:00.0:   bridge window [mem 0x00000000-0x000fffff]
[    1.434976] pci 0001:00:00.0:   bridge window [mem 0x00000000-0x000fffff 64bit pref]
[    1.435033] pci 0001:00:00.0: supports D1
[    1.461692] pci 0001:00:00.0: PME# supported from D0 D1 D3hot D3cold
[    1.469910] pci 0001:01:00.0: [10ec:8125] type 00 class 0x020000 PCIe Endpoint
[    1.475414] pci 0001:01:00.0: BAR 0 [io  0x0000-0x00ff]
[    1.480454] pci 0001:01:00.0: BAR 2 [mem 0x00000000-0x0000ffff 64bit]
[    1.486895] pci 0001:01:00.0: BAR 4 [mem 0x00000000-0x00003fff 64bit]
[    1.493665] pci 0001:01:00.0: supports D1 D2
[    1.497552] pci 0001:01:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    1.504340] pci 0001:01:00.0: 2.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s PCIe x1 link at 0001:00:00.0 (capable of 4.000 Gb/s with 5.0 GT/s PCIe x1 link)
[    1.543807] spacemit-k1-pcie ca800000.pcie: PCIe Gen.1 x1 link up
[    1.543818] pci 0001:01:00.0: ASPM: default states L0s
[    1.552396] pci_bus 0001:01: busn_res: [bus 01-ff] end is updated to 01
[    1.559007] pci 0001:00:00.0: BAR 0 [mem 0x90000000-0x900fffff]: assigned
[    1.565748] pci 0001:00:00.0: BAR 1 [mem 0x90100000-0x901fffff]: assigned
[    1.572508] pci 0001:00:00.0: bridge window [mem 0x90200000-0x902fffff]: assigned
[    1.579980] pci 0001:00:00.0: bridge window [io  0x1000-0x1fff]: assigned
[    1.586830] pci 0001:01:00.0: BAR 2 [mem 0x90200000-0x9020ffff 64bit]: assigned
[    1.594070] pci 0001:01:00.0: BAR 4 [mem 0x90210000-0x90213fff 64bit]: assigned
[    1.601346] pci 0001:01:00.0: BAR 0 [io  0x1000-0x10ff]: assigned
[    1.607420] pci 0001:00:00.0: PCI bridge to [bus 01]
[    1.612352] pci 0001:00:00.0:   bridge window [io  0x1000-0x1fff]
[    1.618440] pci 0001:00:00.0:   bridge window [mem 0x90200000-0x902fffff]
[    1.627177] pcieport 0001:00:00.0: PME: Signaling with IRQ 25
[    1.631273] pcieport 0001:00:00.0: AER: enabled with IRQ 25
[    1.637182] spacemit-k1-pcie ca800000.pcie: PCI host bridge to bus 0002:00
[    1.643351] pci_bus 0002:00: root bus resource [bus 00-ff]
[    1.648842] pci_bus 0002:00: root bus resource [io  0x100000-0x1fffff] (bus address [0x0000-0xfffff])
[    1.658020] pci_bus 0002:00: root bus resource [mem 0xa0000000-0xafffffff pref]
[    1.665313] pci_bus 0002:00: root bus resource [mem 0xb0000000-0xb6ffffff]
[    1.674467] pci_bus 0002:00: resource 4 [io  0x100000-0x1fffff]
[    1.678064] pci_bus 0002:00: resource 5 [mem 0xa0000000-0xafffffff pref]
[    1.684761] pci_bus 0002:00: resource 6 [mem 0xb0000000-0xb6ffffff]
[    1.691409] pci 0002:00:00.0: [1e5d:3003] type 01 class 0x060400 PCIe Root Port
[    1.693727] VFS: Mounted root (squashfs filesystem) readonly on device 179:4.
[    1.698330] pci 0002:00:00.0: BAR 0 [mem 0x00000000-0x000fffff]
[    1.698345] pci 0002:00:00.0: BAR 1 [mem 0x00000000-0x000fffff]
[    1.698351] pci 0002:00:00.0: PCI bridge to [bus 01-ff]
[    1.698360] pci 0002:00:00.0:   bridge window [io  0x100000-0x100fff]
[    1.698367] pci 0002:00:00.0:   bridge window [mem 0x00000000-0x000fffff]
[    1.707814] Freeing unused kernel image (initmem) memory: 3580K
[    1.711319] pci 0002:00:00.0:   bridge window [mem 0x00000000-0x000fffff 64bit pref]
[    1.717393] Run /sbin/init as init process
[    1.722474] pci 0002:00:00.0: supports D1
[    1.728890]   with arguments:
[    1.728900]     /sbin/init
[    1.735623] pci 0002:00:00.0: PME# supported from D0 D1 D3hot D3cold
[    1.737512] pci 0002:01:00.0: [10ec:8125] type 00 class 0x020000 PCIe Endpoint
[    1.741531]   with environment:
[    1.749419] pci 0002:01:00.0: BAR 0 [io  0x100000-0x1000ff]
[    1.753334]     HOME=/
[    1.757345] pci 0002:01:00.0: BAR 2 [mem 0x00000000-0x0000ffff 64bit]
[    1.760275]     TERM=linux
[    1.762967] pci 0002:01:00.0: BAR 4 [mem 0x00000000-0x00003fff 64bit]
[    1.803458] pci 0002:01:00.0: supports D1 D2
[    1.807333] pci 0002:01:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    1.814121] pci 0002:01:00.0: 2.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s PCIe x1 link at 0002:00:00.0 (capable of 4.000 Gb/s with 5.0 GT/s PCIe x1 link)
[    1.853835] pci 0002:01:00.0: ASPM: default states L0s
[    1.856370] pci_bus 0002:01: busn_res: [bus 01-ff] end is updated to 01
[    1.862967] pci 0002:00:00.0: BAR 0 [mem 0xb0000000-0xb00fffff]: assigned
[    1.869743] pci 0002:00:00.0: BAR 1 [mem 0xb0100000-0xb01fffff]: assigned
[    1.876547] pci 0002:00:00.0: bridge window [mem 0xb0200000-0xb02fffff]: assigned
[    1.883963] pci 0002:00:00.0: bridge window [io  0x100000-0x100fff]: assigned
[    1.891072] pci 0002:01:00.0: BAR 2 [mem 0xb0200000-0xb020ffff 64bit]: assigned
[    1.898392] pci 0002:01:00.0: BAR 4 [mem 0xb0210000-0xb0213fff 64bit]: assigned
[    1.905682] pci 0002:01:00.0: BAR 0 [io  0x100000-0x1000ff]: assigned
[    1.912078] pci 0002:00:00.0: PCI bridge to [bus 01]
[    1.917026] pci 0002:00:00.0:   bridge window [io  0x100000-0x100fff]
[    1.923440] pci 0002:00:00.0:   bridge window [mem 0xb0200000-0xb02fffff]
[    1.932219] pcieport 0002:00:00.0: PME: Signaling with IRQ 27
[    1.936349] pcieport 0002:00:00.0: AER: enabled with IRQ 27
[    1.988621] init: Console is alive
[    2.218060] kmodloader: loading kernel modules from /etc/modules-boot.d/*
[    2.249757] r8125: loading out-of-tree module taints kernel.
[    2.254944] irq: no irq domain found for pcie@0 !
[    2.257481] r8125 Ethernet controller driver 9.016.01-NAPI loaded
[    2.263755] r8125 0001:01:00.0: enabling device (0000 -> 0003)
[    2.281283] r8125: This product is covered by one or more of the following patents: US6,570,884, US6,115,776, and US6,327,625.
[    2.290092] r8125  Copyright (C) 2025 Realtek NIC software team <nicfae@realtek.com>
                This program comes with ABSOLUTELY NO WARRANTY; for details, please see <http://www.gnu.org/licenses/>.
                This is free software, and you are welcome to redistribute it under certain conditions; see <http://www.gnu.org/licenses/>.
[    2.320948] irq: no irq domain found for pcie@0 !
[    2.325470] r8125 Ethernet controller driver 9.016.01-NAPI loaded
[    2.331665] r8125 0002:01:00.0: enabling device (0000 -> 0003)
[    2.349162] r8125: This product is covered by one or more of the following patents: US6,570,884, US6,115,776, and US6,327,625.
[    2.357976] r8125  Copyright (C) 2025 Realtek NIC software team <nicfae@realtek.com>
                This program comes with ABSOLUTELY NO WARRANTY; for details, please see <http://www.gnu.org/licenses/>.
                This is free software, and you are welcome to redistribute it under certain conditions; see <http://www.gnu.org/licenses/>.
[    2.392975] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
[    2.404643] init: - preinit -
[   11.193815] random: crng init done
[   11.257391] YT8531 Gigabit Ethernet cac80000.ethernet:01: attached PHY driver (mii_bus:phy_addr=cac80000.ethernet:01, irq=POLL)
[   11.290096] k1_emac cac80000.ethernet eth0: Link is Down
[   15.451556] loop0: detected capacity change from 0 to 1179648
[   15.563852] loop0: detected capacity change from 1179648 to 1163136
[   15.569489] mount_root: overlay filesystem in /dev/loop0 has not been formatted yet
[   15.580446] mount_root: no usable overlay filesystem found, using tmpfs overlay
[   15.588491] overlayfs: null uuid detected in lower fs '/', falling back to xino=off,index=off,nfs_export=off.
[   16.342967] urandom-seed: Seed file not found (/etc/urandom.seed)
[   16.689103] procd: - early -
[   17.246838] procd: - ubus -
[   17.307345] procd: - init -
[   17.653498] kmodloader: loading kernel modules from /etc/modules.d/*
[   17.689673] tun: Universal TUN/TAP device driver, 1.6
[   17.751279] PPP generic driver version 2.4.2
[   17.754193] NET: Registered PF_PPPOX protocol family
[   17.761117] wireguard: WireGuard 1.0.0 loaded. See www.wireguard.com for information.
[   17.766339] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
[   17.783899] kmodloader: done loading kernel modules from /etc/modules.d/*
[   17.835752] urngd: v1.0.2 started.
[   24.642194] YT8531 Gigabit Ethernet cac80000.ethernet:01: attached PHY driver (mii_bus:phy_addr=cac80000.ethernet:01, irq=POLL)
[   24.674457] k1_emac cac80000.ethernet eth0: Link is Down
[   24.677238] br-lan: port 1(eth0) entered blocking state
[   24.682365] br-lan: port 1(eth0) entered disabled state
[   24.687764] k1_emac cac80000.ethernet eth0: entered allmulticast mode
[   24.694337] k1_emac cac80000.ethernet eth0: entered promiscuous mode
[   24.709977] YT8531 Gigabit Ethernet cac81000.ethernet:01: attached PHY driver (mii_bus:phy_addr=cac81000.ethernet:01, irq=POLL)
[   24.742763] k1_emac cac81000.ethernet eth1: Link is Down
[   24.745691] br-lan: port 2(eth1) entered blocking state
[   24.750678] br-lan: port 2(eth1) entered disabled state
[   24.756010] k1_emac cac81000.ethernet eth1: entered allmulticast mode
[   24.762572] k1_emac cac81000.ethernet eth1: entered promiscuous mode
[   24.780067] eth2: 0xffffffc601cd0000, c0:74:2b:fb:80:1a, IRQ 0
[   24.797151] br-lan: port 3(eth2) entered blocking state
[   24.799755] br-lan: port 3(eth2) entered disabled state
[   24.805096] r8125 0001:01:00.0 eth2: entered allmulticast mode
[   24.811108] r8125 0001:01:00.0 eth2: entered promiscuous mode
[   24.825842] loop0: detected capacity change from 0 to 1179648
[   24.827963] eth3: 0xffffffc601cf0000, c0:74:2b:fb:80:1b, IRQ 0
[   24.848784] br-lan: port 4(eth3) entered blocking state
[   24.851402] br-lan: port 4(eth3) entered disabled state
[   24.856762] r8125 0002:01:00.0 eth3: entered allmulticast mode
[   24.862764] r8125 0002:01:00.0 eth3: entered promiscuous mode
[   24.904050] loop0: detected capacity change from 1179648 to 1163136
[   24.914593] MTD: Attempt to mount non-MTD device "/dev/loop0"
[   28.074937] r8125: eth2: Link is Up - 2.5Gbps/Full
[   28.077248] br-lan: port 3(eth2) entered blocking state
[   28.082353] br-lan: port 3(eth2) entered forwarding state
[   31.214246] aldo1: disabling
[   31.216288] dldo1: disabling

I've got an RV2 and it works ok to play with as a toy, but could you upstream your OpenWrt support? I'm not going to use any device on my network that only has a hacked up, proprietary version of OpenWrt, it needs to be fully supported.

I understand all that, but I'm not going to set up a separate system outside OpenWrt just to support one device. Why don't you just integrate your dts files and other bits into the already-existing RISC-V targets in upstream OpenWrt and allow use of the rich toolset?

$ ssh opi-rv2

BusyBox v1.36.1 (2025-02-03 23:09:37 UTC) built-in shell (ash)
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 24.10.0, r28427-6df0e3d02a
 -----------------------------------------------------
2025-06-10T08:04:02 PDT  1600 MHz  1600 MHz  1600 MHz  1600 MHz  1600 MHz  1600 MHz  1600 MHz  1600 MHz  45.0 C  44.0 C

$ owut download
owut - OpenWrt Upgrade Tool 2025.04.08~ef2bfb4d-r1 (/usr/bin/owut)
ERROR: Response status 404 while downloading
  https://downloads.openwrt.org/releases/24.10.1/targets/ky/riscv64/profiles.json
ERROR: Unsupported target 'ky/riscv64'

I have the RV2.
I will use OpenWrt on it when I can go here:
https://firmware-selector.openwrt.org/
and enter Xunlong and then see the RV2

General question: What's the use for all that computing power on a router?

To be able to run SQM/QoS at full line speed.

Oops, forgot: VPN likewise.

So AI in the name is a pure marketing thing?

This is exactly what I'm talking about! I have seen several routers marketed with "AI" in their names (Dlink AFAIR) and asked myself 'Did I miss something important?'.

Let's just say they don't know how to sell it yet.

DPI is the hardest thing I can come up with, but it can be implemented perfectly well on modern hardware. In fact most applications I'm aware of use FPGA for that for many years.

Now we have to understand where is a man who buys a device like OrangePi R2S in all the chain you've described :joy:

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".

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

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.

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.

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

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?

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.