Обзор и тестирование Orange Pi 4 LTS на SoC Rockchip RK3399 [обновлено 29.09.2024]

Рассмотрим одноплатный компьютер Orange Pi 4 LTS с точки зрения поддержки аппаратного обеспечения. Выясним, на каком уровне поддерживаются образы ОС, проверим все ли устройства одноплатника задействованы в ОС. Протестируем в качестве мультимедиа центра и игровой платформы. Проверим на сколько удобно использовать компьютер в качестве офисного ПК.

Оглавление

  1. Постановка задачи
  2. Конфигурация системы
  3. Образы ОС
  4. Запись образа ОС и первый запуск
  5. Начальная настройка и обновление ОС
  6. Системная информация
  7. Список устройств
  8. Проверка GPU, аудио, Wi-Fi, Gigabit Ethernet, Bluetooth, USB
  9. Тесты производительности
  10. Энергопотребление
  11. Журнал сообщений
  12. Вывод
  13. Литература

Постановка задачи

Для одноплатного компьютера Orange Pi 4 LTS выполнить следующие задачи:

  • Рассмотреть уровень поддержки образов ОС;
  • Записать образ ОС и обновить систему;
  • Отобразить системную информацию;
  • Получить список поддерживаемого оборудования;
  • Протестировать GPU, аудио, Wi-Fi, Gigabit Ethernet, Bluetooth, USB;
  • Выполнить тесты оценки производительности.

Конфигурация системы

Одноплатный компьютер Orange Pi 4 LTS на SoC Rockchip RK3399 с 4 ГБ ОЗУ и 16 ГБ eMMC (существует еще редакция с 3 ГБ ОЗУ). Компьютер необходимо запитывать блоком питания 5V/4A на порт USB Type-C (согласно документации должно быть достаточно 3A, но это не точно). Если использовать образ без поддержки GPU, то можно использовать БП меньшей мощностью. Для питания нельзя использовать контакт 5V на 26-контактном GPIO разъеме. На процессоре установлен алюминиевый радиатор с вентилятором.

К плате подключены следующие периферийные устройства:

  • Карта памяти microSD SAMSUNG PRO PLUS на 128 ГБ;
  • HDMI-монитор;
  • USB беспроводная мини-клавиатура Rii X1;
  • USB Wi-Fi адаптер EDUP на базе чипа Intel AX210 5G.

Подробно о подключенных периферийных устройствах, пост Аксессуары для одноплатных компьютеров, microSD, FTDI адаптер, HDMI Video Capture, USB Wi-Fi, мини-клавиатура Rii X1.

На Orange Pi 4 LTS чип Wi-Fi CDW.20U5622-00 компании CdTech в версии ядра Linux 6.x на частоте 5 ГГц не подключается к точкам доступа, хотя обнаружение работает. К точкам доступа на 2.4 ГГц подключается успешно, показывает хорошую скорость и высокий уровень сигнала по сравнению с предыдущими версиями образов ОС. Поэтому для обеспечения максимальной скорости подключен адаптер USB Wi-Fi EDUP.

Образы ОС

Образы ОС поставляются сообществом Armbian, официальным разработчиком платы Shenzhen Xunlong Software, и третьими лицами. На странице Загрузок ресурсов Orange Pi перечислены официальные образы ОС: Ubuntu, Debian, Android.

Официальные образы

Последний официальный образ Ubuntu на ядре Linux 5.18 датирован августом 2022 г. Debian на ядре Linux 5.10 датирован так же августом 2022 г. Android версии 12 датирован апрелем 2023 г. Самостоятельно собрать образ из официального репозитория GitHub orangepi-xunlong/orangepi-build можно в Ubuntu 22.04 по следующей инструкции:

apt-get update & apt-get upgrade
apt-get install -y git
git clone --recurse-submodules -j8 --force https://github.com/orangepi-xunlong/orangepi-build.git
cd orangepi-build
./build.sh

На 09.09.2024 для сборки доступен образ рекомендуемой версии Ubuntu 22.04 LTS ядро Linux 5.10.160, который не удалось собрать.

Armbian

На странице Orange Pi 4 and LTS — Armbian представлены образы, построенные на базе дистрибутивов:

  • Ubuntu
  • Debian.

Образы собирают в трех редакциях:

  • Gnome, XFCE MESA/VPU с операционной оболочкой, поддержкой аппаратного GPU;
  • Server/CLI серверный вариант с командной строкой;
  • Minimal/IOT аналогичен серверному варианту, максимально облегчен.

Для тестирования взят образ:

Armbian 24.8.1 Noble Gnome
MESA / VPU
Kernel: 6.6.44, Size: 1.4 GB, Release date: Aug 10, 2024
Образ основан на Ubuntu 24.04 LTS (Noble Numbat)
Файл: Armbian_24.8.1_Orangepi4-lts_noble_current_6.6.44_gnome-kisak_desktop.img.xz

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

Запись образа ОС и первый запуск

Проще всего образ записать на карту памяти microSD используя утилиты balenaEtcher или usbimager. В некоторых случаях balenaEtcher некорректно записывает образы на microSD, в этом случае используйте usbimager.

После первоначальной инициализации Armbian, необходимо ответить на вопросы настройки системы, систему можно перенести на eMMC память утилитой  armbian-config  или  nand-sata-install , запускать с правами  sudo .

Начальная настройка и обновление ОС

Отключение режима сна

В настойках GNOME по умолчанию включен режим засыпания, после которого невозможно вывести из сна одноплатный компьютер, такой как Orange Pi 4 LTS по причине отсутствия кнопки питания. Поэтому первым делом отключим режим сна в файле конфигурации  nosuspend.conf  . Создадим каталог и конфигурационный файл:

sudo mkdir -p /etc/systemd/sleep.conf.d/
sudo mcedit /etc/systemd/sleep.conf.d/nosuspend.conf

В файл  nosuspend.conf  вставим следующий текст:

[Sleep]
AllowSuspend=no
AllowHibernation=no
AllowSuspendThenHibernate=no
AllowHybridSleep=no

