Недавно компания OrangePi обновила линейку одноплатных компьютеров Orange Pi 5/5B/5+, распаяв на платах 32GB LDDR4 RAM. Однако данные платы вполне прилично работают и с меньшим объемом памяти на борту, а наличие SPI Nor Flash и возможность подключения NVMe диска делают эти платы достойными конкурентами среди одноплатных устройств.

Нас заинтересовал первый образец серии 5/5B/5+, а именно Orange Pi 5, на предмет того, как на данном устройстве поведет себя EDK II и можно ли его использовать так, как мы привыкли работать с обычными ПК.

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

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

U-Boot

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

Самостоятельно собрать загрузчик можно следующим образом:

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-карте.

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. Во-первых, это можно сделать на работающей системе 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 диске нет необходимости держать загрузчик в неразмеченном пространстве, и мы вправе создавать на диске разделы так, как мы привыкли делать на обычных персональных компьютерах.


Теперь, если мы разметим диск, например, следующим образом:

/sbin/fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 238.47 GiB, 256060514304 bytes, 500118192 sectors
Disk model: NXM-256 2242                            
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: C50F960E-227F-6A4D-A6C8-78553D0C0822

Device             Start       End   Sectors   Size Type
/dev/nvme0n1p1      2048    526335    524288   256M EFI System
/dev/nvme0n1p2    526336 168298495 167772160    80G Linux filesystem
/dev/nvme0n1p3 168298496 467913911 299615416 142.9G Linux filesystem
/dev/nvme0n1p4 467914752 500117503  32202752  15.4G Linux swap

и в каталоге /efi/boot/ на первом разделе разместим загрузчик bootaa64.efi, то для загрузки операционной системы нам останется только отредактировать grub.cfg файл, который располагается в корневой файловой системе в каталоге /boot/grub/.

Для системы, работающей на плате Orange Pi 5, grub.cfg может выглядеть, например, следующим образом:

set menu_color_normal=black/light-gray
set menu_color_highlight=white/light-gray
set background_color=black

set timeout=5

font '/boot/grub/fonts/dejavusansmono.pf2'
loadfont dejavusansmono

menuentry 'Radix cross Linux' {
  set root_uuid=491dab81-2ec5-4dd4-83dc-626dfbabcb0f
  set part_uuid=0b5eaaf9-64c5-9f4c-9683-7305368f52e2

  insmod gzio
  insmod xzio
  insmod part_gpt
  insmod ext2

  search --set=root --fs-uuid $root_uuid
  devicetree ($root)/boot/rockchip/rk3588s-orangepi-5.dtb
  linux ($root)/boot/Image root=PARTUUID=$part_uuid ro rootwait console=ttyS2,1500000n8 console=tty1
}

Здесь, значение переменной root_uuid соответствует UUID корневой файловой системы, а значение переменной part_uuid равно UUID раздела, на котором расположена эта файловая система.


Опробовать результат данной работы можно с помощью готовых образов операционной системы. Для этого надо загрузить файлы 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

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

Загрузив Orange Pi 5 с SD-карты, вы можете прошить собственноручно собранный EDK II или установить систему Radix cross Linux на NVMe диск с помощью утилиты setup.

При последующем старте системы с NVMe диска вы увидите EDK II в работе,

Fig.1 EDK II
Fig.1 EDK II

а по клавише F2 сможете рассмотреть интерфейс и возможности Tianocore, который собран специально для SoC RK3588s. Далее в работу вступит загрузчик GRUB:

Fig.2. GRUB
Fig.2. GRUB

который, в свою очередь, передаст управление ядру Linux.

