Skip to content

orangepi_5plus

Benjamin Yousefi edited this page Jun 6, 2026 · 1 revision

Specification

Hardware Implementation
Chipset RK3588
CPU 8-core 64-bit processor
* 4 Cortex-A76 @ 2.4 GHz
* 4 Cortex-A55 @ 1.8 GHz) with independent NEON co-processor
GPU Integrated ARM Mali-G610 with Built-in 3D GPU
compatible with
* OpenGL ES1.1/2.0/3.2
* OpenCL 2.2
* Vulkan 1.2
RAM (LPDDR4) 32 GB
M.2 M-KEY NVMe 2280 PCIe 3.0 x4 Lanes
USB 4(2(3.0) 2(2.0)), one type-C
HDMI 2(2.1 8k@60FPS)
* 1x Type-C with DP TX 1.4A up to 8K@30FPS
* 1x HDMI in with up to 4K@60FPS
* 1x MIPI DSI TX 4 Lanes up to 4K @60Hz
Ethernet 2xPCIe 2.5G LAN RTL8125BG)
Wifi+BT Module AP6611 (0xaabf)
Wifi 6E SDIO3.0
Power Type-C 5V@5A
The type-C power interface does not support PD negotiation
UART 3.3V USB to TTL (1500000 baud rate)

Debug

  1. GND (USB) to GND (board, first pin under the Type-C power supply port)
  2. TX (USB) to RXD (board, second pin, after GND)
  3. RX (USB) to TXD (board, third pin, after RXD)

screen -fnL /dev/ttyUSB0 1500000

  • Do not use "flow control" (-fn)
  • Log output (-L)

Partition

  1. Make sure the storage device is unmounted lslbk -f
  2. Ensure the beginning of the device is empty dd if=/dev/zero of=/dev/sd? bs=1M count=20

The first partition starts at 16MB (32768 sectors with 512 byte sectors)

SD Card

U-Boot expects a GPT partition map and a boot directory structure with files on the SD card.

Partition Map for MMC device 0 -- Partition Type: EFI Part Start LBA End LBA Name 1 0x00000040 0x00001f7f "loader1" 2 0x00004000 0x00005fff "loader2" 3 0x00006000 0x00007fff "trust" 4 0x00008000 0x0003ffff "boot" 5 0x00040000 0x00ed7fde "rootfs"

sfdisk /dev/sd? <<EOF
label: gpt
first-lba: 64
start=64 size=7104 name="loader1" type=L attrs="RequiredPartition"
start=16384 size=8192 name="loader2" type=L attrs="RequiredPartition"
start=24576 size=8192 name="trust" type=L attrs="RequiredPartition"
start=32768 name="root" type=L attrs="RequiredPartition LegacyBIOSBootable"
EOF

sync

Verify sectors created as intended:

  • sfdisk -uS -d /dev/sd?

Format for root file system with label:

  • mkfs.ext4 -L <label>_<size>_<year>[_<number>] /dev/sd?4

Make a note of the PARTUUID:

  • blkid

Boot loader

EFI

U-boot

Either

  • Compile U-boot
  • or copy from a working Orange Pi OS:
    • idbloader.img
    • u-boot.itb
    • rk3588-orangepi-5-plus.dtb

Install idbloader.img and u-boot.itb

  • dd if=idbloader.img of=/dev/sd? seek=64
  • dd if=u-boot.itb of=/dev/sd? seek=16384
  • sync

Linux

Either

  • Compile Linux or
  • copy from a working Orange Pi OS:
    • Image
    • initramfs-linux.img
    • modules

Arch Linux Arm

The applied method was to download the official Orange Pi 5 plus Arch Linux OS:

  1. Copy it to an SD-card cat Opios-arch-aarch64-gnome-opi5plus-24.04-linux5.10.160.img > /dev/mmcblk0
  2. Boot using the SD-card installation and deploy ArchLinuxArm to the local eMMC
  3. arch-chroot to the ArchLinuxARM on eMMC and update system

This did work but Ethernet was not found:

  • Image <-- Although, I did not try this; I was using the ArchLinuxARM image
  • idbloader.img
  • u-boot.itb
  • rk3588-orangepi-5-plus.dtb

Orange Pi version (Linux kernel 5.10.160-1)

Note that the username and password provided in the official manual does not work:

  • User account and password is: oem