Сохраним изменения  <F2> , и выйдем из редактора  <F10> .

Затем перезапустим ОС командой:

sudo reboot now

После настройки сетевого подключения выполним команды обновления ОС:

sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade

Перезапустим ОС.

И тут нас ожидает сюрприз, мы поломали систему. На экране появится надпись: «Oh no! Something has gone wrong».

GNOME Remote Desktop
Сообщение GNOME о поломке системы

Но все поправимо, просто обновление ломает зависимости пакетов. Для исправления необходимо зайти по SSH и выполнить команды:

sudo apt -f install
sudo apt upgrade

Затем перезапустить ОС.

После перезагрузки, система штатно загрузится.

Подробнее об этой проблеме в треде r/Ubuntu на reddit «Oh no! Something has gone wrong » message while updating to 24.04.

Системная информация

После обновления отобразим системную информацию:

root@orangepi4-lts:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS"

root@orangepi4-lts:~# uname -a
Linux orangepi4-lts 6.6.47-current-rockchip64 #1 SMP PREEMPT Mon Aug 19 04:04:32 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux

root@orangepi4-lts:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Armbian 24.8.2 noble
Release:        24.04
Codename:       noble

Orange Pi 4 LTS Review and Benchmarks
Удаленный вход по SSH

Orange Pi 4 LTS Review and Benchmarks
Запуск утилиты htop

Orange Pi 4 LTS Review and Benchmarks
Запуск утилиты neofetch

Orange Pi 4 LTS Review and Benchmarks
Запуск утилиты screenfetch

Orange Pi 4 LTS Review and Benchmarks
Системная информация GNOME

Список устройств

Отобразим список оборудования с помощью команд ls*.

lscpu – выдает информацию о процессоре и его составляющих.

lscpu
root@orangepi4-lts:~# lscpu
Architecture:             aarch64
  CPU op-mode(s):         32-bit, 64-bit
  Byte Order:             Little Endian
CPU(s):                   6
  On-line CPU(s) list:    0-5
Vendor ID:                ARM
  Model name:             Cortex-A53
    Model:                4
    Thread(s) per core:   1
    Core(s) per socket:   4
    Socket(s):            1
    Stepping:             r0p4
    CPU(s) scaling MHz:   29%
    CPU max MHz:          1416.0000
    CPU min MHz:          408.0000
    BogoMIPS:             48.00
    Flags:                fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
  Model name:             Cortex-A72
    Model:                2
    Thread(s) per core:   1
    Core(s) per socket:   2
    Socket(s):            1
    Stepping:             r0p2
    CPU(s) scaling MHz:   23%
    CPU max MHz:          1800.0000
    CPU min MHz:          408.0000
    BogoMIPS:             48.00
    Flags:                fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
NUMA:
  NUMA node(s):           1
  NUMA node0 CPU(s):      0-5
Vulnerabilities:
  Gather data sampling:   Not affected
  Itlb multihit:          Not affected
  L1tf:                   Not affected
  Mds:                    Not affected
  Meltdown:               Not affected
  Mmio stale data:        Not affected
  Reg file data sampling: Not affected
  Retbleed:               Not affected
  Spec rstack overflow:   Not affected
  Spec store bypass:      Vulnerable
  Spectre v1:             Mitigation; __user pointer sanitization
  Spectre v2:             Vulnerable
  Srbds:                  Not affected
  Tsx async abort:        Not affected

lshw – список аппаратных устройств. Утилита общего назначения, которая сообщает подробную и краткую информацию о нескольких различных аппаратных устройствах, таких как процессор, память, диск, контроллеры usb, сетевые адаптеры и т.д.

