Orange Pi5

Orange Pi 5 uses Rockchip RK3588S new generation 8-core 64-bit processor, quad-core A76 + quad-core A55, with 8nm process design, up to 2.4GHz main frequency, integrated ARM Mali-G610 GPU, embedded high-performance 3D/2D image acceleration module, built-in NPU with 6Tops computing power, with 4GB/8GB/16GB (LPDDR4/4X), and up to 8K display processing capability.

Orange Pi 5 предоставляет множество интерфейсов, включая выход HDMI, интерфейс GPIO, M.2 PCIe2.0, Type-C, порт Gigabit LAN, 2*USB2.0, 1*USB3.0 и т. д. SoC RK3588s можно использовать в планшетах, облачных вычислениях, искусственном интеллекте, AR/VR, интеллектуальной безопасности, устройствах для умного дома и других областях, охватывая различные отрасли AIoT.

Hardware Features

Одноплатный компьютер Orange Pi 5 – это первая модель серии: Pi5, Pi5 B, Pi5 Plus от компании Orange Pi, построенной на базе SoCs Rockchip: RK3588s, RK3588. Главным преимуществом данной серии, пожалуй, является то, что на борту имеется SPI Nor Flash для размещения загрузчика и, кроме того, есть разъем M.2 для подключения NVME диска.

Orange Pi 5 имеет следующие характеристики:

Orange Pi5
  • SoC: Rockchip RK3588S (8nm LP process)
  • CPU: 8-core 64-bit processor: Big.Little Architecture: 4 x Cortex-A76 and 4 x Cortex-A55, Big core cluster is 2.4GHz, and Little core cluster is 1.8GHz frequency
  • GPU: Arm Mali-G610 MP4 "Odin" GPU: Compatible with OpenGL ES1.1/2.0/3.2, OpenCL 2.2 and Vulkan 1.2; 3D graphics engine and 2D graphics engine
  • NPU: Built-in AI accelerator NPU with up to 6 TOPS, supports INT4/INT8/INT16 mixed operation
  • PMU: RK806-1
  • RAM: 4GB/8GB/16GB (LPDDR4/4X)
  • Memory: QSPI Nor FLASH 16MB; MicroSD (TF) Card Slot; M.2 M-KEY Socket
  • USB: USB3.0 × 1; USB2.0 × 2; Type-C (USB3.1) × 1
  • Video Output: HDMI2.1, up to 8K @60Hz; DP1.4 (DisplayPort), DP1.4 and USB3.1 ports are multiplexed, and the port is shared with Type-C; 2 * MIPI D-PHY TX 4Lane, configurable up to 4K @60Hz
  • Camera: MIPI CSI 4 Lane; 2 * MIPI D-PHY RX 4 Lane
  • Audio: CODEC: ES8388; 3.5mm headphone jack audio input/output; Input: Onboard MIC; HDMI 2.1 eARC
  • Ethernet: 10/100/1000 Mbps Ethernet
  • Expansion Port: For extending UART, PWM, I2C, SPI, CAN and GPIO interfaces.
  • M.2 M-KEY Socket Expansion Slot: Support PCIe NVMe SSD; Support custom PCIe Wi-Fi6+BT5.0 module
  • Button: 1×MaskROM key; 1×Recovery key; 1×On/Off key
  • Power Source: Support Type-C power supply, 5V @ 4A
  • LED: Power indicator: red; Status indicator: green
  • Debugging: 3 Pin debug serial port (UART) 1500000n8
  • Dimension: 62mm x 100mm
  • Weight: 46g

Документацию можно найти на официальном сайте компании Orange Pi, где есть страница, посвященная SBC Orange Pi 5. Следует отметить, что, для серии SBC Orange Pi 5/5B/5+, компания Orange Pi выпустила версии, где на борту имеется 32GB RAM.

Toolchain

Готовый toolchain для работы на 64-разрядных Linux машинах можно получить на нашем FTP-сервере в каталоге toolchains/x86_64. Выбирать здесь нужно последнюю версию архива с именем 'aarch64-RK358X-linux-glibc-*.tar.xz'.

Следует отметить, что данный toolchain не перемещаем и устанавливать его необходимо в каталог /opt/toolchains/. Для установки достаточно создать каталог и распаковать архив:

mkdir -p /opt/toolchains
cd /opt/toolchains
tar xJvf aarch64-RK358X-linux-glibc-1.9.8.tar.xz

Использовать toolchain довольно просто, но для удобства, будет не лишним задать переменные окружения:

CROSS_COMPILE=/opt/toolchains/riscv64-RV64GC-linux-glibc/1.9.8/bin/riscv64-rv64gc-linux-gnu-