Official version (Linux kernel 6.2.1-1)

  1. Mount the root partition # mount /dev/sd?4 /mnt
  2. Extract Arch Linux ARM distribution to mount point as root user and not as sudo in order to preserve the extended attributes and ACL:
  • tar -xvpf ArchLinuxARM-aarch64-latest.tar -C /mnt or
  • bsdtar -xpf ArchLinuxARM-aarch64-latest.tar -C /mnt and
  • sync
  1. Configure boot directory:
    • chmod +r /boot/initramfs-linux.img
  2. Copy the rk3588-orangepi-5-plus.dtb to /mnt/boot/dtbs/rockchip/ from
  3. Copy or create the extlinux/extlinux.conf
    • [NOT TESTED] Add any required overlay, for example fdtoverlays /dtbs/rockchip/overlay/rk3588-opi5max-cam0.dtbo
  4. If pre-configuring the system: arch-chroot /mnt and
  5. If intending to install on the eMMC.
    • Copy idbloader.img, u-boot.itb, rk3588-orangepi-5-plus.dtb
    • Copy ArchLinuxARM-aarch64-latest.tar or ensure that rsync is installed
    • Boot with SD-Card then mount local eMMC:
      • Partition the eMMC, for example /dev/mmcblk0 instead of /dev/sd?
      • Extract Arch Linux Arm to mounted root (step 2 above) or
      • Copy OS from SD to local eMMC rsync -avxHAXhn --exclude='/mnt' / /mnt
      • Remember to update PARTUUID for extlinux!
  6. unmount /mnt
  7. The system should boot, with working Wifi and Bluetooth.
    • User account and password: alarm
    • Root password: root
  8. Full system update to the latest Linux kernel (6.15 when writing this).

Package

package description
wireless-regdb Central Regulatory Domain Database.

Basic system configuration

A minimal configuration to expand depending on additional functional requirements.

file package configure
/etc/adjtime (base) Adjust the hardware clock from the system clock with the assumption that the hardware clock is in UTC: # hwclock --systohc --utc.
/etc/hostname (base) Edit file in a text editor; add <hostname>. Alternatively, use SystemD # hostnamectl set-hostname <hostname>.
/etc/hosts (base) Edit file in a text editor: 127.0.0.1 <hostname>.localdomain <hostname>.
/etc/localtime (base) A syslink from the Time Zone Database database to localtime: $ ln -sf /usr/share/zoneinfo/<region>/<city> /etc/localtime.
/etc/locale.conf (base) Add locale, for example, LANG=en_US.UTF-8.
/etc/locale.gen (base) Uncomment locale in locale.gen and generate locale.conf and resources in /usr/lib/locale with locale-gen. Remember, any additional language later assigned requires to be uncommented in the locale.gen and locale-gen re-generated.
/etc/vconsole.conf (base) Add keyboard loadkeys keymap as KEYMAP=<keymap>.

Initialize key ring

pacman-key --init
pacman-key --populate archlinuxarm

System update - Do NOT mix up "PLUS" with "MAX"!

Back up:

  • cp /boot/dtbs/rockchip/rk3588-orangepi-5-[max, plus].dtb /boot/dtbs/rockchip/rk3588-orangepi-5-[max, plus].dtb.bkup-<YY-MM>

  • cp /boot/Image /boot/Image.bkup-<YY-MM>

  • pacman -Syy

  • pacman -Sy archlinux-keyring

  • pacman -Syu

Ensure:

  • chmod +x /boot/dtbs/rockchip/rk3588-orangepi-5-[max, plus].dtb Not necessary
  • chmod +r /boot/initramfs-linux.img Not necessary?

Reboot

Error
error: failed to commit transaction (conflicting files)
linux-aarch64: /boot/dtbs/rockchip/rk3588-orangepi-5-[max, plus].dtb exists in filesystem
Errors occurred, no packages were upgraded.

Drivers

Graphic

Required firmware Distro Pacakge Path
mali_csffw.bin.zst Arch Linux linux-firmware-other /usr/lib/firmware/arm/mali/arch10.8/

OpenCL 2.2

The driver seems to be opencl-mesa

  • The group of ls -l /dev/dri "renderD128" should be "render"
  • and add user to the "render" group usermod -aG render user

The program clinfo prints platform information but does not confirm it;

  • "number of devices" is 0 (should be 1)

Vulkan 1.2 and OpenGL ES1.1/2.0/3.2

The driver vulkan-panfrost seems to work

  • vulkaninfo in vulkan-tools prints information that confirms it
  • eglinfo in mesa-utils prints information that confirms it

Sound

The jack output worked with:

  • pipewire
  • pipewire-jack
  • pipewire-pulse

Start sevices:

  • systemctl status --user wireplumber
  • systemctl status --user pipewire

If sound is not working:

  • systemctl --user restart pipewire pipewire-pulse wireplumber

Clone this wiki locally