lshw
apt-get install lshw
root@orangepi4-lts:~# lshw
orangepi4-lts
    description: Computer
    product: OrangePi 4 LTS
    serial: XXXXXXXXXXXXXXXX
    width: 64 bits
    capabilities: smp cp15_barrier setend swp tagged_addr_disabled
  *-core
       description: Motherboard
       physical id: 0
     *-cpu:0
          description: CPU
          product: cpu
          physical id: 0
          bus info: cpu@0
          size: 1416MHz
          capacity: 1416MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
     *-cpu:1
          description: CPU
          product: cpu
          physical id: 1
          bus info: cpu@1
          size: 1416MHz
          capacity: 1416MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
     *-cpu:2
          description: CPU
          product: cpu
          physical id: 2
          bus info: cpu@2
          size: 1416MHz
          capacity: 1416MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
     *-cpu:3
          description: CPU
          product: cpu
          physical id: 3
          bus info: cpu@3
          size: 1416MHz
          capacity: 1416MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
     *-cpu:4
          description: CPU
          product: cpu
          physical id: 4
          bus info: cpu@4
          size: 1800MHz
          capacity: 1800MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
     *-cpu:5
          description: CPU
          product: cpu
          physical id: 5
          bus info: cpu@5
          size: 1800MHz
          capacity: 1800MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
     *-cpu:6 DISABLED
          description: CPU
          product: cpu-map
          physical id: 6
          bus info: cpu@6
     *-cpu:7 DISABLED
          description: CPU
          product: idle-states
          physical id: 7
          bus info: cpu@7
     *-memory
          description: System memory
          physical id: 8
          size: 3860MiB
  *-usbhost:0
       product: EHCI Host Controller
       vendor: Linux 6.6.47-current-rockchip64 ehci_hcd
       physical id: 1
       bus info: usb@1
       logical name: usb1
       version: 6.06
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
  *-usbhost:1
       product: Generic Platform OHCI controller
       vendor: Linux 6.6.47-current-rockchip64 ohci_hcd
       physical id: 2
       bus info: usb@2
       logical name: usb2
       version: 6.06
       capabilities: usb-1.10
       configuration: driver=hub slots=1 speed=12Mbit/s
     *-usb
          description: Keyboard
          product: mini keyboard Consumer Control
          physical id: 1
          bus info: usb@2:1
          logical name: input1
          logical name: /dev/input/event1
          logical name: input1::capslock
          logical name: input1::compose
          logical name: input1::kana
          logical name: input1::numlock
          logical name: input1::scrolllock
          logical name: input4
          logical name: /dev/input/event4
          logical name: /dev/input/mouse0
          logical name: input5
          logical name: /dev/input/event6
          logical name: input6
          logical name: /dev/input/event8
          version: 1.06
          capabilities: usb-2.00 usb
          configuration: driver=usbhid maxpower=100mA speed=12Mbit/s
  *-usbhost:2
       product: xHCI Host Controller
       vendor: Linux 6.6.47-current-rockchip64 xhci-hcd
       physical id: 3
       bus info: usb@3
       logical name: usb3
       version: 6.06
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
     *-usb
          description: Generic USB device
          product: 802.11ac NIC
          vendor: Realtek
          physical id: 1
          bus info: usb@3:1
          version: 2.00
          serial: 123456
          capabilities: usb-2.00
          configuration: driver=rtw_8821cu maxpower=500mA speed=480Mbit/s
  *-usbhost:3
       product: xHCI Host Controller
       vendor: Linux 6.6.47-current-rockchip64 xhci-hcd
       physical id: 4
       bus info: usb@4
       logical name: usb4
       version: 6.06
       capabilities: usb-3.00
       configuration: driver=hub slots=1 speed=5000Mbit/s
  *-usbhost:4
       product: EHCI Host Controller
       vendor: Linux 6.6.47-current-rockchip64 ehci_hcd
       physical id: 5
       bus info: usb@5
       logical name: usb5
       version: 6.06
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
  *-usbhost:5
       product: Generic Platform OHCI controller
       vendor: Linux 6.6.47-current-rockchip64 ohci_hcd
       physical id: 6
       bus info: usb@6
       logical name: usb6
       version: 6.06
       capabilities: usb-1.10
       configuration: driver=hub slots=1 speed=12Mbit/s
     *-usb
          description: Keyboard
          product: 2.4G Mouse Consumer Control
          physical id: 1
          bus info: usb@6:1
          logical name: input10
          logical name: /dev/input/event10
          logical name: input2
          logical name: /dev/input/event2
          logical name: input2::capslock
          logical name: input2::compose
          logical name: input2::kana
          logical name: input2::numlock
          logical name: input2::scrolllock
          logical name: input7
          logical name: /dev/input/event5
          logical name: input8
          logical name: /dev/input/event7
          logical name: /dev/input/mouse1
          logical name: input9
          logical name: /dev/input/event9
          version: 2.00
          capabilities: usb-1.10 usb
          configuration: driver=usbhid maxpower=100mA speed=12Mbit/s
  *-usbhost:6
       product: xHCI Host Controller
       vendor: Linux 6.6.47-current-rockchip64 xhci-hcd
       physical id: 7
       bus info: usb@7
       logical name: usb7
       version: 6.06
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
  *-usbhost:7
       product: xHCI Host Controller
       vendor: Linux 6.6.47-current-rockchip64 xhci-hcd
       physical id: 8
       bus info: usb@8
       logical name: usb8
       version: 6.06
       capabilities: usb-3.00
       configuration: driver=hub slots=1 speed=5000Mbit/s
  *-mmc0
       description: MMC Host
       physical id: 9
       logical name: mmc0
     *-device
          description: SD/MMC Device
          product: AJTD4R
          vendor: Unknown (21)
          physical id: 1
          bus info: mmc@0:0001
          date: 02/2022
          serial: 1830795793
          capabilities: mmc
        *-interface:0
             physical id: 1
             logical name: /dev/mmcblk0rpmb
        *-interface:1
             physical id: 2
             logical name: /dev/mmcblk0
             size: 15634268160
             capabilities: partitioned partitioned:dos
             configuration: logicalsectorsize=512 sectorsize=512 signature=e1fb59e3
           *-volume
                description: EXT4 volume
                vendor: Linux
                physical id: 1
                logical name: /dev/mmcblk0p1
                version: 1.0
                serial: ea399633-d078-4988-a2dc-10a01b8a6c04
                size: 14GiB
                capacity: 14GiB
                capabilities: primary journaled extended_attributes large_files huge_files dir_nlink 64bit extents ext4 ext2 initialized
                configuration: created=2024-09-09 14:02:51 filesystem=ext4 lastmountpoint=/ modified=1970-01-01 03:00:06 mounted=2024-09-09 22:02:22 state=clean
  *-mmc1
       description: MMC Host
       physical id: a
       logical name: mmc1
     *-device
          description: SDIO Device
          physical id: 8800
          bus info: mmc@1:8800:1
          logical name: mmc1:8800:1
          serial: 0
          capabilities: sdio
  *-mmc2
       description: MMC Host
       physical id: b
       logical name: mmc2
     *-device
          description: SD Card
          product: FD4Q9
          vendor: Unknown (27)
          physical id: 1
          logical name: /dev/mmcblk2
          version: 3.0
          date: 09/2023
          serial: 177890848
          size: 119GiB (128GB)
          capabilities: sd partitioned partitioned:dos
          configuration: logicalsectorsize=512 sectorsize=512 signature=f346ffea
        *-volume
             description: EXT4 volume
             vendor: Linux
             physical id: 1
             logical name: /dev/mmcblk2p1
             logical name: /
             logical name: /var/log.hdd
             version: 1.0
             serial: 802000f1-110a-4152-90b2-09ec72009b6a
             size: 118GiB
             capacity: 118GiB
             capabilities: primary journaled extended_attributes large_files huge_files dir_nlink recover 64bit extents ext4 ext2 initialized
             configuration: created=2024-08-10 16:59:05 filesystem=ext4 label=armbi_root lastmountpoint=/ modified=2024-09-11 21:30:00 mount.fstype=ext4 mount.options=rw,noatime,errors=remount-ro,commit=120 mounted=2024-09-10 16:37:33 state=mounted
  *-sound:0
       description: rockchipes8316c
       physical id: c
       logical name: card0
       logical name: /dev/snd/controlC0
       logical name: /dev/snd/pcmC0D0c
       logical name: /dev/snd/pcmC0D0p
  *-sound:1
       description: hdmisound
       physical id: d
       logical name: card1
       logical name: /dev/snd/controlC1
       logical name: /dev/snd/pcmC1D0c
       logical name: /dev/snd/pcmC1D0p
  *-graphics
       product: rockchipdrmfb
       physical id: e
       logical name: /dev/fb0
       capabilities: fb
       configuration: depth=32 resolution=1920,1080
  *-input:0
       product: gpio-keys
       physical id: f
       logical name: input0
       logical name: /dev/input/event0
       capabilities: platform
  *-input:1
       product: rockchip-es8316c Headphones
       physical id: 10
       logical name: input12
       logical name: /dev/input/event11
  *-input:2
       product: adc-keys
       physical id: 11
       logical name: input3
       logical name: /dev/input/event3
       capabilities: platform
  *-network:0
       description: Ethernet interface
       physical id: 12
       logical name: end0
       serial: 32:d5:ad:01:97:47
       capacity: 1Gbit/s
       capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=st_gmac driverversion=6.6.47-current-rockchip64 link=no multicast=yes port=twisted pair
  *-network:1
       description: Wireless interface
       physical id: 13
       logical name: wlan0
       serial: a0:67:20:f1:c6:cf
       capabilities: ethernet physical wireless
       configuration: broadcast=yes driver=unisoc_wifi driverversion=6.6.47-current-rockchip64 multicast=yes wireless=IEEE 802.11
  *-network:2
       description: Wireless interface
       physical id: 14
       bus info: usb@3:1
       logical name: wlxe84e0687797d
       serial: e8:4e:06:87:79:7d
       capabilities: ethernet physical wireless
       configuration: broadcast=yes driver=rtw_8821cu driverversion=6.6.47-current-rockchip64 firmware=N/A ip=192.168.50.248 link=yes multicast=yes wireless=IEEE 802.11