Которые обычно используются в Make-файлах U-Boot или ядра Linux.

Для самостоятельной сборки toolchain-а, необходимо получить срез репозитория toolchains, например,

$ svn co svn://radix.pro/radix/toolchains/trunk toolchains

и выполнить команду make в соответствующем каталоге:

$ cd toolchains/products/RK358X-glibc/1.9.8
$ make -j8

Напомним здесь, что перед сборкой необходимо подготовить каталог для инсталляции toolchain-а так, как это описано в разделе, посвященном загрузке toolchain-ов с нашего FTP-сервера.

Source Code

Для создания образа Radix.Linux мы используем собственный репозиторй исходных кодов ядра Linux. Все дело в том, что компания Rockchip, наверное, в первую очередь занимается поддержкой производителей коммерческого железа и не обращает внимания на Linux-сообщество. Поэтому практически все производители плат для разработчиков имеют собственные репозитории ядра Linux.

Так, напрмер, компания Orange Pi для своих плат предлагает репозиторий orangepi-build, где для сбоки ядра предлагается код linux-orangepi версии 5.10.110, собрать который современной версией GCC практически невозможно. Прежде чем добиться нормальной сборки приходится наложить огромное количество патчей только для того, чтобы код соответствовал современным стандартам.

Для сборки дистрибутива Debian используется репозиторий Joshua Riek-а, в котором, в отличие от linux-orangepi, уделяется большое внимание другим платам и код, касающийся SoC RK3588, значительно отличается.

Вообще Joshua Riek-у надо отдать должное, ведь он работает над портированием кода Rockchip в свежую ветку 6.6.y mainline-ядра Linux. Кроме того, компания Collabora делает огромный вклад и публикует статус своих наработок на странице mainline-status.

Таким образом, ждать нормальной поддержки SoCs RK3588 в mainline-ядре придется весьма долго и сейчас лучше оставаться на старой версии 5.10.110.

U-Boot

Для сборки загрузчика лучше всего использовать код из репозитория u-boot-rockchip. Где тегом u-boot-rockchip-20231024 отмечен срез, обеспечивающий поддержку SPI Nor Flash XM25QU128C. Данная микросхема распаяна на плате и может служить для размещения, как загрузчика U-Boot, так и efi-загрузчика EDK II.

Сборка U-Boot описана в Make-файле системы Radix.Linux. Самостоятельно собрать загрузчик можно следующим образом:

git clone https://source.denx.de/u-boot/custodians/u-boot-rockchip.git
cd u-boot-rockchip
git archive --format=tar --prefix=u-boot-rockchip-2023.10/ u-boot-rockchip-20231024 | \
    xz >../u-boot-rockchip-2023.10.tar.xz
cd ..
rm -rf u-boot-rockchip
tar xJvf u-boot-rockchip-2023.10.tar.xz

git clone https://github.com/rockchip-linux/rkbin.git
cd rkbin
git archive --format=tar --prefix=rkbin-20230519/ d6ccfe401ca84a98ca3b85c12b9554a1a43a166c | \
    xz >../rkbin-20230519.tar.xz
cd ..
rm -rf rkbin
tar xJvf rkbin-20230519.tar.xz

cd u-boot-rockchip-2023.10

make orangepi-5-rk3588s_defconfig
make BL31=../rkbin-20230519/bin/rk35/rk3588_bl31_v1.38.elf \
     ROCKCHIP_TPL=../rkbin-20230519/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.11.bin \
  CROSS_COMPILE=/opt/toolchains/aarch64-RK358X-linux-glibc/1.9.8/bin/aarch64-rk358x-linux-gnu-

cd ..

В результате, в каталоге u-boot-rockchip-2023.10, будут получены два файла: idbloader.img и u-boot.itb. На SD-карту данные файлы записываются по фиксированным адресам следующим образом:

# dd if=idbloader.img of=/dev/sdh bs=512 seek=64
# dd if=u-boot.itb of=/dev/sdh bs=512 seek=16384

Где имя устройства /dev/sdh следует заменить на имя, соответствующее подключеной SD-карте.

Пользователям системы Radix.Linux нет необходимости самостоятельно заботиться о порядке размещения данных на диске. Как мы говорили в разделе Boot Images, для записи загрузочного образа достаточно получить свежие файлы с FTP сервера, например, из каталога 1.9.383/rk358x-glibc/orange-pi5 и выполнить две следующие операции:

# cat orange-pi5.boot-records orange-pi5.ext4fs > SDHC.img 
# dd if=SDHC.img of=/dev/sdh

