# Rockchip RK3588S octa core 4/8/16GB RAM SoC NVMe USB3 USB-C GbE BOARD_NAME="Orange Pi 5" BOARD_VENDOR="xunlong" BOARDFAMILY="rockchip-rk3588" BOARD_MAINTAINER="efectn" BOOTCONFIG="orangepi-5-rk3588s_defconfig" # vendor name, not standard, see hook below, set BOOT_SOC below to compensate BOOTCONFIG_SATA="orangepi-5-sata-rk3588s_defconfig" BOOT_SOC="rk3588" KERNEL_TARGET="current,edge,vendor" KERNEL_TEST_TARGET="vendor,current" FULL_DESKTOP="yes" BOOT_LOGO="desktop" BOOT_FDT_FILE="rockchip/rk3588s-orangepi-5.dtb" BOOT_SCENARIO="spl-blobs" BOOT_SUPPORT_SPI="yes" BOOT_SPI_RKSPI_LOADER="yes" IMAGE_PARTITION_TABLE="gpt" declare -g UEFI_EDK2_BOARD_ID="orangepi-5" # This _only_ used for uefi-edk2-rk3588 extension declare -g BLUETOOTH_HCIATTACH_PARAMS="-s 115200 /dev/ttyS9 bcm43xx 1500000" # For the bluetooth-hciattach extension enable_extension "bluetooth-hciattach" # Enable the bluetooth-hciattach extension function post_family_config__orangepi5_use_mainline_uboot() { display_alert "$BOARD" "Mainline U-Boot overrides for $BOARD - $BRANCH" "info" declare -g BOOTCONFIG="orangepi-5-rk3588s_defconfig" declare -g BOOTDELAY=1 declare -g BOOTSOURCE="https://github.com/u-boot/u-boot.git" declare -g BOOTBRANCH="tag:v2026.04-rc3" declare -g BOOTPATCHDIR="v2026.04" declare -g BOOTDIR="u-boot-${BOARD}" declare -g UBOOT_TARGET_MAP="BL31=${RKBIN_DIR}/${BL31_BLOB} ROCKCHIP_TPL=${RKBIN_DIR}/${DDR_BLOB} $BOOTCONFIG_SATA;;u-boot-rockchip-spi-sata.bin BL31=${RKBIN_DIR}/${BL31_BLOB} ROCKCHIP_TPL=${RKBIN_DIR}/${DDR_BLOB} $BOOTCONFIG;;u-boot-rockchip.bin u-boot-rockchip-spi.bin" unset uboot_custom_postprocess # disable stuff from rockchip64_common; we're using binman here which does all the work already } function pre_config_uboot_target__orangepi5_patch_uboot_bootconfig_hack_for_sata() { display_alert "u-boot for ${BOARD}" "u-boot: hack bootconfig for sata spi image" "info" if [[ $target_make == *"orangepi-5-sata-rk3588s_defconfig"* ]]; then BOOTCONFIG="orangepi-5-sata-rk3588s_defconfig" target_make=${target_make/orangepi-5-sata-rk3588s_defconfig/} else BOOTCONFIG="orangepi-5-rk3588s_defconfig" target_make=${target_make/orangepi-5-rk3588s_defconfig/} fi } function post_config_uboot_target__orangepi5_keep_sata_bootconfig() { display_alert "u-boot for ${BOARD}" "u-boot: hack bootconfig for sata spi image" "info" if [[ $BOOTCONFIG == "orangepi-5-sata-rk3588s_defconfig" ]]; then cp .config ${uboottempdir}/.config.sata fi } function pre_package_uboot_image__orangepi5_copy_sataconfig_to_package() { if [[ -f "${uboottempdir}/.config.sata" ]]; then run_host_command_logged cp ${uboottempdir}/.config.sata "$uboottempdir/usr/lib/u-boot/orangepi-5-sata-rk3588s_defconfig" run_host_command_logged rm ${uboottempdir}/.config.sata fi } function post_family_tweaks_bsp__orangepi5_copy_usb2_service() { if [[ $BRANCH == "edge" || $BRANCH == "current" ]]; then return fi display_alert "Installing BSP firmware and fixups" # Add USB2 init service. Otherwise, USB2 and TYPE-C won't work by default cp $SRC/packages/bsp/orangepi5/orangepi5-usb2-init.service $destination/lib/systemd/system/ return 0 } function post_family_tweaks__orangepi5_enable_usb2_service() { if [[ $BRANCH == "edge" || $BRANCH == "current" ]]; then return fi display_alert "$BOARD" "Installing board tweaks" "info" # enable usb2 init service chroot $SDCARD /bin/bash -c "systemctl --no-reload enable orangepi5-usb2-init.service >/dev/null 2>&1" return 0 } function post_family_tweaks__orangepi5_naming_audios() { if [[ $BRANCH == "edge" || $BRANCH == "current" ]]; then return fi display_alert "$BOARD" "Renaming orangepi5 audios" "info" mkdir -p $SDCARD/etc/udev/rules.d/ echo 'SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmi0-sound", ENV{SOUND_DESCRIPTION}="HDMI0 Audio"' > $SDCARD/etc/udev/rules.d/90-naming-audios.rules echo 'SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-dp0-sound", ENV{SOUND_DESCRIPTION}="DP0 Audio"' >> $SDCARD/etc/udev/rules.d/90-naming-audios.rules echo 'SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-es8388-sound", ENV{SOUND_DESCRIPTION}="ES8388 Audio"' >> $SDCARD/etc/udev/rules.d/90-naming-audios.rules return 0 }