lspci – список устройств PCI. Выдает список всех шин PCI, а также подробную информацию об устройствах, которые к ним подключены. Под эту категорию подпадают следующие устройства — адаптер vga, графическая карта, сетевой адаптер, порты usb, контроллеры sata и т.д.

В версии ядра Linux 6.x не работает. В случае работоспособности в ответе команды должны быть перечислены хабы устройств, например следующие:

lspci
root@orangepi:~# lspci
00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd RK3399 PCI Express Root Port
01:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATAController (rev02)
О проблеме работы PCI Issues PCIe-port not working on RK3399 #116

lsusb – подробный список шин и устройств USB. Показывает информацию о контроллерах usb и подробные сведения о подключенных к ним устройствах. По умолчанию выдается краткая информация. Для того, чтобы о каждом порте usb получить подробную информацию, используйте параметр  -v .

lsusb
root@orangepi4-lts:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 1997:2433 Shenzhen Riitek Technology Co., Ltd wireless mini keyboard with touchpad
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 0bda:c811 Realtek Semiconductor Corp. 802.11ac NIC
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 1ea7:0066 SHARKOON Technologies GmbH [Mediatrack Edge Mini Keyboard]
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

lsmod – выдает информации о загруженных модулях ядра Linux соответствующих устройств. Пользователь также может загрузить любой модуль с помощью команды insmod или modprobe или получить информацию о нем с помощью команды modinfo. Сами файлы модулей обычно расположены в директории  /lib/modules/<версия ядра> .

lsmod
root@orangepi4-lts:~# lsmod
Module                  Size  Used by
rfcomm                 73728  4
snd_seq_dummy          12288  0
snd_seq                73728  7 snd_seq_dummy
snd_seq_device         12288  1 snd_seq
algif_hash             12288  1
algif_skcipher         12288  1
af_alg                 20480  6 algif_hash,algif_skcipher
bnep                   28672  2
hci_uart              135168  1
btqca                  20480  1 hci_uart
btrtl                  28672  1 hci_uart
btintel                40960  1 hci_uart
btbcm                  20480  1 hci_uart
bluetooth             663552  32 btrtl,btqca,btintel,hci_uart,btbcm,bnep,rfcomm
sunrpc                483328  1
rtw88_8821cu           12288  0
rtw88_8821c            86016  1 rtw88_8821cu
rtw88_usb              20480  1 rtw88_8821cu
rtw88_core            143360  2 rtw88_8821c,rtw88_usb
mac80211              860160  2 rtw88_core,rtw88_usb
libarc4                12288  1 mac80211
rockchip_vdec          77824  0
hantro_vpu            249856  0
rockchip_rga           20480  0
v4l2_vp9               20480  2 rockchip_vdec,hantro_vpu
videobuf2_dma_contig    20480  2 rockchip_vdec,hantro_vpu
v4l2_h264              16384  2 rockchip_vdec,hantro_vpu
panfrost               69632  11
gpu_sched              36864  1 panfrost
v4l2_mem2mem           24576  3 rockchip_vdec,hantro_vpu,rockchip_rga
videobuf2_dma_sg       16384  1 rockchip_rga
videobuf2_memops       16384  2 videobuf2_dma_contig,videobuf2_dma_sg
dw_hdmi_cec            12288  0
drm_shmem_helper       16384  1 panfrost
lz4hc                  12288  0
dw_hdmi_i2s_audio      12288  0
videobuf2_v4l2         20480  4 rockchip_vdec,hantro_vpu,rockchip_rga,v4l2_mem2mem
rk_crypto              28672  1
lz4                    12288  0
rng_core               16384  2 rk_crypto
snd_soc_simple_card    20480  4
snd_soc_hdmi_codec     20480  1
snd_soc_es8316         36864  1
snd_soc_rockchip_i2s    24576  4
snd_soc_simple_card_utils    24576  1 snd_soc_simple_card
videodev              229376  5 rockchip_vdec,videobuf2_v4l2,hantro_vpu,rockchip_rga,v4l2_mem2mem
snd_soc_core          208896  5 snd_soc_hdmi_codec,snd_soc_simple_card_utils,snd_soc_rockchip_i2s,snd_soc_simple_card,snd_soc_es8316
videobuf2_common       49152  8 rockchip_vdec,videobuf2_dma_contig,videobuf2_v4l2,hantro_vpu,rockchip_rga,videobuf2_dma_sg,v4l2_mem2mem,videobuf2_memops
snd_compress           24576  1 snd_soc_core
mc                     53248  6 rockchip_vdec,videodev,videobuf2_v4l2,hantro_vpu,videobuf2_common,v4l2_mem2mem
snd_pcm_dmaengine      12288  1 snd_soc_core
snd_pcm               106496  6 snd_soc_hdmi_codec,snd_compress,snd_soc_simple_card_utils,snd_soc_core,snd_soc_es8316,snd_pcm_dmaengine
snd_timer              36864  2 snd_seq,snd_pcm
snd                    77824  17 snd_seq,snd_seq_device,snd_soc_hdmi_codec,snd_timer,snd_compress,snd_soc_core,snd_pcm
soundcore              12288  1 snd
cpufreq_dt             16384  0
joydev                 24576  0
zram                   32768  3
binfmt_misc            20480  1
sprdwl_ng             335872  0
cfg80211              802816  3 rtw88_core,mac80211,sprdwl_ng
sprdbt_tty             36864  2
rfkill                 24576  10 sprdbt_tty,bluetooth,cfg80211
dm_mod                126976  0
nfnetlink              16384  1
ip_tables              28672  0
x_tables               36864  1 ip_tables
autofs4                40960  2
fusb302                24576  0
motorcomm              24576  1
tcpm                   65536  1 fusb302
dwmac_rk               28672  0
typec                  57344  1 tcpm
stmmac_platform        20480  1 dwmac_rk
stmmac                233472  3 stmmac_platform,dwmac_rk
pcs_xpcs               20480  1 stmmac
pwm_bl                 16384  0
adc_keys               12288  0

