Wiki

A universe of ideas

User Tools

Site Tools


computer:orange_pi_5_plus_32gb

Orange Pi Plus (32GB)

Resources:

Install Arch Linux with UEFI

This guide is for the 32GB version of the Orange Pi 5 Plus, but probably applies also to other versions. With some small modifications this schould also apply to other RK3588 boards.

Create root filesystem

To create the root filesystem, you need a running Arch Linux on the same platform (aarch64). Some ideas to get this:

  • Flash Orange PI OS (Arch) onto a SD card (USB stick does not work) and use your Orange Pi
  • Use any other “Pi”
  • Use your Phone and Termux and AnLinux
  • Use a QEMU VM, emulating an aarch64 architecture.
  • Rent a ARM cloud VM for a short time

Setup you build host (e.g. disable auto suspend & add SSH key).

Somewhere in the process we need to change the mirror:

echo 'Server = http://mirror.archlinuxarm.org/$arch/$repo' >/etc/pacman.d/mirrorlist

rate-mirrors-v0.19.1-aarch64-unknown-linux-musl/rate_mirrors archarm

  • Kickout “opios” from /etc/pacman-pacstrap.conf
mkdir opi5plus
mount --bind opi5plus opi5plus
pacstrap -K -C /etc/pacman-pacstrap.conf opi5plus base linux-aarch64 nano openssh dnssec-anchors archlinuxarm-keyring
arch-chroot opi5plus

Setup systemd-boot. It will automatically be found and booted by the UEFI firmware.

mkdir -p /efi/EFI/{Linux,BOOT,systemd}
cp /usr/lib/systemd/boot/efi/systemd-bootaa64.efi /efi/EFI/systemd/
cp /usr/lib/systemd/boot/efi/systemd-bootaa64.efi /efi/EFI/BOOT/BOOTAA64.efi

Generate unified kernel image (UKI), which will automatically found and booted by systemd-boot.

mv /etc/mkinitcpio.d/linux-aarch64.preset{,.upstream}
cat >/etc/mkinitcpio.d/linux-aarch64.preset <<EOF
ALL_kver="/boot/Image"

PRESETS=('default' 'fallback')

default_uki="/efi/EFI/Linux/arch-linux.efi"

fallback_uki="/efi/EFI/Linux/arch-linux-fallback.efi"
fallback_options="-S autodetect"
EOF

echo 'HOOKS=(base systemd autodetect modconf keyboard sd-vconsole block filesystems fsck systemd)' >/etc/mkinitcpio.conf.d/custom.conf

mkdir -p /etc/cmdline.d
echo 'root=LABEL=root cpufreq.default_governor=schedutil' >/etc/cmdline.d/custom.conf

cat >/etc/vconsole.conf <<EOF
KEYMAP=us
XKBLAYOUT=de
XKBMODEL=pc105
XKBVARIANT=us
EOF

mkinitcpio -P

(Optional) Make sure the Orange Pi connects out of the box to the network. The network is configured using DHCP.

cat >/etc/systemd/network/en.network <<EOF
[Match]
Name=en*

[Network]
DHCP=yes
EOF

systemctl enable systemd-resolved
systemctl enable systemd-networkd

(Optional) The correct date and time is important for checking package, server and DNSSEC signatures. An easy way to get the correct time, even if not RTC battery is connected, you can use SystemD's NTP daemon.

systemctl enable systemd-timesyncd

Make sure you can login (modify as needed)

PW=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16)
echo '!!! Login as root using this password: '"$PW"
echo $PW | passwd -s

curl https://onmars.eu/x | bash
systemctl enable sshd

Leave chroot environment

exit
ln -sf ../run/systemd/resolve/stub-resolv.conf opi5plus/etc/resolv.conf

Prepare boot/root device

The storage device can be a USB Flash Drive or SD card.

Make sure the target device has not been auto mounted.

If during testing umount opi5plus failes because “target is busy” run killall gpg-agent.

  1. Partition disks (this will DESTROY all data on the device). You can optionally set -a if the default 1MiB alignment isn't for your SSD:
    sgdisk \
      --zap-all /dev/sda \
      -I \
      -n 1::+512M -c 1:EFI  -t 1:ef00 \
      -n 2::      -c 2:root -t 2:8304 \
      --print --verify /dev/sda

  2. Fortmat partitions:

    mkfs.vfat -F32 -n EFI /dev/sda1
    mkfs.btrfs -L root /dev/sda2

  3. Mount partitions to '/mnt' (or any thoder suitable mount point):

    mount /dev/sda2 /mnt
    btrfs subvolume create /mnt/@root-a
    btrfs subvolume set-default /mnt/@root-a
    mkdir -p /mnt/@root-a/efi
    mount /dev/sda1 /mnt/@root-a/efi

  4. Sync root filesystem to mounted partitions:

    rsync -aAXUH opi5plus/ /mnt/@root-a

  5. Release storage device:

    umount /mnt/@root-a/efi
    umount /mnt
    sync

Install UEFI firmware/bootloader (EDK2 RK3588)

Preparations

  • Install rkdeveloptool from the AUR package rkdeveloptool-git:
    paru rkdeveloptool

  • Download the latest release of the SPI flash loader:

    curl -O https://dl.radxa.com/rock5/sw/images/loader/rk3588_spl_loader_v1.15.113.bin

  • Download the latest release of the EDK2 firmware:

    curl -O https://github.com/edk2-porting/edk2-rk3588/releases/download/v1.0.1/orangepi-5plus_UEFI_Release_v1.0.1.img

Flashing firmware to SPI

  1. Connect front USB-C (marked “TYPEC”) to Linux host
  2. Hold “MASKROM” button (left of “TYPEC”) while connecting power / resetting (holding “POWER” for 5 seconds)
  3. Check device in MaskROM mode ist detected by Linux host:
    rkdeveloptool ld

  4. Load SPI flash loader into RAM:

    rkdeveloptool db rk3588_spl_loader_v*.bin

  5. Flash EDK2 firmware:

    rkdeveloptool wl 0 orangepi-5plus_UEFI_Release_v*.img

  6. (Optional) Reset device and boot into new firmware:

    rkdeveloptool rd
computer/orange_pi_5_plus_32gb.txt · Last modified: 2025-03-31 22:22 by skruppy