Здесь имя устройства /dev/sdh следует заменить на имя, соответствующее подключеной SD-карте.

Оставшееся место на диске можно распределить с помощью утилиты fdisk, например, создав дополнительный раздел для размещения домашних каталогов пользователей.

Более подробную информацию о создании загрузочных образов Radix.Linux, а также о настройке системы после первого запуска, можно получить на страницах Download и Setup.

EDK II

Поскольку на плате Orange Pi 5 распаяна микросхема XM25QU128C и, кроме того, есть разъем для подключения NVMe диска, мы не могли оставить в стороне возможность установки EDK II.

Существует специальный репозиторий edk2-rk3588, в котором ведется работа по поддержанию таких устройств, как Orange Pi 5/5B/5+, Radxa ROCK 5A/5B и многих других плат на базе семейства SoCs от компании Rockchip.

Получение кода EDK II и его сборка не представляет большой сложности:

git clone https://github.com/edk2-porting/edk2-rk3588.git
cd edk2-rk3588
git checkout -b v0.9.1.1 e9f0d3363e7db645e84a979542cc96b487d05f01

git submodule update --init --recursive

CROSS_COMPILE=/opt/toolchains/aarch64-RK358X-linux-glibc/1.9.8/bin/aarch64-rk358x-linux-gnu- \
./build.sh --device orangepi-5 \
           --skip-rootfs-gen

В результате будет получен образ RK3588_NOR_FLASH.img, который, для начала, можно опробовать на примере загрузки с SD-карты:

# dd if=RK3588_NOR_FLASH.img of=/dev/sdh

и уже затем, прошить его на микросхему XM25QU128C.

Существует несколько способов записи EDK II. Во-первых, это можно сделать на работающей системе Radix.Linux с помощью утилиты flashcp:

/sbin/flashcp RK3588_NOR_FLASH.img /dev/mtd0

Во-вторых, это можно сделать с помощью U-Boot, если разместить образ в файловой системе на загрузочной SD-карте.

Допустим, что в каталоге /boot/edk2/, в первом разделе с файловой систмой Ext4, мы имеем образ EDK II с именем spi-flash.image. Тогда остановив загрузку U-Boot с помощью клавиши <Space>, мы можем осуществить запись следующим образом:

orange-pi5#
orange-pi5# sf probe
SF: Detected XM25QU128C with page size 256 Bytes, erase size 4 KiB, total 16 MiB

orange-pi5# load mmc 0:1 ${kernel_addr_r} /boot/edk2/spi-flash.image
7012864 bytes read in 597 ms (11.2 MiB/s)

orange-pi5# sf erase 0 +${filesize}
SF: 7016448 bytes @ 0x0 Erased: OK

orange-pi5# sf write ${kernel_addr_r} 0 ${filesize}
device 0 offset 0x0, size 0x6b0200
SF: 7012864 bytes @ 0x0 Written: OK

Таким образом, с помощью EDK II, мы получаем возможность загружать операционную систему с NVMe диска. Причем на NVMe диске нет необходимости держать загрузчик в неразмеченном пространстве, и мы вправе создавать на диске разделы так, как мы привыкли делать на обычных персональных компьютерах.

System Setup

Если использование NVMe диска не предполагается, то пользователю системы Radix.Linux достаточно загрузить образы: orange-pi5.boot-records и orange-pi5.ext4fs из каталога orange-pi5 на свою машину, записать обраы на SD-карту:

# cat orange-pi5.boot-records orange-pi5.ext4fs > SDHC.img 
# dd if=SDHC.img of=/dev/sdh

и выполнить шаги, описанные в разделе Post Install.

Если же на плате установлен NVMe диск, то после загрузки с SD-карты, от имени пользователя root можно инсталлировать систему так, как показано в разделе Setup.

По окончании инсталляции надо остановить систему командой poweroff, выключить питание, извлечь SD-карту и снова включить питание. Посмотреть на возможности EDK II можно по кнопке <F2>, если не останавливать загрузчик, то он автоматически передаст управление загрузчику GRUB, который, в свою очередь, передаст управление ядру Linux.


В заключение, необходимо отметить, что SoC RK3588s имеет весьма внушительные возможности.

ScreenShot Orange Pi5
Fig.1. X on the Orange Pi 5

Здесь можно комфортно работать в LIbreOffice, вести разработку собственных программ с помощью: Qt Creator, Glade, Cambalache, просматривать Internet используя Firefox, Chromium, а также обмениваться сообщениями посредством Thunderbird и Dino. Одним словом, Orange Pi 5 можно использавать почти как обычный персональный компьютер или домашний сервер.