free – проверка оперативной памяти. Отображает объем используемой, свободной и общий объем оперативной памяти, имеющейся в системе.

free
root@orangepi4-lts:~# free -m
               total        used        free      shared  buff/cache   available
Mem:            3860         912        2031         188        1193        2948
Swap:           1930           0        1930

Отобразим детальную информацию обо всем оборудовании.

hwinfo – информация об аппаратуре компьютера. Утилита hwinfo является еще одной универсальной утилитой зондирования аппаратуры, которая может сообщить подробную и краткую информацию о многих различных аппаратных компонентах, причем может сообщить больше, чем утилита lshw.

hwinfo
apt-get install hwinfo
root@orangepi4-lts:~# hwinfo --short
cpu:
                       CPU
                       CPU
                       CPU
                       CPU
                       CPU
                       CPU
keyboard:
  /dev/input/event1    Shenzhen Riitek wireless mini keyboard with touchpad
  /dev/input/event2    SHARKOON [Mediatrack Edge Mini Keyboard]
mouse:
  /dev/input/mice      Shenzhen Riitek wireless mini keyboard with touchpad
  /dev/input/mice      SHARKOON [Mediatrack Edge Mini Keyboard]
network:
  wlxe84e0687797d      ARM Ethernet controller
  end0                 ARM Ethernet controller
  wlan0                ARM Ethernet controller
network interface:
  wlan0                WLAN network interface
  lo                   Loopback network interface
  end0                 Ethernet network interface
  wlxe84e0687797d      Ethernet network interface
disk:
  /dev/mmcblk2         Disk
  /dev/mmcblk0         Disk
  /dev/zram1           Disk
  /dev/mmcblk0boot0    Disk
  /dev/mmcblk0boot1    Disk
  /dev/zram0           Disk
partition:
  /dev/mmcblk2p1       Partition
  /dev/mmcblk0p1       Partition
usb controller:
                       ARM USB controller
                       ARM USB controller
                       ARM USB controller
                       ARM USB controller
                       ARM USB controller
                       ARM USB controller
                       ARM USB XHCI controller
                       ARM USB controller
                       ARM USB controller
hub:
                       Linux Foundation 1.1 root hub
                       Linux Foundation 2.0 root hub
                       Linux Foundation 2.0 root hub
                       Linux Foundation 3.0 root hub
                       Linux Foundation 3.0 root hub
                       Linux Foundation 2.0 root hub
                       Linux Foundation 2.0 root hub
                       Linux Foundation 1.1 root hub
memory:
                       Main Memory
unknown:
                       PS/2 Controller
                       Unclassified device
                       Realtek 802.11ac NIC

Inxi – является мега скриптом bash, состоящим из 10000 строк кода, с помощью которого из разных источников и команд системы будет получена подробная информация об аппаратном обеспечении.

Inxi
apt-get install inxi
root@orangepi4-lts:~# inxi -Fx
System:
  Host: orangepi4-lts Kernel: 6.6.47-current-rockchip64 arch: aarch64 bits: 64 compiler: gcc
    v: 11.4.0
  Console: pty pts/2 Distro: Ubuntu 24.04 LTS (Noble Numbat)
Machine:
  Type: ARM System: OrangePi 4 LTS details: N/A serial: a042b4923e024f35
CPU:
  Info: quad core (2-mt/2-st) model: N/A variant-1: cortex-a72 variant-2: cortex-a53 bits: 64
    type: MST AMCP arch: ARMv8 rev: 4
  Speed (MHz): avg: 1544 high: 1800 min/max: 408/1416:1800 cores: 1: 1416 2: 1416 3: 1416
    4: 1416 5: 1800 6: 1800 bogomips: N/A
  Features: Use -f option to see features