Комментарии (29)


  1. DungeonLords
    22.11.2023 01:39
    +1

    А что с драйверами для видеокарты?


    1. evgeny_72
      22.11.2023 01:39

      4х канала только на pciex3. Для запуска видеокарты надо от 8 каналов и выше. В инструкции на сайте всё написано.


      1. KivApple
        22.11.2023 01:39

        В Thunderbolt 4 pci линии, но как-то через него подключают egpu к ноутбукам.

        Майнеры подключают видеокарты через переходники на pci x1 вообще (потому что на материнских платах часто только один слот x8-x16, а они пихают в одну дешевую материнку 3-6 видеокарт).

        Просто производительность в задачах где нужно гонять много данных между cpu и gpu страдают. Типа в играх будет больше прогрузок. Но видеокарте не нужны все линии pci, которые у неё есть, чтобы работать.


      1. Xenotester
        22.11.2023 01:39

        8 каналов это ограничение дистрибутива или что ?

        Так как rx6400 и rx6500 имеют только 4 линии, m2/oculink egpu переходники - только 4 линии, майнеры (и gpgpu энтузиасты раньше) подключают карты одной линией и ничего


    1. Johan_Palych
      22.11.2023 01:39
      +1

      1. rcl Автор
        22.11.2023 01:39

        Дело не в Mesa. Нужен kernel driver gpu/drm/pancsf https://www.collabora.com/news-and-blog/news-and-events/pancsf-a-new-drm-driver-for-mali-csf-based-gpus.html https://lore.kernel.org/dri-devel/20230201084832.1708866-1-boris.brezillon@collabora.com/

        Но его backport-ом в ядро 5.10.110 заниматься ни кто не будет по тому, что ядро старое и регуляторы там инициируются совершенно иначе чем в 6.6.y.

        А поддержка RK3588 в 6.6.y тоже будет не скоро ,так как там еще нет даже dw_hdmi от rockchip, то есть на данный момент только vt100 и никаких мониторов [https://gitlab.collabora.com/hardware-enablement/rockchip-3588/notes-for-rockchip-3588/-/blob/main/mainline-status.md].

        Поэтому все дистрибьюторы остаются на ядре 5.10 и ждут Joshua Riek-а.


  1. SabMakc
    22.11.2023 01:39
    +4

    На мой взгляд, статье сильно не хватает введения.

    Нас заинтересовал первый образец серии 5/5B/5+, а именно Orange Pi 5, на предмет того, как на данном устройстве поведет себя EDK II и можно ли его использовать так, как мы привыкли работать с обычными ПК.

    • Кто такие "мы"? Статья в личном блоге, а не в корпоративном.

    • Что такое EDK II, зачем он нужен и какие проблемы решает?

    • Аналогично и с toolchain - начинаем установку с него, но для чего он нужен - непонятно.

    И в конце-концов, так и не раскрыта тема - можно ли использовать Orange Pi 5 в роли обычного ПК, как мы привыкли работать с обычными ПК? Самый интересный вопрос на самом деле...


    1. Aelliari
      22.11.2023 01:39
      +2

      Что такое EDK II

      Это кроссплатформенная имплементация UEFI.

      Нужен чтобы уйти от U-boot, в перспективе и заменить описание железа через dtb на описание через ACPI что даст полную свободу в установке дистрибутивов, ОС, гипервизоров

      можно ли использовать Orange Pi 5 в роли обычного ПК

      Под linux - да, и даже без EDK II, с оговоркой про сценарии использования

      Аналогично и с toolchain - начинаем установку с него, но для чего он нужен - непонятно

      Необходим для сборки на другой платформе, например x86-64. Все таки rk3588 - arm (если точнее aarch64)


    1. romxx
      22.11.2023 01:39

      можно ли использовать Orange Pi 5 в роли обычного ПК

      Цена обессмысливает. Времена "компьютера, размером с кредитку и за 20 долларов" давно кончились.


  1. rcl Автор
    22.11.2023 01:39

    В статьях принято вести диалог не от себя лично, а говорить мы (это ГОСТ и мировая практика).

    EDK II (Tianocore) - знают все (мы давали ссылку на сайт). Можете считать, что это замена проприетаного EFI BIOS. Именно его наличие позволяет работать и инсталлировать различные ОS так же как на обычном ПК.

    Перегружать статью большим количеством технических характеристик мы не стали по тому, что их и так полно в сети Internet.

    Здесь же Туториал среднего уровня для быстрого прочтения и добавления в закладки (чтобы потом можно было быстро найти репозитории исходников и вспомнить как собрать EDK2).


    1. Kitsok
      22.11.2023 01:39

      Всё-таки я не понимаю, зачем тут одновременно U-Boot и EDK. Хотите отдать в ось ACPI? Впишите эту функциональность в U-Boot или загрузите Линукс прямо из UEFI.

      Сейчас у вас три загрузчика подряд выполняются, и это ещё без ARM trusted firmware. Куча работы, куча кода, и зачем?


      1. rcl Автор
        22.11.2023 01:39

        Два загрузчика: EDK2 и GRUB. ARM Trusted Firmware (BL1 и ddr init) в составе U-Boot. TEE (BL2) мы не включили в U-Boot по тому, что с ним ядро не загружается и надо танцевать вокруг ядра (это может привести к несовместимости). Когда RKBIN будет доработан, то включим и TEE.

        U-Boot нужен для первого старта, когда SPI Nor Flash пустая. Тогда с помошью U-Boot, на загрузочной SD-карте, мы можем записать EDK2 на flash XM25QU128C.


    1. SabMakc
      22.11.2023 01:39

      Эм... В научных работах возможно так и принято (но в них и понятен контекст для местоимения). А в статьях "для простых людей", на мой взгляд, должно более прозрачно прослеживаться местоимение из контекста, или вообще использоваться обезличенные выражения. Но да ладно, это так, скорее придирка была - особенность стилистики текста.

      Я согласен, что тут туториал среднего уровня - быстро прочитал и в закладки (если надо, скорее всего, потом через поиск материал искаться будет). Но это справедливо только для людей "сильно в теме".
      И на узкоспециализированном профильном ресурсе - я бы сказал "ОК, нет вопросов". Или для документации EDK II / Tianocore - отличная статья, спору нет.

      Но в данном случае, для хабра... Не знаю, не знаю... Лично для меня, сработало введение - привлекло внимание, заставило пройти под кат... Интересно стало что за зверь такой "Orange Pi 5" и с чем его едят...
      А внутри - просто инструкция "как установить EDK II" из множества консольных команд. Которые дают дают пример "как это сделать", но не дают понимания "что мы делаем" и "зачем мы это делаем".

      И речь не о технических характеристиках (хотя и они были бы не лишними, если не хотите загромождать статью - их можно убрать под спойлер). Я именно про описание решаемой проблемы, подхода к решению проблемы и т.д. Тут достаточно было бы одного-двух предложений (или абзацев) просто для погружения в контекст.


      1. rcl Автор
        22.11.2023 01:39
        -2

        Что значит "простые люди"? Неужели с ними надо вести себя по-другому? Я считаю наоборот. Люди учатся и учиться им надо на хороших примерах. Меня, например, учили достойные люди и ко мне как студенту обращались на ВЫ и прививали ответственность перед читателями.

        Я не могу "Я-кать" в письменной форме!


        1. SabMakc
          22.11.2023 01:39

          "Простые люди" в данном случае - это не читатели научной литературы подразумеваются. Я-кать в письменной форме - зачастую не лучший вариант, согласен. Поэтому обезличенные обращения - рабочий выход, на мой взгляд. Но опять же - это особенности стилистики текста. Пишите как Вам удобно и привычно - в этом проблемы нет.

          Про "мы" вопрос даже не к стилистике был, а чтобы понять "а кто такой автор статьи и с какой позиции эту статью следует рассматривать". Все-таки одно дело - личные впечатления о продукте, другое - статья в корпоративном блоге (или статья о своем же продукте).


          1. rcl Автор
            22.11.2023 01:39
            +1

            Многие годы реклама, даже собственных разработок, здесь была запрещена. Да и я не собирался рекламировать себя и свою работу. Я просто хотел рассказать, что современные SBC уже почти готовы для Tianocore, дать источники кода и пример сборки для Orange Pi 5 на базе SoC RK3588s.

            Рассчитывал я на то, что слова Toolchain, U-Boot, EDK2 понятны читателям и им не надо объяснять то, что они и так знают лучше меня. А те, кто еще не в курсе, могут записать готовые образы на SD-карту и посмотреть, как это работает, и быть может заинтересоваться загрузчиками и разработкой программ в среде GNU Linux (c практики начинается всё). Кроме того, я не скрываюсь и готов отвечать на любые вопросы, связанные с моей работой.

            На вопрос "а кто такой автор и с каких позиций он здесь разговаривает" могу ответить вам лично. Я делаю RcL и стремлюсь к тому, чтобы он работал на множестве SBC от китайских производителей, чтобы пользователь имел возможность инсталлировать систему достаточно простым способом и, в тоже время был в курсе того, как работает система. Работаю один (в свободное от работы время).


      1. rcl Автор
        22.11.2023 01:39

        "Лично для меня, сработало введение - привлекло внимание, заставило пройти под кат... Интересно стало что за зверь такой "Orange Pi 5" и с чем его едят..." - это хорошо! Заходите и ставьте систему RcL, там и посмотрите на практике.


    1. Johan_Palych
      22.11.2023 01:39
      +1

      Исходник статьи взят здесь?
      https://radix.pro/devices/orange-pi5/


      1. rcl Автор
        22.11.2023 01:39

        Практически. Только я убрал лишнее, чтобы получилась простая инструкция и ссылки на память о том, где лучше брать код.


      1. SabMakc
        22.11.2023 01:39

        Спасибо! Лично мне статья по ссылке показалась намного более целостной.


        1. Johan_Palych
          22.11.2023 01:39

          Raxda даже RKDevTool запилили для прошивки SPI NOR flash(ROCK 5A-RK3588S, ROCK 5B-RK3588)
          Install the bootloader to the SPI NOR flash. completely clear the spi flash - ценная инфа
          https://wiki.radxa.com/Rock5/install/spi
          Через USB OTG port на Linux/macOS/Windows. Не проверял. Возможно подойдет для Orange Pi 5/5 plus
          https://wiki.radxa.com/Rock5/install/rockchip-flash-tools
          Пилят для установки Windows 11 Arm:
          https://worproject.com/guides/how-to-install/on-rockchip
          https://github.com/worproject/Rockchip-Windows-Drivers#hardware-support-status


          1. rcl Автор
            22.11.2023 01:39

            Да. EDK2 весьма актуален. Поэтому я старался дать людям информацию о том, как самостоятельно собрать образ EDK и прошить его безо всяких rkdeveloptool. Согласитесь, что работая в среде GNU Linux не каждому будет удобно пользоваться программами для Windows. А шить можно либо с помощью flashcp в /dev/mtd0, либо с помощью dd в /dev/mtdblock0.

            Главное в том, что Radxa делает все для запуска Windows на RK3588!

            Я еще не пробовал экспериментировать с образами Windows, может быть у Вас дойдут руки до такого рода экспериментов... ну или, хотябы попробовать с помощью EDK2 загрузить какой-нибудь сторонний образ LiveCD (Fedora, Debian, Ubuntu не важно) с USB-flash (главное, чтобы это был образ с EFI-загрузчиком, а не с U-Boot).


            1. rcl Автор
              22.11.2023 01:39

              Только вот ROCK 5B стоит 25000 руб что дороговато для устройства которое не поддерживается в коде mainline-ядра и для которого еще не имплементировали свободный panfrost драйвер GPU Mali G610.


              1. Johan_Palych
                22.11.2023 01:39

                Вы используете для прошивки mtd-utils? Как грамотно сделать completely clear QSPI Nor FLASH 16MB на Orange Pi5. Не хочу граблей.(flash_eraseall)
                ROCK 5B не интересует, но форум у них хороший.
                Прицениваюсь к ORANGE PI 5 в комплекте: 8GB RAM, usb-свисток WiFi and BT4.0, Cooling and for Protection for Orange Pi 5, 64GB Card от 10-13 тыс. р. с бесплатной доставкой
                M.2-SATA-2242 NVMe SSD на 128GB 1000-1200 р. с бесплатной доставкой


                1. rcl Автор
                  22.11.2023 01:39
                  +1

                  Свисток у них не берите, лучше ASUS BT500. Памяти берите 16G. SD-карту по возможности быструю, например Lenovo сейчас есть на 64g за 2000р. Теперь про очистку XM25QU128C:

                  Всю флешь чистить не обязательно. Если чистить с пом U-Boot то никаких проблем

                  sf erase 0 +${filesize}

                  вообще с завода идут платы с чистой флешкой. flash_eraseall - тоже можно, а можно приготовить пустой файл:

                  #!/bin/sh
                  #
                  # Create empty image:
                  #
                  image_file=spi-flash.image
                  image_size_kb=16384
                  
                  dd if=/dev/zero bs=1k count=${image_size_kb} | tr '\000' '\377' > ${image_file}
                  

                  и записать его на флешку любым способом. можно dd if=spi-flsh.image of=/dev/mtdblock0, можно flashcp spi-flash.image /dev/mtd0. Просто mtd0 - char device, a mtdblock0 - block device.

                  NVMe я беру самые дешевые китайские, например KingSpec на алибабе.


                  1. Johan_Palych
                    22.11.2023 01:39

                    Спасибо! Ценная инфа. Был убийственный опыт с Mobile NAND Flash(старые мобильники)
                    Я за Orange Pi eMMC 32 ГБ/64 Гб(не рекламирую, для примера)
                    Несколько SDCard уже сдохло.
                    Для SDCard желательно - Minimizing disk access:
                    https://fenidik.blogspot.com/2010/03/ext4-disable-journal.html
                    mkfs.ext4 -O "^has_journal" /dev/sdXX
                    For more performance add fstab opions: data=writeback,noatime,nodiratime
                    Неплохо использовать - mkfs.f2fs make file system for f2fs NAND flash drive special
                    https://www.real-world-systems.com/docs/mkfs.f2fs.1.html


                    1. select26
                      22.11.2023 01:39

                      Так весь пост про то, что вам ни EMMC, ни SDCARD вообще не нужна!
                      Загрузчик в NOR Flash, а система на жёстком диске.
                      Как в PC


  1. kalbas
    22.11.2023 01:39

    Офигеть конечно, 32ГБ, в то время пока некоторые даже приличные ноуты имеют распаянными лишь 16ГБ.


    1. Frosst
      22.11.2023 01:39
      +1

      О, 16 это перебор. Вот к примеру макбук про за оверпрайс с 8 гигами