Graphics:
  Device-1: display-subsystem driver: rockchip_drm v: N/A bus-ID: N/A
  Device-2: rk3399-dw-hdmi driver: dwhdmi_rockchip v: N/A bus-ID: N/A
  Device-3: rk3399-mali driver: panfrost v: kernel bus-ID: N/A
  Display: server: X.org v: 1.21.1.11 with: Xwayland v: 23.2.6 driver: X: loaded: modesetting
    gpu: rockchip_drm,dwhdmi_rockchip,panfrost tty: 97x31 resolution: 1920x1080
  API: EGL v: 1.4,1.5 drivers: panfrost,swrast platforms: active: gbm,surfaceless,device
    inactive: wayland,x11
  API: OpenGL v: 4.5 compat-v: 3.1 note: console (EGL sourced) renderer: Mali-T860
    (Panfrost), llvmpipe (LLVM 17.0.6 128 bits)
Audio:
  Device-1: simple-audio-card driver: asoc_simple_card bus-ID: N/A
  Device-2: rk3399-dw-hdmi driver: dwhdmi_rockchip bus-ID: N/A
  Device-3: simple-audio-card driver: asoc_simple_card bus-ID: N/A
  API: ALSA v: k6.6.47-current-rockchip64 status: kernel-api
  Server-1: PipeWire v: 1.0.5 status: n/a (root, process)
  Server-2: PulseAudio v: 16.1 status: active (root, process)
Network:
  Device-1: rk3399-gmac driver: rk_gmac_dwmac v: N/A port: N/A bus-ID: N/A
  IF: end0 state: down mac: XX:XX:XX:XX:XX:XX
  Device-2: uwe5622-wifi driver: N/A bus-ID: N/A
  Device-3: Realtek 802.11ac NIC driver: rtw_8821cu type: USB bus-ID: 3-1:2
  IF: wlxe84e0687797d state: up mac: XX:XX:XX:XX:XX:XX
  IF-ID-1: wlan0 state: dormant mac: XX:XX:XX:XX:XX:XX
Drives:
  Local Storage: total: 133.94 GiB used: 16.3 GiB (12.2%)
  ID-1: /dev/mmcblk0 model: AJTD4R size: 14.56 GiB type: Removable
  ID-2: /dev/mmcblk2 model: FD4Q9 size: 119.38 GiB type: Removable
Partition:
  ID-1: / size: 116.21 GiB used: 16.3 GiB (14.0%) fs: ext4 dev: /dev/mmcblk2p1
  ID-2: /var/log size: 46.8 MiB used: 7.3 MiB (15.6%) fs: ext4 dev: /dev/zram1
Swap:
  ID-1: swap-1 type: zram size: 1.88 GiB used: 0 KiB (0.0%) dev: /dev/zram0
Sensors:
  System Temperatures: cpu: 43.9 C mobo: N/A
  Fan Speeds (rpm): N/A
Info:
  Memory: total: 4 GiB available: 3.77 GiB used: 944.3 MiB (24.5%)
  Processes: 297 Uptime: 1d 5h 41m Init: systemd target: graphical (5)
  Packages: 1581 Compilers: clang: 18.1.3 gcc: 13.2.0 Shell: Bash v: 5.2.21 inxi: 3.3.34

Информация об устройствах хранения данных

lsblk — список блочных устройств. Перечисляется информация о всех блочных устройствах, которыми являются разделы жестких дисков и других устройств хранения данных, например, карт памяти microSD и Flash-накопителей.

lsblk
root@orangepi4-lts:~# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk0      179:0    0  14.6G  0 disk
└─mmcblk0p1  179:1    0  14.4G  0 part
mmcblk0boot0 179:32   0     4M  1 disk
mmcblk0boot1 179:64   0     4M  1 disk
mmcblk2      179:96   0 119.4G  0 disk
└─mmcblk2p1  179:97   0 118.2G  0 part /var/log.hdd
                                       /
zram0        251:0    0   1.9G  0 disk [SWAP]
zram1        251:1    0    50M  0 disk /var/log
zram2        251:2    0     0B  0 disk

df – дисковое пространство файловых систем. Отчеты о различных разделах, об их точках монтирования и о том, сколько в каждом разделе есть свободного места.

df
root@orangepi4-lts:~# df
Filesystem     1K-blocks     Used Available Use% Mounted on
tmpfs             395280     8536    386744   3% /run
/dev/mmcblk2p1 121857784 17087716 103442428  15% /
tmpfs            1976384        0   1976384   0% /dev/shm
tmpfs               5120        0      5120   0% /run/lock
tmpfs            1976384       24   1976360   1% /tmp
/dev/zram1         47960     7488     36888  17% /var/log
tmpfs             395276   127064    268212  33% /run/user/1000
tmpfs             395276       52    395224   1% /run/user/0

pydf – улучшенный вариант команды df, написанной на языке python, который выдает информацию в цвете, что выглядит лучше, чем информация, выдаваемая командой df.

pydf
apt-get install pydf
root@orangepi4-lts:~# pydf
root@orangepi4-lts:~# pydf
Filesystem     Size  Used Avail  Use%              Mounted on
/dev/mmcblk2p1 116G   16G   99G  14.0 [#.........] /
/dev/zram1      47M 7488k   36M  15.6 [##........] /var/log
/dev/mmcblk2p1 116G   16G   99G  14.0 [#.........] /var/log.hdd

fdisk – утилита предназначенная для изменения разделов жестких дисков, и ей также можно пользоваться для получения информации о списке имеющихся разделов, команда:

sudo fdisk -l

mount – используется для монтирования/демонтирования, а также для просмотра смонтированных файловых систем, команда:

mount

Проверка GPU, аудио, Wi-Fi, Gigabit Ethernet, Bluetooth, USB

GPU

Графика в SoC Rockchip RK3399 представлена GPU Mali-T860, используются драйвера Panfrost, аппаратное ускорение графики задействовано. Процессор RK3399 поддерживает многие видеокодеки, включая H.264/H.265/VP9 до 4Kx2K при 60 кадрах в секунду. На практике, видео 1080p H.264 воспроизводится без лагов. Но при том же разрешение видео кодированное H.265 заметны сильные лаги. Ролики с YouTube воспроизводятся с лагами.

Проверить наличие аппаратного 3D-ускорения можно с помощью утилиты  glxgears , которая выполняет OpenGL-тест и входит в пакет утилит  mesa-utils . Чтобы определить, работает ли 3D-ускорение, необходимо выполнить команду:

glxinfo | grep rendering

Если ответ содержит следующий текст:

direct rendering: Yes

Значит аппаратное 3D-ускорение работает.

Аудио

Выведем список доступных звуковых карт командой  aplay -l :

anton@orangepi4-lts:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: hdmisound [hdmi-sound], device 0: ff8a0000.i2s-i2s-hifi i2s-hifi-0 [ff8a0000.i2s-i2s-hifi i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: rockchipes8316c [rockchip-es8316c], device 0: ff880000.i2s-ES8316 HiFi ES8316 HiFi-0 [ff880000.i2s-ES8316 HiFi ES8316 HiFi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Доступно две звуковые карты:

  • card 0 — вывод звука по HDMI интерфейсу;
  • card 1 — встроенный звуковой чип на плате, аналоговый вывод 3.5 mm TRRS jack.

Соответственно вывод звука необходимо направлять на card 1. Воспроизведем звуковой файл формата WAV Audio PCM. Громкость регулируется утилитой  alsamixer . Выберем звуковую карту rockchip-es8316c, выбор кнопка  <F6> .

Orange Pi 4 LTS Review and Benchmarks
Интерфейс утилиты alsamixer

Запустим файл RacingGame.wav на воспроизведение:

aplay -D hw:1,0 RacingGame.wav

И услышите сочный звук Linux. Когда задействуется аудиовыход, при запуске ОС, в начале и в конце воспроизведения аудио, слышны некоторые щелчки.

Wi-Fi

Как уже было сказано выше, Orange Pi 4 LTS на частоте 5 ГГц не подключается к точкам доступа, хотя обнаружение работает. К точкам доступа на 2.4 ГГц подключается успешно, показывает хорошую скорость и высокий уровень сигнала по сравнению с предыдущими версиями образов ОС. Скорость в 100 Мбит/с до ближайшего сервера провайдера Интернет держит стабильно.

Gigabit Ethernet

Проводное соединение держит стабильно, скорость в 1 Гбит/с не проверялась.

Bluetooth

Устройства обнаруживает, но подключить не удается. Для теста использовалась беспроводная мышь и наушники.

USB

Устройства USB работают без нареканий.

Тесты производительности

CPU Benchmarks

На cpubenchmark.net процессор Rockchip RK3399 набирает:

  • 2925 попугаев в многопоточном режиме;
  • 979 попугаев в однопоточном режиме.Orange Pi 4 LTS Review and Benchmarks
    Сравнение процессоров на CPU Benchmarks
  • Процессор Rockchip RK3588 установлен на Orange Pi 5 Plus;
  • BCM2712 установлен на Raspberry Pi 5;
  • Intel Core i7-3520M@2.90GHz AMD64 установлен на ноутбуке Lenovo Z500, год выпуска 2012.

Процессор Rockchip RK3399 по попугаям сопоставим с Intel Core i7-3520M, который установлен в ноутбуке 12 летней давности.

Выполним стресс тест CPU и GPU утилитой  stress-ng , команды:

sudo apt install --install-suggests s-tui
s-tui

Orange Pi 4 LTS Review and Benchmarks
Утилита s-tui

Подробно о тесте пост How to Perform Stress Test on Your CPU in Ubuntu/Debian.

В ходе теста была достигнута максимальная температура CPU 85 °C, GPU 75 °C, при такой температуре уже начинается троттлинг процессора.

Для постоянного мониторинга температуры можно использовать утилиту  sensors , установка:

sudo apt update
sudo apt install lm-sensors

Запуск мониторинга с интервалом обновления 2 секунды:

watch -n 2 sensors

Orange Pi 4 LTS Review and Benchmarks
Утилита sensors

Так же для мониторинга температуры используется утилита  sudo armbianmonitor -m .

root@orangepi4-lts:~# sudo armbianmonitor -m
Two CPU clusters are available for monitoring
Stop monitoring using [ctrl]-[c]
Time    CPU_cl0/CPU_cl1  load %cpu %sys %usr %nice %io %irq   Tcpu  C.St.

14:35:32  1416/ 600 MHz  0.01   9%   1%   6%   0%   0%   0%  43.3 °C  0/5
14:35:37   408/ 408 MHz  0.01   2%   0%   2%   0%   0%   0%  42.2 °C  0/5
14:35:42  1416/ 408 MHz  0.01   4%   0%   3%   0%   0%   0%  42.8 °C  0/5
14:35:48  1416/1800 MHz  0.01   3%   0%   2%   0%   0%   0%  43.3 °C  0/5

Sysbench

Продолжаем тестировать процессор. Полная команда теста выглядит следующим образом:

apt-get install sysbench
sysbench cpu --cpu-max-prime=20000 --threads=6 --time=0 --events=10000 run

Где threads – это количество ядер процессора. А events – это количество выполняемых задач.

По результату теста получается, что за 4.67 секунды выполнено 1000 задач, 2136.40 задачи в секунду.

Для сравнения плата Raspberry pi 5 выполнила такое же количество задач за 2.43 секунды, это 4112.46 задач в секунду.

GPU

Протестируем GPU с разрешением 720p с помощью утилиты  glmark2-es2-wayland , команды:

glmark2-es2-wayland
glmark2-es2-wayland --off-screen

Orange Pi 4 LTS Review and Benchmarks
Тест GPU утилитой glmark2-es2-wayland

Тест  glmark2-es2-wayland  набрал 779 попугаев.

Запустим утилиту  glxgears .

Orange Pi 4 LTS Review and Benchmarks
Тест GPU утилитой glxgears

В среднем тест  glxgears  выдает 60 FPS.

Проверим поддержку ускорения в браузере Chromium версии 126.

Orange Pi 4 LTS Review and Benchmarks
Страница chrome://gpu в браузере Chromium

В качестве проверки графики установим игру  extreme-tux-racer  из маркета Snap. Установка Snap:

sudo apt update
sudo apt install snapd
sudo snap install snap-store

Затем установить игру из маркета Snap Store или командой:

sudo snap install extreme-tux-racer

Orange Pi 4 LTS Review and Benchmarks
Игра extreme-tux-racer

Браузер

Протестируем скорость работы браузера Chromium версия 126.

Orange Pi 4 LTS Review and Benchmarks
Тест Speedometer3.0

Бенчмарк Speedometer3.0 набрал 1.42 попугая.

WebGL Aquarium

Тест webgl-aquarium графики в браузере Chromium версия 126, canvas 1024×1024, все настройки по умолчанию.

Orange Pi 4 LTS Review and Benchmarks
Тест WebGL Aquarium в браузере Chromium

Показал:

  • при 500 рыбках — 28 FPS;
  • при 1 000 рыбках — 20 FPS;
  • при 5 000 рыбках — 7 FPS;
  • при 10 000 рыбках — 3 FPS;
  • при 15 000 рыбках — 2 FPS;
  • при 20 000 рыбках — 2 FPS;
  • при 25 000 рыбках — 1 FPS.

eMMC

Замерим скорость работы eMMC памяти. В этом тесте на диск записывается 1 ГБ данных разбитых на 10 блоков по 100 МБ.

Команда тестирования скорости записи данных:

sync && dd if=/dev/zero of=./TestingFile bs=100M count=10 oflag=direct

Для тестирования скорости чтения данных используется уже созданный файл  TestingFile .

Команда тестирования скорости чтения данных:

sync && dd if=./TestingFile of=/dev/zero bs=100M count=10 oflag=dsync

Результаты:

  • Скорость записи: 53.8 MB/s
  • Скорост чтения: 272 MB/s

microSD

Замерим скорость работы с картой памяти MicroSD SAMSUNG PRO Plus 128Гб U3 A2 V30, скость чтения до 98 МБ/с, скорость записи до 65 МБ/с. Команды теста такие же как и для eMMC памяти.

Результаты:

  • Скорость записи: 51.7 MB/s
  • Скорост чтения: 68.4 MB/s

Из результата видно что скорость записи на eMMC и microSD совпадает, но по чтению eMMC выигрывает практически в 4x раза.

Дополнительно выполим тест программой  KDiskMark , проект на GitHub JonMagon/KDiskMark.

Для установки выполнить команду:

sudo apt install kdiskmark

Если в репозитории отсутствует пакет  kdiskmark , то тогда необходимо добавить репозиторий следующей командой, затем установить пакет:

sudo add-apt-repository ppa:jonmagon/kdiskmark
sudo apt update
sudo apt install kdiskmark

Orange Pi 4 LTS Review and Benchmarks
Тестирование скорости карты памяти microSD утилитой kdiskmark

USB 3.0

Подключим Flash накопитель SanDisk и выполним замеры скорости. Вначале запустим на ПК x86 под управлением Windows 10, утилита CrystalDiskMark 8.0.4c, порт USB 3.0. Затем подключим к одноплатному компьютеру и запустим утилиту  kdiskmark , которую запускали выше.

Orange Pi 4 LTS Review and Benchmarks
Проверка скорости работы USB Flash накопителя. Слева направо, тест на ПК Windows 10 x86 порт USB 3.0, Orange Pi 4 LTS одиночный порт USB2.0 HOST, Orange Pi 4 LTS верхний порт USB3.0.

Обратите внимание, что порт USB 3.0 на плате только один, верхний. Нижний порт, не смотря на то, что он тоже подкрашен синим цветом, все равно является USB 2.0.

В сравнение с microSD видно, что на больших блоках выигрывает USB 3.0, но на мелких быстрее работает microSD. В целом USB 3.0 на чтение показывает хорошую скорость. Таким образом, использовать HDD на USB 3.0 для хранения данных достаточно рациональная идея, например можно организовать NAS хранилище для видеофильмов.

Энергопотребление

Замер энергопотребления проводился с включенным адаптером USB Wi-Fi EDUP.

Тест Мощность, W Ток (5V), A
В выключеном состояние (Shutdown) 0 0
Запуск (Boot) 6.9 1.4
Бездействие системы (Idle) 3.2 0.64
WebGL Aquarium, 15 000 of Fish (WebGL-aqua) 6.6 1.32
Полная загрузка, s-tui (Full load) 8.9 1.78

При полной загрузке всех ядер процессора потребляемая пиковая мощность не превышала 10W, таким образом, с запасом достаточно блока питания на 5V/2.5A, что практически соответствует требованиям в 5V/3A.

Журнал сообщений

Разобраться какие устройства работают, а какие нет, поможет просмотр сообщений состояний ядра Linux. Просмотреть сообщения можно командой  dmesg . Если необходимо из журнала выделить информацию, например только про аудио, то можно вывести журнал с выборкой, командой:

dmesg|grep -i sound

Журнал сообщений:

[   10.453230] input: rockchip-es8316c Headphones as /devices/platform/es8316c-card/sound/card0/input12

Вывод

Использовать Orange Pi 4 LTS в качестве настольного компьютера сомнительная идея по причине недостаточной производительности. Аппаратное ускорение GPU явно не дописано т.к. по характеристикам процессор Rockchip RK3399 поддерживает H.264/H.265/VP9 до 4Kx2K при 60 кадрах в секунду. На практике без лагов играет видео до 1080p. Хорошую скорость показала карта памяти microSD и интерфейс USB 3.0. В совокупности с хорошей поддержкой Ethernet и Wi-Fi, Orange Pi 4 LTS можно задействовать в качестве NAS сервера. Так же наличие контактов GPIO позволит использовать Orange Pi 4 LTS в качестве домашнего IoT сервера, например можно подключить различные датчики и установить Home Assistant.

Литература

Вам также может понравиться

About the Author: Anton

Programistik