Основа — китайский и английский документы Rockchip Debian V1.8.0 от 2024-09-20. Сохранены все 11 технических глав, команды, конфигурации, таблицы и исходные рисунки. Статус сопровождения, планы выпусков, показатели производительности и стандартные учётные записи — исторические сведения источника, а не текущий статус или результаты испытаний ArmSoM. Перед применением проверьте конкретную плату, SoC, SDK/BSP, ядро и периферию. Команды и аппаратные испытания не выполнялись.
В английском PDF несколько заголовков и пояснений FAQ ошибочно попали в код; потеряны экранирование shell и отдельные параметры. Границы кода и номера 9.1–9.30 с подразделами восстановлены по китайскому оригиналу; последние английские номера 0.19/0.20/1/2 приведены к 9.29/9.30/10/11. Написания -no-sandbox / --no-sandbox, vvp8enc, разные порядки Padding и номера версий сохранены без скрытого исправления. Слабые стандартные пароли, root без пароля и отключённая песочница описывают исходную среду разработки и не рекомендуются для эксплуатации.
| Версия Debian | Платформа | SoC, проверенные в источнике |
|---|---|---|
| 12 | ARM | RK3588, RK3576, RK3568, RK3566, RK3562 |
| 11 | ARM | RK3588, RK3568, RK3566, RK3562, RK3399, RK3288 |
| 10 | ARM | RK3399PRO, PX30, RK3326, RK3288, RK3328, RK3126C |
1. Введение в Debian
1.1 Что такое Debian
Debian — полностью свободная Linux-система с открытым исходным кодом, широко применяемая на различных устройствах. Причины выбора Debian: свободное ПО. Debian состоит из свободного ПО с открытым кодом и всегда будет на 100% свободным. Каждый может использовать, изменять и распространять его. На платформе Rockchip можно построить Debian для дальнейшей разработки. Debian — стабильная и безопасная ОС на базе Linux. Она широко используется на ноутбуках, настольных компьютерах и серверах. С 1993 года пользователи высоко оценивают её стабильность и надёжность. Для каждого пакета предусмотрены разумные настройки по умолчанию. Разработчики Debian стремятся предоставлять обновления безопасности всем пакетам на протяжении их жизненного цикла. Debian поддерживает разнообразное оборудование. Большинство устройств поддерживается ядром Linux; при недостаточной поддержке свободным ПО можно использовать проприетарные драйверы. Адаптированы и поддерживаются, в частности, Rockchip RK3588/RK3576/RK356X/RK3399/RK3288. Debian обеспечивает плавное обновление. В течение цикла выпуска обновления просты и плавны, включая переход к следующей основной версии. Rockchip уже перешла с Debian Stretch (9) на Debian Buster (10), Bullseye (11) и Bookworm (12). Debian служит основой множества других дистрибутивов.
Многие популярные Linux-дистрибутивы, например Ubuntu, Knoppix, PureOS, SteamOS и Tails, используют Debian как программную основу. Debian предоставляет инструменты, позволяющие расширять пакеты его архива собственными пакетами под конкретные потребности. Проект Debian — сообщество. Это не только операционная система Linux: ПО создают сотни добровольцев со всего мира. Участником сообщества можно стать, даже не будучи программистом или системным администратором.
1.2 Поддерживаемые версии Debian
| Версия | Поддерживаемые архитектуры | Окончание поддержки (ожидаемое) | Текущее состояние |
|---|---|---|---|
| Debian 9 «Stretch» | armhf и arm64 | 2022-06 | Поддержка завершена |
| Debian 10 «Buster» | armhf и arm64 | 2024-06 | На сопровождении |
| Debian 11 «Bullseye» | armhf и arm64 | 2026-06 | На сопровождении |
| Debian 12 «Bookworm» | armhf и arm64 | 2028-06 | В разработке |
Дополнительные сведения о долгосрочной поддержке версий Debian доступны на официальном сайте.
2. Быстрый старт с Debian
2.1 Подготовка среды
Для сборки рекомендуется Ubuntu 22.04. В других Linux-системах может потребоваться соответствующая корректировка пакетов. Помимо требований к ОС существуют аппаратные и программные требования. Аппаратные: 64-битная система, более 40G дискового пространства. Для нескольких проектов потребуется больше места. Программные: Ubuntu 22.04. Далее команды установки пакетов, необходимых для среды сборки SDK:
sudo apt-get update && sudo apt-get install git ssh make gcc libssl-dev liblz4-
tool expect expect-dev g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-
support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-
multilib unzip device-tree-compiler ncurses-dev libgucharmap-2-90-dev bzip2 expat
gpgv2 cpp-aarch64-linux-gnu libgmp-dev libmpc-dev bc python-is-python3 python2
Для разработки рекомендуется Ubuntu22.04 или более новая версия. При ошибках сборки установите соответствующие пакеты по сообщениям об ошибках.
2.2 Получение исходного кода
Исходный код находится в каталоге проекта <SDK>/debian в SDK, опубликованном на сервере кода Rockchip.
2.3 Сборка
Пакеты, необходимые для сборки Debian
sudo dpkg -i debian/ubuntu-build-service/packages/*
sudo apt-get install -f
Note: The live-build_*.deb is sourced from
https://mirrors.ustc.edu.cn/debian/pool/main/l/live-build/
The debootstrap_*.deb is sourced from
https://mirrors.ustc.edu.cn/debian/pool/main/d/debootstrap/
Alternatively, you can install the dependency environment by:
sudo apt-get remove live-build
git clone https://salsa.debian.org/live-team/live-build.git --depth 1 -b
debian/1%20230131
cd live-build
rm -rf manpages/po/
sudo make install -j8
Сборка Debian: перейдите в проект SDK и выполните сборку напрямую.
./build.sh debian
Либо перейдите в каталог Debian/:
cd debian/
См. readme.md в текущем каталоге.
3. Структура каталогов Debian
debian
├── mk-base-debian.sh ##Retrieve Debian base packages and compile
├── mk-image.sh ##Package to generate ext4 firmware
├── mk-rootfs-<debian-version>.sh ##Adapt for Rockchip hardware acceleration
packages
├── mk-rootfs.sh ##Point to specific Rootfs version, currently Bullseye and
Bookworm versions are available.
├── overlay ##Common configuration files for Rockchip platform adaptation
├── overlay-debug ##System frequently used debugging tools
├── overlay-firmware ##Storage for some device firmware, such as npu/dp, etc.
├── packages ##Contains precompiled packages for armhf/arm64 system adaptation
with hardware acceleration
├── packages-patches ##Precompiled packages with patches based on official
versions
├── readme.md ##Documentation guide
└── ubuntu-build-service ##Obtain Debian distribution from official sources, can
depend on packages and customize installation of related packages.
Вся структура реализована shell-скриптами для получения, построения, компиляции и установки Debian Linux с адаптированными пакетами аппаратного ускорения Rockchip.
4. Руководство по Debian live-build
live build — набор скриптов для построения образов live-систем. Его идея — инструментарий с конфигурационным каталогом для полной автоматизации и настройки всех аспектов создания live-образов. Подробнее см. Live manual на официальном сайте. Репозиторий исходников пакета Debian (VCS: Git): live-build-git. Репозиторий исходников с веб-просмотром: live-build.
4.1 Связанные команды
lb config создаёт в текущем каталоге auto, config и соответствующие конфигурационные файлы, затем запускает auto/config. lb clean запускает auto/clean.
lb build строит образ системы согласно конфигурационным скриптам каталога config.
4.2 Настройка репозиториев пакетов
Способ 1
lb config --mirror-bootstrap http://mirrors.ustc.edu.cn/debian --mirror-chroot-
security http://mirrors.ustc.edu.cn/debian-security/ --mirror-chroot-backports
http://mirrors.ustc.edu.cn/debian-backports/
Зеркало chroot: –mirror-chroot. По умолчанию используется значение –mirror-bootstrap; также можно создать config/archives/your-repository.list.chroot с адресом репозитория. Источник будет добавлен в /etc/apt/sources.list.d/ live-системы. Способ 2:
lb config --mirror-binary http://mirrors.ustc.edu.cn/debian --mirror-binary-
security http://mirrors.ustc.edu.cn/debian-security/
Другой вариант — создать config/archives/your-repository.list.binary с адресом репозитория.
4.3 Настройка набора системных пакетов
Способ 1: разместите список необходимых пакетов в customization/package-lists под именем XXX.list.chroot или XXX.list.binary. Способ 2: параметром –package-lists “XXX” укажите список из /usr/share/live/build/package-lists/. После выполнения lb config по параметрам скрипта в config создаются четыре файла: binary, bootstrap, chroot и common. lb build читает эти файлы, поэтому после lb config их параметры можно дополнительно изменить. Например, в auto/config имеются следующие параметры:
set -e
echo "I: create configuration"
export LB_BOOTSTRAP_INCLUDE="apt-transport-https gnupg"
lb config --mirror-bootstrap "http://mirrors.ustc.edu.cn/debian" --mirror-
chroot "http://mirrors.ustc.edu.cn/debian" --mirror-chroot-security
"http://mirrors.ustc.edu.cn/debian-security" --mirror-binary
"http://mirrors.ustc.edu.cn/debian" --mirror-binary-security
"http://mirrors.ustc.edu.cn/debian-security" --apt-indices false --apt-
recommends false --apt-secure false --architectures arm64 --archive-areas
'main contrib non-free' --backports false --binary-filesystem ext4 --binary-
images tar --bootappend-live "hostname=linaro-alip username=linaro" --
bootloader "syslinux" --bootstrap-qemu-arch arm64 --bootstrap-qemu-static
/usr/bin/qemu-aarch64-static --cache false --chroot-filesystem none --
compression gzip --debootstrap-options "--variant=minbase --include=apt-
transport-https,gnupg" --distribution bullseye --gzip-options '-9 --rsyncable'
--iso-publisher 'Linaro; http://www.linaro.org/; linaro-dev@lists.linaro.org' --
iso-volume 'Linaro Bullseye $(date +%Y%m%d-%H:%M)' --linux-flavours none --
linux-packages none --mode debian --security true --system normal --updates
true
4.3.1 Пользовательский каталог
Пользовательские каталоги и файлы следует помещать в соответствующий include-каталог внутри config/: config/binary_local-includes (корень — корневой каталог создаваемого образа); config/chroot_local-includes (корень — корневой каталог целевой системы).
4.3.2 HOOKS
После каждого этапа live-build выполняются скрипты соответствующих hooks в config/: config/binary_local-hooks и config/chroot_local-hooks. Новые версии live-build получают патчи из каталогов live/normal.
customization/hooks/live/
├── 0001-setup_user_linaro.binary
├── 0002-add_linaro_to_groups.binary
├── 0003-check_sudoers_for_admin.binary
├── 0021-silence-systemd.binary
├── 0022-disable-systemd-services.binary
├── 0023-lightdm-autologin.binary
└── 0098-resolvconf.binary
5. Обзор предварительно собранных пакетов Debian
packages/
├── arm64/armhf
│ ├── blueman
│ ├── cheese
│ ├── chromium
│ ├── glmark2
│ ├── gst-plugins-bad1.0
│ ├── gst-plugins-base1.0
│ ├── gst-plugins-good1.0
│ ├── gst-plugins-ugly1.0
│ ├── gstreamer
│ ├── gst-rkmpp
│ ├── libdrm
│ ├── libdrm-cursor
│ ├── libmali
│ ├── libv4l
│ ├── mpp
│ ├── openbox
│ ├── pcmanfm
│ ├── pipewire
│ ├── rga
│ ├── rga2
│ ├── rkaiq
│ ├── rkisp
│ ├── rknpu2
│ ├── rktoolkit
│ ├── rkwifibt
│ ├── wayland
│ ├── weston
│ ├── wireplumber
│ └── xserver
5.1 Blueman
Blueman — менеджер Bluetooth на GTK+. Он эффективно работает с API BlueZ и упрощает следующие задачи: коммутируемые соединения 3G/EDGE/GPRS; подключение и создание сетей Bluetooth; подключение устройств ввода и аудиоустройств; отправка, получение и просмотр файлов по OBEX (Object Exchange); сопряжение. Предварительно собранные пакеты:
blueman/
├── blueman_2.3.5-2_arm64.deb
└── blueman-dbgsym_2.3.5-2_arm64.deb
packages-patches/blueman/
├── 0001-Blueman-Fix-DisplayPasskey-for-Keyboard.patch
└── 0002-Don-t-turn-off-the-bt-power.patch
Rockchip обновила Blueman главным образом для устранения проблем Bluetooth-устройств, например клавиатур и колонок, при переходе в сон и пробуждении. Кроме того, многие сторонние Bluetooth- и Wi-Fi-программы пытаются управлять питанием модулей через /dev/rfkill. Платформа Rockchip использует нестандартные драйверы поставщиков, которым обычно нужны особые этапы инициализации; после повторного включения питания они могут работать неправильно. Поэтому питание и инициализацию Wi-Fi/Bluetooth независимо выполняют скрипты SDK, исключая вмешательство сторонних программ.
5.2 Media Process Platform (MPP)
Rockchip предоставляет универсальную для своего семейства микросхем платформу обработки мультимедиа Media Process Platform (MPP). Она скрывает от приложений сложность низкоуровневой обработки и различия между микросхемами, предоставляя единый Media Process Interface (MPI). Функции MPP: декодирование H.265 / H.264 / H.263 / VP9 / VP8 / MPEG-4 / MPEG-2 / MPEG-1 / VC1 / MJPEG / AV1; кодирование H.265 / H.264 / VP8 / MJPEG; обработка видео — копирование, масштабирование, преобразование цветового пространства и устранение чересстрочности (Deinterlace). Для отладки можно включить следующие переключатели подробного журналирования:
export mpi_debug=1
export mpp_debug=1
export h264d_debug=1
export mpp_buffer_debug=2
По умолчанию MPP не выводит журнал непосредственно в терминал. Для просмотра в терминале задайте:
export mpp_syslog_perror=1
Переключатели отладочного журнала зависят от ядра. Для ядер 4.19/5.10/6.1 (Linux 4.19 и выше):
echo 0x100 > /sys/module/rk_vcodec/parameters/mpp_dev_debug
cat /proc/kmsg
Для ядра 4.4 (Linux 4.4):
echo 0x100 > /sys/module/rk_vcodec/parameters/debug
cat /proc/kmsg
После выполнения этих команд видно время кодирования и декодирования одного кадра в ядре. Это полезно для оценки производительности и анализа рывков или плавности. Пример журнала:
rk_vcodec: fdf80200.rkvdec:0 session 2269:34 time: 14870 us hw 5430 us
rk_vcodec: fdf80200.rkvdec:0 session 2269:34 time: 13157 us hw 4132 us
rk_vcodec: fdf80200.rkvdec:0 session 2269:34 time: 12976 us hw 4098 us
rk_vcodec: fdf80200.rkvdec:0 session 2269:34 time: 11295 us hw 4070 us
...
Подробнее см. документацию разработки MPP в <SDK>/docs/Linux/Multimedia. В Debian интегрированы следующие предварительно собранные пакеты:
mpp/
├── librockchip-mpp-dev_1.5.0-1_arm64.deb
├── librockchip-mpp1-dbgsym_1.5.0-1_arm64.deb
├── librockchip-mpp1_1.5.0-1_arm64.deb
├── librockchip-vpu0-dbgsym_1.5.0-1_arm64.deb
├── librockchip-vpu0_1.5.0-1_arm64.deb
├── rockchip-mpp-demos-dbgsym_1.5.0-1_arm64.deb
└── rockchip-mpp-demos_1.5.0-1_arm64.deb
В Debian MPP интегрируется с разработанным Rockchip фреймворком Rockit и сторонними мультимедийными фреймворками, например GStreamer, обеспечивая поддержку обработки мультимедиа. Примечание: из-за авторских прав и коммерческих лицензионных ограничений официальный Linux SDK не поддерживает FFmpeg.
5.3 libv4l
Плагин v4l2 связывает Chromium с mpp для аппаратного декодирования. Предварительно собранные пакеты:
libv4l/
...
├── libv4l-0_1.22.1-5_arm64.deb
├── libv4l-0-dbgsym_1.22.1-5_arm64.deb
├── libv4l2rds0_1.22.1-5_arm64.deb
├── libv4l2rds0-dbgsym_1.22.1-5_arm64.deb
├── libv4lconvert0_1.22.1-5_arm64.deb
├── libv4lconvert0-dbgsym_1.22.1-5_arm64.deb
├── libv4l-dev_1.22.1-5_arm64.deb
├── libv4l-rkmpp_1.5.1-1.1_arm64.deb
├── libv4l-rkmpp-dbgsym_1.5.1-1.1_arm64.deb
├── v4l-utils_1.22.1-5_arm64.deb
└── v4l-utils-dbgsym_1.22.1-5_arm64.deb
Сторонний пакет v4l-utils требует следующих патчей:
├── 0001-libv4l2-Support-mmap-to-libv4l-plugin.patch
├── 0002-libv4l-mplane-Filter-out-multiplane-formats.patch
├── 0003-libv4l-add-V4L2_MEMORY_DMABUF-memory-support.patch
├── 0004-libv4l-mplane-plugin-add-exbuf_ioctl-for-dmabuf.patch
├── 0005-video-max-frame-change-from-32-to-64.patch
├── 0006-Support-builtin-v4l-plugins.patch
├── 0007-libv4l-Disallow-conversion-by-default.patch
Затем соберите libv4l-rkmpp — плагин связи libv4l с mpp.
5.4 Chromium
Встроенный в Debian браузер Chromium собирается на основе Yocto.
chromium/
└── chromium-x11_126.0.6478.126_arm64/armhf.deb
Chromium поддерживает H264, VP8, VP9, AV1 и другие видеоформаты; начиная с версии 105 добавлен H265. В Debian аппаратное декодирование реализовано изменённым Chromium, плагином V4L2 и MPP. Основные изменения: включение v4l2 vda в Chromium и соответствующие патчи; добавление плагина v4l2 mpp. Ограничения: a) декодирование только vp8, h264, h265, vp9, av1; b) кодирование только vp8 и h264; c) нужна изменённая сборка Chromium с прохождением процесса сборки Yocto. Предоставляются Chromium wayland-патчи для Yocto, buildroot и других систем. Версия Chromium: root@linaro-alip:~# chromium –version; вывод: Chromium 126.0.6478.126 stable.
root@linaro-alip:~# chromium --version
Chromium 126.0.6478.126 stable
5.5 glmark2
glmark2/
├── glmark2-data_2023.01+dfsg-1_all.deb
├── glmark2-drm-dbgsym_2023.01+dfsg-1_arm64.deb
├── glmark2-drm_2023.01+dfsg-1_arm64.deb
├── glmark2-es2-drm-dbgsym_2023.01+dfsg-1_arm64.deb
├── glmark2-es2-drm_2023.01+dfsg-1_arm64.deb
├── glmark2-es2-wayland-dbgsym_2023.01+dfsg-1_arm64.deb
├── glmark2-es2-wayland_2023.01+dfsg-1_arm64.deb
├── glmark2-es2-x11-dbgsym_2023.01+dfsg-1_arm64.deb
├── glmark2-es2-x11_2023.01+dfsg-1_arm64.deb
├── glmark2-wayland-dbgsym_2023.01+dfsg-1_arm64.deb
├── glmark2-wayland_2023.01+dfsg-1_arm64.deb
├── glmark2-x11-dbgsym_2023.01+dfsg-1_arm64.deb
└── glmark2-x11_2023.01+dfsg-1_arm64.deb
Glmark2 — открытый инструмент тестирования OpenGL 2.0 и ES 2.0, обычно используемый для оценки GPU. Открытый код Glmark2 интегрирован в Debian для соответствующих тестов.
usr/local/bin/test_glmark2_*.sh
├── test_glmark2_fullscreen.sh ### Full screen test
├── test_glmark2_normal.sh ### Default display resolution test at 800x600
├── test_glmark2_offscreen.sh ### Screenless test
root@linaro-alip:~# test_glmark2_normal.sh
arm_release_ver: g24p0-00eac0, rk_so_ver: 3
=======================================================
glmark2 2023.01
=======================================================
OpenGL Information
GL_VENDOR: ARM
GL_RENDERER: Mali-G610
GL_VERSION: OpenGL ES 3.2 v1.g24p0-
00eac0.98fbd14bd397c6bd1b57c689f07cf638
Surface Config: buf=24 r=8 g=8 b=8 a=0 depth=24 stencil=0 samples=0
Surface Size: 1080x1920 fullscreen
=======================================================
[build] use-vbo=false:
---
Дополнительные варианты использования см. в справке.
root@linaro-alip:~# glmark2-es2 --help
A benchmark for Open GL (ES) 2.0
Options:
-b, --benchmark BENCH A benchmark or options to run: '(scene)?(:opt1=val1)*'
(the option can be used multiple times)
-f, --benchmark-file F Load benchmarks to run from a file containing a
list of benchmark descriptions (one per line)
(the option can be used multiple times)
--validate Run a quick output validation test instead of
running the benchmarks
--data-path PATH Path to glmark2 models, shaders and textures
Default: /usr/share/glmark2
--frame-end METHOD How to end a frame [default,none,swap,finish,readpixels]
--off-screen Render to an off-screen surface
--visual-config C The visual configuration to use for the rendering
target: 'red=R:green=G:blue=B:alpha=A:buffer=BUF'.
The parameters may be defined in any order, and any
omitted parameters assume a default value of '1'
--reuse-context Use a single context for all scenes
(by default, each scene gets its own context)
-s, --size WxH Size of the output window (default: 800x600)
--fullscreen Run in fullscreen mode (equivalent to --size -1x-1)
-l, --list-scenes Display information about the available scenes
and their options
--show-all-options Show all scene option values used for benchmarks
(only explicitly set options are shown by default)
--run-forever Run indefinitely, looping from the last benchmark
back to the first
--annotate Annotate the benchmarks with on-screen information
(same as -b :show-fps=true:title=#info#)
-d, --debug Display debug messages
-h, --help Display help
5.6 gst-rkmpp
GStreamer-Rockchip — промежуточное ПО кодирования и декодирования аудио/видео на основе GStreamer, адаптированное к Rockchip и преимущественно использующее интерфейс mpp. Предварительно собранные пакеты GStreamer-Rockchip:
gst-rkmpp/
├── gstreamer1.0-rockchip1-dbgsym_1.14-4_arm64.deb
└── gstreamer1.0-rockchip1_1.14-4_arm64.deb
5.7 GStreamer
GStreamer включает основной фреймворк и базовые компоненты. Патч GStreamer 1.22.0 добавляет DMABUF как часть системной памяти, делая операции с памятью гибче и эффективнее и устраняя зависание циклического воспроизведения. Соответствующие патчи:
├── 0001-filesrc-Fix-stopping-race-in-pull-mode.patch
├── 0002-HACK-gstpad-Add-1-sec-timeout-for-activation.patch
├── 0003-HACK-caps-Consider-dmabuf-subset-of-system-memory.patch
├── 0004-gst-launch-Fix-random-hang-when-EOS.patch
5.8 gst-plugins-base1.0
gst1-plugins-base — часть GStreamer с базовыми плагинами обработки мультимедиа. На основе официального gst-plugins-base улучшены производительность, совместимость и функции декодирования, воспроизведения, видеовывода, интерфейса пользователя и форматов файлов. Основные изменения: снято ограничение выдачи drained некоторыми декодерами только в верхнем контейнере; улучшены playbin/playbin2 — обработка завершения, отказ от очистки буфера при первом завершении, исправление взаимоблокировок и переходов состояния видео; добавлен рендеринг DMABUF, особенно в xvimagesink; video-converter поддерживает Rockchip RGA 2D; gl может напрямую импортировать DMABUF, даже без EGLImage; загрузчик OpenGL предпочитает DirectDmabufExternal; поддержан NV12_10LE40; можно отключать оформление окна xvimagesink; применяются координаты окна верхнего уровня; события expose игнорируются до готовности видео; поддержаны предпочтительные аудио- и видеоприёмники; исправлен расчёт битрейта ADPCM в RIFF; можно по умолчанию отключить QoS; добавлен NV16_10LE40. Патчи для gst-plugins-base1.0-1.22.0:
gst1-plugins-base
├── 0001-Revert-decodebin-only-emit-drained-signal-when-top-c.patch
├── 0002-playbin2-send-one-about-to-finish-per-group.patch
├── 0003-playbin-do-not-drain-on-first-EOS.patch
├── 0004-playbin2-Fix-deadlock-when-hooking-about-to-finish-s.patch
├── 0005-playbin3-Fix-Qt-videoplayer-cannot-change-video-stat.patch
├── 0006-playbin2-Add-preferred-audio-video-sink.patch
├── 0007-HACK-xvimagesink-Support-dma-buffer-rendering.patch
├── 0008-video-converter-Support-rockchip-RGA-2D-accel.patch
├── 0009-HACK-gl-egl-allow-direct-dmabuf-import-when-unable-t.patch
├── 0010-glupload-dmabuf-prefer-DirectDmabufExternal-uploader.patch
├── 0011-videoconvert-Support-preferred-formats.patch
├── 0012-glupload-Support-NV12_10LE40-and-NV12-NV12_10LE40-NV.patch
├── 0013-xvimagesink-Defer-prepare-window-when-getting-zero-w.patch
├── 0014-riff-Fix-bps-caculation-error-for-ADPCM.patch
├── 0015-xvimagesink-Allow-disabling-decorations.patch
├── 0016-xvimagesink-Apply-toplevel-window-s-position.patch
├── 0017-xvimagesink-Ignore-expose-redraw-when-video-not-read.patch
├── 0018-gl-x11-Honor-render-rectangle-for-toplevel-window.patch
├── 0019-gl-wayland-Honor-render-rectangle-for-toplevel-windo.patch
├── 0020-gl-x11-Allow-disabling-decorations-for-toplevel-wind.patch
├── 0021-gst-libs-Support-NV16_10LE40.patch
├── 0022-videodecoder-Allow-disabling-QoS-by-default.patch
5.9 gst-plugins-bad1.0
Патчи gst1-plugins-bad1.0 улучшают расширенный набор GStreamer в обработке видео/аудио, управлении окнами, производительности и совместимости. Изменения: исправлено чтение VUI в анализаторе H.265; устранена возможная утечка памяти VC1 при определённых условиях; MPEG-анализатор разделяет видео на кадры; улучшены Wayland и KMS, включая положение, иерархию, прозрачность, заполнение и синхронизацию окон; исправлены подготовка, показ и полноэкранный режим Wayland; оптимизирована обработка групп PCR с большими разрывами демультиплексором MPEG-TS; устранено возможное двойное закрытие общих дескрипторов KMS; поддержаны NV12_10LE40, NV16_10LE40 и другие форматы; можно игнорировать повреждённые PCR-потоки; добавлены оптимизации Rockchip, его драйверы и HDR; KMS не выбирает неподключённые разъёмы и поддерживает масштабирование/полноэкранность при установке режима; JPEG-анализатор разрешён при автоматической вставке parsebin; поддержаны DMABUF в Wayland, прозрачное видео и сенсорные указатели. На основе официального gst-plugins-bad добавлены kmssink, waylandsink и адаптации/исправления Rockchip. Патчи gst-plugins-bad1.0-1.22.0:
gst1-plugins-bad
├── 0001-h265parser-Fix-read-vui-error.patch
├── 0002-interim-fix-vc1-stream-may-memory-leak-when-pending.patch
├── 0003-waylandsink-release-frame-callback-when-finalizing.patch
├── 0004-kmssink-Support-render-rectangle-for-plane.patch
├── 0005-kmssink-Request-window-handle.patch
├── 0006-waylandsink-Support-place-below-above.patch
├── 0007-waylandsink-Enable-changing-window-handle.patch
├── 0008-kmssink-Support-setting-plane-zpos.patch
├── 0009-waylandsink-Support-setting-toplevel-window-position.patch
├── 0010-HACK-gstmpegvideoparse-Split-every-picture.patch
├── 0011-mpegtsdemux-Create-new-PCR-group-for-big-gap.patch
├── 0012-gstjpegparse-Allow-parsebin-to-use-it-for-autopluggi.patch
├── 0013-waylandsink-Drop-frame-when-window-not-ready.patch
├── 0014-waylandsink-Fix-random-crash.patch
├── 0015-camerabin2-Support-setting-default-filters.patch
├── 0016-waylandsink-Defer-prepare-window-when-getting-zero-w.patch
├── 0017-mpegts-Support-ignoring-broken-PCR-streams-by-defaul.patch
├── 0018-waylandsink-Fix-crash-when-setting-fullscreen-proper.patch
├── 0019-waylandsink-Support-window-layer-property.patch
├── 0020-waylandsink-Support-window-alpha-property.patch
├── 0021-waylandsink-Support-window-fill-mode-property.patch
├── 0022-HACK-kmssink-Open-drm-devnode-directly.patch
├── 0023-waylandsink-Use-create_immed-to-create-dmabuf.patch
├── 0024-waylandsink-Support-frame-sync-mode.patch
├── 0025-kmssink-Support-NV12_10LE40-and-NV12-NV12_10LE40-NV1.patch
├── 0026-waylandsink-Support-NV12_10LE40-and-NV12-NV12_10LE40.patch
├── 0027-waylandsink-Use-the-correct-video-info-to-access-all.patch
├── 0028-waylandsink-Prefer-to-use-waylandsink.patch
├── 0029-kmssink-Avoid-double-closing-shared-gem-handle.patch
├── 0030-kmssink-Support-ignoring-aspect-ratio.patch
├── 0031-kmssink-Support-setting-prefered-frame-syncing-mode.patch
├── 0032-waylandsink-Support-pointer-and-touch.patch
├── 0033-waylandsink-Parse-video-size-in-propose_allocation.patch
├── 0034-waylandsink-Wait-10s-for-toplevel-window-s-configure.patch
├── 0035-waylandsink-Fix-buffer-size-error-when-video-cropped.patch
├── 0036-HACK-waylandsink-Set-size-in-wl_subsurface_set_posit.patch
├── 0037-waylandsink-Support-transparent-video.patch
├── 0038-kmssink-Improve-monitor-and-plane-selection.patch
├── 0039-kmssink-Support-scaling-in-modesetting.patch
├── 0040-kmssink-Support-fullscreen-prop.patch
├── 0041-av1parser-Don-t-consider-unknown-metadata-OBUs-a-bit.patch
├── 0042-kmssink-Avoid-src-size-overflow.patch
├── 0043-waylandsink-Support-force-trying-dmabuf.patch
├── 0044-kmssink-Support-NV16_10LE40.patch
5.10 gst-plugins-good1.0
Патчи gst1-plugins-good1.0 адаптируют плагины «good», включая v4l2 и rga, к особенностям и исправлениям Rockchip. Добавлены: аппаратное отражение видео через Rockchip RGA 2D; выбор видеоустройства по умолчанию; фильтрация недоступных источников Rockchip; максимальное разрешение захвата; увеличение VIDEO_MAX_FRAME для большего числа кадровых буферов; минимальное число V4L2-буферов; настройка совместного использования буферов.
Для повышения производительности V4L2-источника поддержан пропуск очистки кеша буферов. Патчи gst-plugins-good1.0-1.22.0:
gst1-plugins-good/
├── 0001-qtdemux-don-t-skip-the-stream-duration-longer-than-3.patch
├── 0002-HACK-flacparse-Handle-metadata-127.patch
├── 0003-autodetect-Add-preferred-for-autovideosink-autoaudio.patch
├── 0004-v4l2-Support-preferred-formats.patch
├── 0005-video-flip-Support-Rockchip-RGA-2D-accel.patch
├── 0006-v4l2src-Support-setting-default-device.patch
├── 0007-v4l2src-Filter-out-unavailable-RK-sources.patch
├── 0008-v4l2src-Support-setting-max-resolution.patch
├── 0009-matroska-demux-parse-Disable-QoS-lace-skipping-by-de.patch
├── 0010-v4l2-Increase-VIDEO_MAX_FRAME-to-64.patch
├── 0011-v4l2-Support-setting-v4l2-min-buffers.patch
├── 0012-v4l2-Support-disabling-buffer-sharing.patch
5.11 libdrm
Изменения относительно официальной LIBDRM: по умолчанию открывается устройство Rockchip DRM; по умолчанию обходятся API аутентификации DRM, например drmGetBusid, drmSetBusid, drmGetMagic, drmAuthMagic, drmSetInterfaceVersion, drmSetMaster, drmDropMaster. LIBDRM — междрайверное промежуточное ПО, через которое приложения пользовательского пространства, например Mesa и 2D-драйверы, взаимодействуют с ядром по протоколу DRI. Структура DRM показана ниже:

Предварительно собранные пакеты libdrm:
libdrm
├── libdrm2_2.4.114-1_arm64.deb
├── libdrm2-dbgsym_2.4.114-1_arm64.deb
├── libdrm-common_2.4.114-1_all.deb
├── libdrm-dev_2.4.114-1_arm64.deb
├── libdrm-tests_2.4.114-1_arm64.deb
└── libdrm-tests-dbgsym_2.4.114-1_arm64.deb
Патчи:
├── 0001-tests-meson.build-disable-nouveau-tests-for-static-b.patch
├── 0002-modetest-Speed-up-dumping-info.patch
├── 0003-HACK-Open-Rockchip-drm-device-by-default.patch
├── 0004-HACK-Bypass-auth-APIs-by-default.patch
5.12 libdrm-cursor
Пакет решает проблемы RK3566/RK3568, где имеются только AFBC-слои. Три основные функции: VOP не имеет отдельного слоя мыши, поэтому overlay используется как слой курсора; отображение overlay в формате AFBC; обработка выхода мыши за границы.
Возможности настройки drm-cursor:
$cat /etc/drm-cursor.conf
# Configure file for libdrm-cursor.
#
#debug=
# log-file=
# hide=1 # hide cursors
# atomic=0 # disable atomic drm API
# max-fps=60
# allow-overlay=1 # allowing overlay planes
# prefer-afbc=0 # prefer plane with AFBC modifier supported
# num-surfaces=8 # num of egl surfaces to avoid edge moving corruption
# prefer-plane=65
# prefer-planes=61,65
# crtc-blocklist=64,83
Журнал по умолчанию: /var/log/drm-cursor.log. Предварительно собранные пакеты libdrm-cursor:
libdrm-cursor/
├── libdrm-cursor-dbgsym_1.4.1-1_arm64.deb
├── libdrm-cursor-dev_1.4.1-1_arm64.deb
└── libdrm-cursor_1.4.1-1_arm64.deb
5.13 libmali
libmali — SDK для семейства GPU ARM Mali. Rockchip предоставляет предварительно собранные Debian-пакеты libmali, упрощающие разработку. Mali — платформа графического ускорения на открытых стандартах с 2D/3D-рендерингом и вычислениями общего назначения на GPU (GPGPU). Rockchip Linux поддерживает API OpenGL ES 1.1, 2.0, 3.2; Vulkan 1.0, 1.1; OpenCL 2.0. Поддержка OpenGL ES не означает поддержку полного OpenGL API. Имена пакетов строятся так: модель GPU - версия ПО - аппаратная версия (если различается, например r1p0 для RK3288/RK3288w) - параметры сборки. Вариант без суффикса — x11-gbm. GBM — механизм управления памятью на основе DRM, подходящий для EGLFS и не зависящий от X11/Wayland. Варианты Wayland и Wayland-gbm предназначены для среды Wayland.
Вариант dummy предназначен главным образом для мультимедийной среды разработки rockit. Набор API зависит от микросхемы; подробности см. в руководстве соответствующего чипа.
libmali/
├── libmali-valhall-g610-g13p0-dummy-dbgsym_1.9-1_arm64.deb
├── libmali-valhall-g610-g13p0-dummy_1.9-1_arm64.deb
├── libmali-valhall-g610-g13p0-gbm-dbgsym_1.9-1_arm64.deb
├── libmali-valhall-g610-g13p0-gbm_1.9-1_arm64.deb
├── libmali-valhall-g610-g13p0-wayland-gbm-dbgsym_1.9-1_arm64.deb
├── libmali-valhall-g610-g13p0-wayland-gbm_1.9-1_arm64.deb
├── libmali-valhall-g610-g13p0-x11-gbm-dbgsym_1.9-1_arm64.deb
├── libmali-valhall-g610-g13p0-x11-gbm_1.9-1_arm64.deb
...
5.14 RGA
Rockchip RGA — независимый 2D-блок растрового ускорения. Он ускоряет рисование точек/линий, масштабирование, вращение, растровые операции, композицию и другие 2D-операции. Предварительно собранные пакеты приведены ниже. RGA подходит для RK kernel 4.4 и более старых версий, преимущественно ветка im2d репозитория linux-rga. RGA2 подходит для RK kernel 4.19, 5.10, 6.1 и более новых версий, преимущественно ветка multi_rga_im2d_api репозитория linux-rga.
rga/
├── librga-dev_2.1.0-1_arm64.deb
├── librga2-deb
└── librga2_2.1.0-1_arm64.deb
rga2
├── librga2_2.2.0-1_arm64.deb
├── librga2-dbgsym_2.2.0-1_arm64.deb
└── librga-dev_2.2.0-1_arm64.deb
5.15 Openbox
Openbox — лёгкий оконный менеджер X11. Официальная версия расширена поддержкой перемещения контура окна и ограничения интервала перемещения.
Modify /home/linaro/.config/openbox/lxde-rc.xml to wireframe, change the
drawContents content:
<drawContents>yes</drawContents> to <drawContents>no</drawContents>
Set moveInterval to limit the interval of window movement:
<moveInterval>50</moveInterval>
Подробнее см. Openbox. Предварительно собранный пакет:
openbox/
└── openbox_3.6.1-10_arm64.deb
5.16 pcmanfm
Лёгкий файловый менеджер, главным образом для лёгких рабочих окружений, например LXDE (Lightweight X11 Desktop Environment). По сравнению с официальной версией добавлена поддержка контуров. Предварительно собранные пакеты:
pcmanfm/
├── pcmanfm_1.3.2-1_arm64.deb
└── pcmanfm-dbgsym_1.3.2-1_arm64.deb
5.17 Pipewire
Pipewire — открытый мультимедийный сервисный фреймворк с гибкими аудио-/видеоконвейерами низкой задержки для современных Linux-систем. Он предназначен для замены PulseAudio и JACK Audio Connection Kit более современным и эффективным решением. Пакет pipewire обновлён главным образом из-за шума записи в официальном Debian 12; подробнее см. официальное сообщение об ошибке. Предварительно собранные пакеты:
pipewire/
└── libspa-0.2-modules_0.3.65-3+deb12u1_arm64.deb
5.18 wireplumber
WirePlumber — открытый инструмент маршрутизации аудио/видео на PipeWire с гибкими конвейерами обработки потоков. Изменения официальной версии главным образом адаптируют автоматическое переключение звука. Предварительно собранные пакеты:
wireplumber/
├── gir1.2-wp-0.4_0.4.13-1_arm64.deb
├── libwireplumber-0.4-0_0.4.13-1_arm64.deb
├── libwireplumber-0.4-0-dbgsym_0.4.13-1_arm64.deb
├── libwireplumber-0.4-dev_0.4.13-1_arm64.deb
├── wireplumber_0.4.13-1_arm64.deb
├── wireplumber-dbgsym_0.4.13-1_arm64.deb
└── wireplumber-doc_0.4.13-1_all.deb
5.19 Rockchip Automatic Image Quality
Полное название — Rockchip Automatic Image Quality: автоматическая настройка процессора обработки изображения. Главным образом реализует Camera 3A и подходит для чипов ISP2.x, например RK3588, RK3576, RK356X и других. Предварительно собранные пакеты:
rkaiq/
├── camera_engine_rkaiq_rk3562_arm64.deb ##Suitable for RK3562 series chips
├── camera_engine_rkaiq_rk3568_arm64.deb ##Suitable for RK3566/RK3568 series
chips
├── camera_engine_rkaiq_rk3576_arm64.deb ##Suitable for RK3576 series chips
└── camera_engine_rkaiq_rk3588_arm64.deb ##Suitable for RK3588 series chips
5.20 rkisp
Полное название — Rockchip Image Signal Processor, процессор обработки изображения. Главным образом реализует Camera 3A для чипов ISP1.X, например RK3288, RK3399, RK3326, PX30. Предварительно собранный пакет:
rkisp/
└── camera_engine_rkisp_v2.3.0_arm64.deb
5.21 rknpu2
Полное название — Rockchip Neural Processing Unit, блок обработки нейросетей. Для RKNPU сначала на компьютере преобразуйте обученную модель в RKNN с помощью RKNN-Toolkit2, затем разверните на плате через RKNN C API или Python API. Стек RKNN помогает быстро развертывать ИИ-модели на Rockchip, включая RK356X, RK3576, RK3588. Интеграционный пакет:
rknpu2/
└── rknpu2.tar
5.22 rkwifibt
Отлаженные модули Wi-Fi/Bluetooth для платформы Rockchip, включая прошивки, инструменты и конфигурационные файлы. Предварительно собранные пакеты:
rkwifibt/
├── rkwifibt-broadcom-firmware_1.0.0-1_arm64.deb
├── rkwifibt-dev-tools-dbgsym_1.0.0-1_arm64.deb
└── rkwifibt-dev-tools_1.0.0-1_arm64.deb
5.23 rktoolkit
Специализированный набор Rockchip rktoolkit включает io/update/vendor_storage/modetest/stressapptest/memtester/vendor_storage и другие инструменты. Предварительно собранные пакеты:
rktoolkit/
├── rktoolkit_1.0.0-1_arm64.deb
└── rktoolkit-dbgsym_1.0.0-1_arm64.deb
5.24 Сервер X
X server — сокращённое название сервера графического интерфейса Linux. Рабочие окружения XFCE, KDE и GNOME поддерживаются X server. Debian использует лёгкое окружение LXDE/XFCE. Ниже сравниваются доступные Linux-окружения и оконные менеджеры:
| Рабочее окружение / оконный менеджер | Потребление памяти | Загрузка CPU | Тип |
|---|---|---|---|
| KDE 4.6 | 363MB | 4% | Рабочее окружение |
| Unity | 271MB | 14% | Рабочее окружение |
| GNOME 3 | 193MB | 10% | Рабочее окружение |
| GNOME 2.x | 191MB | 1% | Рабочее окружение |
| XFCE 4.8 | 144MB | 10% | Рабочее окружение |
| LXDE | 85MB | 10% | Рабочее окружение |
| IceWM | 85MB | 2% | Рабочее окружение |
| Enlightenment (E17 Standard) | 72MB | 1% | Оконный менеджер |
| Fluxbox | 69MB | 1% | Оконный менеджер |
| OpenBox | 60MB | 1% | Оконный менеджер |
| JWM | 58MB | 1% | Оконный менеджер |
Rockchip расширяет X Server следующими возможностями. Выбор видеокарты: можно вручную указать дискретную или встроенную графику. В секции OutputClass устройства с драйвером “rockchip” назначаются основным GPU, чтобы автоматическое перечисление не вызывало ошибок отображения. Аппаратное ускорение: поддержаны glamor и exa. Glamor использует GPU для композиции, exa — Rockchip RGA 2D; exa по умолчанию закомментирован и для использования требует снятия комментария. Обычно настройки находятся в /etc/X11/xorg.conf.d/20-modesetting.conf. Предотвращение разрывов: FlipFB=”always” постоянно включает защиту от разрыва, но потеря производительности может достигать 50%. Оптимизация: закомментированный MaxFlipRate ограничивает частоту обновления и пропуск кадров для уменьшения потерь. Отключение EDID:
Значение NoEDID=”true” отключает EDID; обычно это требуется при неверных данных EDID монитора. Коррекция гаммы: UseGammaLUT включает таблицу преобразования гаммы (LUT) для улучшения цветопередачи. Размер виртуального экрана: закомментированный параметр VirtualSize задаёт виртуальное разрешение, масштабируемое аппаратным VOP. Отступы физического экрана: закомментированный Padding задаёт пустые области по краям экрана. Настройки экрана и монитора: определены экран и монитор по умолчанию, связанные с ранее заданными устройствами; исходный поворот — “normal”. Параметр Rotate позволяет выбрать normal, left, right и другие варианты. Конфигурационный файл приведён ниже:
### Use Rockchip DRM driver
Section "OutputClass"
Identifier "RockchipDRM"
MatchDriver "rockchip"
Option "PrimaryGPU" "yes"
EndSection
Section "Device"
Identifier "Rockchip Graphics"
Driver "modesetting"
### Use Rockchip RGA 2D HW accel
# Option "AccelMethod" "exa"
### Use GPU HW accel
Option "AccelMethod" "glamor"
Option "DRI" "2"
### Set to "always" to avoid tearing, could lead to up 50% performance loss
Option "FlipFB" "always"
### Limit flip rate and drop frames for "FlipFB" to reduce performance lost
# Option "MaxFlipRate" "60"
Option "NoEDID" "true"
Option "UseGammaLUT" "true"
### Set virtual screen size (scaled by VOP hardware)
# Option "VirtualSize" "DSI-1:600x1080"
### Set physical display paddings <top,bottom,left,right>
# Option "Padding" "DSI-1:180,300,300,540"
EndSection
Section "Screen"
Identifier "Default Screen"
Device "Rockchip Graphics"
Monitor "Default Monitor"
EndSection
### Valid values for rotation are "normal", "left", "right"
Section "Monitor"
Identifier "Default Monitor"
Option "Rotate" "normal"
EndSection
Предварительно собранные пакеты:
Debian10 xserver/
├── xserver-common_1.20.4-1+deb10u3_all.deb
├── xserver-xorg-core-dbgsym_1.20.4-1+deb10u3_arm64.deb
├── xserver-xorg-core_1.20.4-1+deb10u3_arm64.deb
├── xserver-xorg-dev_1.20.4-1+deb10u3_arm64.deb
├── xserver-xorg-legacy-dbgsym_1.20.4-1+deb10u3_arm64.deb
└── xserver-xorg-legacy_1.20.4-1+deb10u3_arm64.deb
Debian11 xserver/
├── xserver-common_1.20.11-1_all.deb
├── xserver-xorg-core-dbgsym_1.20.11-1_arm64.deb
├── xserver-xorg-core_1.20.11-1_arm64.deb
├── xserver-xorg-dev_1.20.11-1_arm64.deb
├── xserver-xorg-legacy-dbgsym_1.20.11-1_arm64.deb
└── xserver-xorg-legacy_1.20.11-1_arm64.deb
Debian12 xserver/
├── xserver-common_21.1.7-3_all.deb
├── xserver-xorg-core-dbgsym_21.1.7-3_arm64.deb
├── xserver-xorg-core_21.1.7-3_arm64.deb
├── xserver-xorg-dev_21.1.7-3_arm64.deb
├── xserver-xorg-legacy-dbgsym_21.1.7-3_arm64.deb
└── xserver-xorg-legacy_21.1.7-3_arm64.deb
Журнал запуска находится в /var/log/Xorg*. Версию Xserver можно проверить следующим образом:
root@linaro-alip:~# cat /var/log/Xorg.0.log |grep "X.Org X Server"
X.Org X Server 1.20.11
Соответствующие изменения Rockchip можно проверить следующим образом:
root@linaro-alip:~# cat /var/log/Xorg.0.log |grep xorg-server
[ 26.786] xorg-server f805fe554 modesetting: Filter out invalid format
modifiers (https://www.debian.org/support)
5.25 Weston
Weston — открытый сервер отображения, эталонная реализация протокола Wayland. По сравнению с официальной версией внесены следующие изменения: динамическое управление состоянием экрана (разрешение, поворот, включение/выключение, замораживание, положение); настраиваемый размер указателя, поскольку исходный слишком мал на экранах высокого разрешения; значки рабочего стола; эффективная передача экрана по VNC; зеркальный режим; виртуальный VT пользовательского уровня; поддержка обрезанных экранов; анимация загрузки. Предварительно собранные пакеты:
weston/
├── libweston-10-0_10.0.1-1_arm64.deb
├── libweston-10-0-dbgsym_10.0.1-1_arm64.deb
├── libweston-10-dev_10.0.1-1_arm64.deb
├── weston_10.0.1-1_arm64.deb
└── weston-dbgsym_10.0.1-1_arm64.deb
5.26 Wayland
Wayland — новый открытый протокол отображения, современная альтернатива традиционной X Window System (X11). На основе последней официальной версии добавлены поддержка wayland-egl и ожидание сокета в клиентах Wayland. Предварительно собранные пакеты:
wayland
├── libwayland-bin_1.21.0-1_arm64.deb
├── libwayland-client0_1.21.0-1_arm64.deb
├── libwayland-cursor0_1.21.0-1_arm64.deb
├── libwayland-dev_1.21.0-1_arm64.deb
├── libwayland-egl1_1.21.0-1_arm64.deb
├── libwayland-egl-backend-dev_1.21.0-1_arm64.deb
└── libwayland-server0_1.21.0-1_arm64.deb
6. Основные навыки разработки для Debian
6.1 Пересборка пакетов Debian
Изменение и переупаковка сторонних пакетов Debian: apt-get build-dep <pkg> — установка зависимостей сборки; apt source <pkg> — загрузка исходного кода пакета <pkg>; создание репозитория git и применение исправлений; dpkg-buildpackage -b -uc -us -d — повторная сборка и упаковка. Ниже приведён пример изменения Xserver и повторной упаковки deb. Убедитесь, что в /etc/apt/sources.list включён deb-src, и обновите источники командой apt update.
- Install build dependencies
`apt-get build-dep xorg-server-source`
- Download Xorg-xserver source code
`apt source xorg-server-source`
- Create git and apply patches
$ cd xorg-server_*
$ git init && git add .
$ git commit -s "xxxxx"
- Start compiling and packaging deb
dpkg-buildpackage -b -uc -us -d
6.2 Сборка Debian в Docker
Поддерживается сборка соответствующего исходного кода в Docker на ПК и упаковка в deb для удобной интеграции в систему. Подробнее: <SDK>/docs/en/Linux/Docker/Rockchip_Developer_Guide_Debian_Docker_EN.pdf.
6.3 Управление разделами Debian
При загрузке Debian поддерживает проверку, изменение размера и монтирование разделов rootfs/oem/userdata. В систему добавлена служба resize-all.service для изменения размера разделов различных форматов.
Служба находится в /lib/systemd/system/resize-all.service; основные исполняемые файлы — /usr/bin/resize-helper и /usr/bin/disk-helper. Отладочный журнал — /var/log/resize-all.log, например:
root@linaro-alip:~# cat /var/log/resize-all.log
Start resizing all internal mounted partitions
Log saved to /var/log/resize-all.log
[19]: Handling /dev/sda8 /userdata ext4 rw,relatime,stripe=128
[18]: Handling /dev/sda7 /oem ext4 rw,relatime
[0]: Handling /dev/sda6 / ext4 rw,relatime
[19]: Already resized /dev/sda8(ext4)
[18]: Already resized /dev/sda7(ext4)
[0]: Already resized /dev/sda6(ext4)
При обычном монтировании root=PARTUUID=614e0000-0000 в командной строке ядра указывает корневой раздел rootfs. Разделы oem/userdata перечислены в /etc/fstab; systemd монтирует их при загрузке.
root@linaro-alip:/# cat /etc/fstab
/* <file system> <mount point> <type> <options> <dump> <pass> */
proc /proc proc defaults 0 0
devtmpfs /dev devtmpfs defaults 0 0
devpts /dev/pts devpts mode=0620,ptmxmode=0666,gid=5 0 0
tmpfs /dev/shm tmpfs nosuid,nodev,noexec 0 0
sysfs /sys sysfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
pstore /sys/fs/pstore pstore defaults 0 0
PARTLABEL=oem /oem ext4 defaults 0 2
PARTLABEL=userdata /userdata ext4 defaults 0 2
File system: Device name or UUID, or the path of a network file system (NFS).
Mount point: The mount point of the file system, such as / or /mnt/mydrive.
File system type: Such as ext4, ntfs, swap, etc.
Mount options: Options used when mounting, such as defaults, ro (read-only),
noatime, etc. Multiple options are separated by commas.
dump: This field is used for the dump command, usually set to 0, indicating no
backup is needed.
pass: This field is used for the fsck command, the number indicates the order of
fsck checking. The root file system is usually 1, other file systems are 2, set
to 0 means no check.
6.4 Адаптация графической подсистемы Debian
В настоящее время основные поддерживаемые архитектуры отображения — X11 и Wayland. Основные сочетания следующие. Стандартное сочетание для X11:
xfce4/lxde + xserver + lightdm
Стандартное сочетание для WAYLAND:
Weston+Wayland or gnome + Wayland + gdm3
6.4.1 Адаптация архитектуры отображения
X11/Xserver используется с лёгкими рабочими столами LXDE/XFCE и диспетчером входа lightdm. GNOME, один из основных рабочих столов, работает преимущественно с протоколом WAYLAND и настраивается через gdm3. Для проверки демонстрационных программ WAYLAND можно переключиться на Weston — тот же рабочий стол, что собирается через Buildroot или Yocto в SDK.
6.4.2 Адаптация оконного менеджера
Openbox — быстрый, лёгкий, расширяемый и полностью соответствующий стандартам оконный менеджер. Ветка Openbox 3 написана заново и не наследует код предшественников, хотя внешне похожа на Blackbox; Openbox 2 основывался на Blackbox 0.65.0. Openbox может работать самостоятельно либо заменять штатный оконный менеджер KDE/Gnome. KWin — оконный менеджер X Window, часть K Desktop Environment (KDE), также работающий самостоятельно или с другими рабочими столами. В KDE 4 добавлены композитный режим и OpenGL. Xfwm4 — штатный оконный менеджер Xfce4 с простым гибким пиксельным механизмом тем на основе изображений .xpm; прочие параметры задаются текстовым файлом. Можно также использовать цвета темы gtk.
6.4.3 Адаптация среды рабочего стола
GNOME 3 значительно отличается от GNOME 2.x. Интерфейс сравнительно интуитивен: нажмите «Обзор» (Activities) слева вверху или проведите пальцем для просмотра приложений, рабочих областей и т. д. В описываемых версиях дистрибутивов, включая Debian, GNOME 3 используется по умолчанию. KDE имеет меню «Пуск» в стиле Windows и эффектный интерфейс. Во многих дистрибутивах, таких как OpenSUSE, PCLinuxOS и Mandriva, KDE — рабочий стол по умолчанию.
XFCE потребляет меньше ресурсов, чем GNOME и KDE, подходит для лёгких систем и напоминает интерфейс Windows. LXDE — ещё одна из четырёх основных сред рабочего стола, также лёгкая и малотребовательная к ресурсам.
6.4.4 Адаптация Chromium
Chromium поддерживает H264, VP8, VP9, AV1 и другие видеоформаты; с версии 105 добавлен H265. В Debian интегрировано аппаратное декодирование с помощью специальной версии Chromium, плагина V4L2 и MPP. Основные изменения: включена поддержка v4l2 vda и соответствующие исправления; добавлен плагин v4l2 mpp. Ограничения: a) декодирование только vp8, h264, h265, vp9, av1; b) кодирование только vp8 и h264; c) требуется изменённая сборка Chromium, полный процесс выполняется через Yocto. Предоставляются исправления Chromium Wayland для Yocto и Buildroot. Общая схема: в Chromium включаются V4L2 VDA/VEA, при загрузке создаётся виртуальный узел v4l2; операции Chromium с ним перехватываются v4l-utils, передаются плагину v4l-rkmpp и преобразуются в вызовы интерфейса mpp.
6.4.4.1 Версия
root@linaro-alip:~# chromium --version
Chromium 126.0.6478.126 stable
6.4.4.2 Проверка
Выполните проверку следующей командой:
chromium --no-sandbox file:///usr/local/test.mp4
Тестовый сценарий находится в /rockchip-test/chromium/test_chromium_with_video.sh.
root@linaro-alip:~# /rockchip-test/chromium/test_chromium_with_video.sh
mpp[3048]: mpp_info: mpp version: 48962a10 author: Hongjin Li 2024-09-19
fix[avsd]: Fix attach dev error issue
[ 73.431901] rk_vcodec: 27b00100.rkvdec:0 session 3129:1 time: 2893 us hw 2681
us
[ 73.434160] rk_vcodec: 27b00100.rkvdec:0 session 3129:1 time: 2169 us hw 1935
us
[ 73.437078] rk_vcodec: 27b00100.rkvdec:0 session 3129:1 time: 1500 us hw 1400
us
[ 73.440013] rk_vcodec: 27b00100.rkvdec:0 session 3129:1 time: 1526 us hw 1497
us
[ 73.441579] rk_vcodec: 27b00100.rkvdec:0 session 3129:1 time: 1345 us hw 1314
us
...
В Linux4.19/5.10/6.1+ вызов аппаратного декодирования проверяется следующей командой:
export mpp_syslog_perror=1
echo 0x100 > /sys/module/rk_vcodec/parameters/mpp_dev_debug
В Linux4.4 вызов аппаратного декодирования проверяется следующей командой:
export mpp_syslog_perror=1
echo 0x4 > /sys/module/rk_vcodec/parameters/debug
6.4.4.3 Отладка
При возникновении проблем включите следующие параметры для получения дополнительных отладочных журналов.
export mpi_debug=1
export mpp_debug=1
export h264d_debug=1
Использование аппаратного ускорения можно проверить по загрузке GPU:
cat /sys/devices/platform/*gpu/utilisation
Если ускорение или аппаратное декодирование не используются, подробно исследуйте причину: GPU, адаптация libv4l, разрешения доступа и т. п. Например, создайте соответствующие узлы устройств в /etc/init.d/rockchip.sh.
/* Create dummy video node for chromium V4L2 VDA/VEA with rkmpp plugin */
echo dec > /dev/video-dec0
echo enc > /dev/video-enc0
chmod 660 /dev/video-*
chown root.video /dev/video-*
/* The chromium using fixed pathes for libv4l2.so */
ln -rsf /usr/lib/*/libv4l2.so /usr/lib/
[ -e /usr/lib/aarch64-linux-gnu/ ] && ln -Tsf lib /usr/lib64
Также настройте права соответствующих узлов ядра в /etc/udev/rules.d/99-rockchip-permissions.rules, например:
ACTION=="remove", GOTO="permissions_end"
/* VPU devices */
KERNEL=="avsd", MODE="0660", GROUP="video"
KERNEL=="vepu", MODE="0660", GROUP="video"
KERNEL=="h265e", MODE="0660", GROUP="video"
KERNEL=="rkvdec", MODE="0660", GROUP="video"
KERNEL=="rkvenc", MODE="0660", GROUP="video"
KERNEL=="mpp_service", MODE="0660", GROUP="video"
KERNEL=="vpu[_-]service", MODE="0660", GROUP="video"
KERNEL=="hevc[_-]service", MODE="0660", GROUP="video"
/* RGA device */
KERNEL=="rga", MODE="0660", GROUP="video"
/* MALI devices (/dev/mali for mali400) */
KERNEL=="mali*", MODE="0660", GROUP="video"
6.4.4.4 Тестирование производительности
По умолчанию отображение ускоряется GPU. При аппаратном декодировании Chromium включает V4L2 VDA/VEA; при загрузке создаётся виртуальный узел V4L2; v4l-utils перехватывает операции с виртуальным устройством, передаёт их плагину v4l-rkmpp, который вызывает интерфейс mpp. Распространённые браузерные тесты: ARES-6 измеряет время выполнения новейших возможностей JavaScript; преимущество имеют быстро запускающиеся и плавно работающие браузеры. Basemark Web 3.0 — комплексный тест способности браузера выполнять веб-приложения; измеряет реальную клиентскую производительность и выявляет узкие места. JetStream 2:
JetStream 2 — набор тестов JavaScript и WebAssembly для современных веб-приложений; выше оцениваются быстрый запуск, исполнение кода и плавность работы. MotionMark 1.2 измеряет способность браузера анимировать сложные сцены с заданной частотой кадров. Octane — устаревший общий тест JavaScript. Он измеряет производительность JS-движка, но неточно отражает оптимизацию для современных веб-приложений; оптимизация под Octane часто не помогает реальным страницам, а иногда замедляет их. Speedometer 2.1 измеряет отзывчивость веб-приложений, имитируя действия пользователя, например добавление задач, в демонстрационных приложениях. По сравнению с Octane он точнее отражает оптимизацию JS-движка для современных приложений.
6.4.4.5 Дополнительная информация
Дополнительные сведения о Chromium доступны по адресу chrome://about.
List of Chrome URLs
chrome://about
...
chrome://flags
chrome://gcm-internals
chrome://gpu
chrome://help
chrome://histograms
chrome://history
chrome://indexeddb-internals
chrome://inspect
chrome://interstitials
chrome://invalidations
chrome://settings
chrome://version
chrome://webrtc-internals
chrome://webrtc-logs
List of chrome://internals pages
chrome://internals/web-app
For Debug
The following pages are for debugging purposes only. Because they crash or hang
the renderer, they're not linked directly; you can type them into the address bar
if you need them.
chrome://badcastcrash/
chrome://memory-exhaust/
chrome://memory-pressure-critical/
chrome://memory-pressure-moderate/
...
chrome://quit/
chrome://restart/
6.4.5 Адаптация Panfrost для Debian
См. официальные сведения Debian об адаптации Panfrost.
6.5 Адаптация аудио и видео в Debian
Общий процесс кодирования и декодирования видео на платформе Rockchip
vpu_service --> mpp --> GStreamer/rockit --> app
vpu_service: Driver
mpp: The video encoding and decoding middleware on the Rockchip platform, refer
to the mpp documentation for details
GStreamer/rockit: Interface with app and other components
В Debian интерфейс между приложениями и компонентами кодирования/декодирования обычно обеспечивает GStreamer. Их функции можно также проверять напрямую тестовыми интерфейсами mpp, такими как mpi_dec_test и mpi_enc_test. Исходный код mpp: <SDK>/external/mpp/; демонстрационные тесты: <SDK>/external/mpp/test. Подробнее в документе SDK Rockchip_Developer_Guide_MPP_CN.pdf.
6.5.1 Адаптация звукового тракта PulseAudio
По умолчанию используется pulseaudio; обычно достаточно настроить /etc/pulse/default.pa. SDK поддерживает адаптацию кодеков ES8388 и RK809.
+set-default-source alsa_input.platform-es8388-
sound.HiFi__hw_rockchipes8388__source
+set-default-sink alsa_output.platform-es8388-sound.HiFi__hw_rockchipes8388__sink
+set-default-source alsa_input.platform-rk809-
sound.HiFi__hw_rockchiprk809__source
+set-default-sink alsa_output.platform-rk809-sound.HiFi__hw_rockchiprk809__sink
Чтобы добавить другие кодеки, получите необходимые сведения следующими командами:
pactl list sinks short
pactl list sources short
Подробности: официальная документация Debian по PulseAudio и <SDK>/docs/Common/AUDIO/Rockchip_Developer_Guide_PulseAudio_EN.pdf.
6.5.2 Адаптация MPP и VPU
По умолчанию MPP заранее собирается в deb и интегрируется в:
/usr/lib/aarch64-linux-gnu/librockchip_mpp.so
/usr/lib/aarch64-linux-gnu/librockchip_mpp.so.0
/usr/lib/aarch64-linux-gnu/librockchip_mpp.so.1
Убедитесь также, что ядро предоставляет соответствующие узлы /dev/mpp_service. Подробнее: <SDK>/docs/Linux/Multimedia/Rockchip_Developer_Guide_MPP_EN.pdf.
6.5.3 Адаптация GStreamer
См. <SDK>/docs/Linux/Multimedia/Rockchip_User_Guide_Linux_Gstreamer_EN.pdf.
6.5.4 Адаптация Rockit
См. <SDK>/docs/Linux/Multimedia/Rockchip_User_Guide_Linux_Rockit_EN.pdf.
6.6 Адаптация сети Debian
6.6.1 Адаптация RKWIFIBT
См. <SDK>/docs/Linux/Wifibt/Rockchip_Developer_Guide_Linux_WIFI_BT_EN.pdf.
6.7 Адаптация веб-камер в Debian
Стандартное приложение веб-камеры — cheese; оно вызывает GStreamer->mpp->vpu для кодирования и декодирования на Rockchip. Если cheese не требуется, встроенный GStreamer может напрямую обращаться к USB-камере и использовать 3A Rockchip для камер MIPI/CSI. Пример тестового сценария:
/rockchip-test$ tree -L 1 camera/
camera/
├── camera_rkaiq_test.sh
├── camera_rkisp_test.sh
├── camera_stresstest.sh
├── camera_test.sh
└── camera_usb_test.sh
6.7.1 Адаптация Cheese
Cheese — приложение камеры для Debian с эффектами в реальном времени, фотосъёмкой и видеозаписью. Поддерживает почти все распространённые встроенные и USB-камеры. Возможности: эффекты при фото- и видеосъёмке (чёрно-белый, комикс, рыбий глаз, масляная живопись и т. д.); съёмка фото и видео с разными разрешениями и форматами; автоматическое сохранение, а также ручной выбор каталога и имени файла; видеопредпросмотр перед съёмкой; совместимость с большинством встроенных и USB-камер. При адаптации cheese необходимо устранить следующие проблемы.
6.7.1.1 Cheese не находит подходящий узел устройства
По умолчанию Cheese ищет подходящие устройства с именами video*. Фактические имена устройств Rockchip ISP включают rkisp_mainpath, rkisp_selfpath и т. д.:
root@rk3568:~# grep '' /sys/class/video4linux/video*/name
/sys/class/video4linux/video0/name:rkisp_mainpath
/sys/class/video4linux/video1/name:rkisp_selfpath
/sys/class/video4linux/video2/name:rkisp_rawwr0
/sys/class/video4linux/video3/name:rkisp_rawwr2
/sys/class/video4linux/video4/name:rkisp_rawwr3
/sys/class/video4linux/video5/name:rkisp_rawrd0_m
/sys/class/video4linux/video6/name:rkisp_rawrd2_s
/sys/class/video4linux/video7/name:rkisp-statistics
/sys/class/video4linux/video8/name:rkisp-input-param
Сейчас проблема решается фильтрацией через плагин GStreamer v4l2. Задайте переменные окружения в /etc/profile.d/gst.sh:
# Default device for v4l2src
export GST_V4L2SRC_DEFAULT_DEVICE=/dev/video-camera0
# Available RK devices for v4l2src
export GST_V4L2SRC_RK_DEVICES=_mainpath_selfpath:_bypass:_scale
6.7.1.2 Потеря кадров камеры высокого разрешения в Cheese
При открытии imx415 в Cheese датчик MIPI теряет кадры; наблюдаются следующие признаки:
root@linaro-alip:/# cheese -d rkisp_mainpath
[ 488.510646] rkisp0-vir0: MIPI drop frame
[ 488.544222] rkisp0-vir0: MIPI drop frame
[ 488.577718] rkisp0-vir0: MIPI drop frame
[ 488.611408] rkisp0-vir0: MIPI drop frame
[ 488.644975] rkisp0-vir0: MIPI drop frame
[ 488.678581] rkisp0-vir0: MIPI drop frame
Output rkisp_mainpath Format:UYVY Size:4672x3504
Полученный от устройства размер 4672x3504 превышает возможности аппаратуры. Максимальный выход mp ISP сейчас ограничивается до 3840x2160 плагином GStreamer v4l2. Задайте переменные окружения в /etc/profile.d/gst.sh:
# Max resolution for v4l2src
export GST_V4L2SRC_MAX_RESOLUTION=3840x2160
6.7.1.3 Ошибки форматов захвата в Cheese
Драйвер ISP может не поддерживать некоторые форматы, даже если драйвер ядра сообщает об их поддержке. Например:
root@linaro-alip:~# v4l2-ctl --list-formats-ext -d /dev/video8
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'UYVY' (UYVY 4:2:2)
Size: Stepwise 32x16 - 4672x3504 with step 8/8
[1]: '422P' (Planar YUV 4:2:2)
Size: Stepwise 32x16 - 4672x3504 with step 8/8
[2]: 'NV16' (Y/CbCr 4:2:2)
Size: Stepwise 32x16 - 4672x3504 with step 8/8
...
При проверке NV12 и NV16 работали нормально, а I420 отображался неправильно; возможны и другие неподдерживаемые форматы. Старые приложения Windows часто предпочитают RGB. Если драйвер ISP объявляет поддержку RGB, но фактически её не обеспечивает, многие приложения работают неправильно.
Решение: выбрать предпочтительные форматы переменными окружения GStreamer v4l2 в /etc/profile.d/gst.sh:
# Preferred formats for videoconvert
export GST_VIDEO_CONVERT_PREFERRED_FORMAT=NV12:NV16:I420:YUY2
6.7.1.4 Зависание записи Cheese
В Cheese жёстко задан программный vp8enc, который может вызывать сбои и зависания штатного PulseAudio. Решение: добавить поддержку программного кодирования vp8enc через GStreamer и обновить PulseAudio. Задайте переменные окружения в /etc/profile.d/gst.sh:
export GST_MPP_VP8ENC_FAKE_VP8ENC=1
6.7.1.5 Использование mpp для видеозаписи Cheese
Cheese по умолчанию использует малопроизводительный программный кодировщик vvp8enc. Стандартное изменение принудительно включает аппаратный mppvp8enc из Rockchip mpp.
--- a/libcheese/cheese-camera.c
+++ b/libcheese/cheese-camera.c
@@ -442,7 +442,7 @@ cheese_camera_set_video_recording (CheeseCamera *camera,
GError **error)
gboolean res;
/* Check if we can use global preset for vp8enc. */
- video_enc = gst_element_factory_make ("vp8enc", "vp8enc");
+ video_enc = gst_element_factory_make ("mppvp8enc", "vp8enc");
video_preset = (gchar *) &CHEESE_VIDEO_ENC_PRESET;
res = gst_preset_load_preset (GST_PRESET (video_enc), video_preset);
Проверить можно следующим образом:
root@linaro-alip:/# gst-inspect-1.0 |grep vp8
vpx: vp8dec: On2 VP8 Decoder
vpx: vp8enc: On2 VP8 Encoder
rtp: rtpvp8depay: RTP VP8 depayloader
rtp: rtpvp8pay: RTP VP8 payloader
rockchipmpp: mppvp8enc: Rockchip Mpp VP8 Encoder
Ниже приведены возможности кодирования микросхем Rockchip. Таблица характеристик кодирования:
| Микросхема | H264 | H265 | VP8 |
|---|---|---|---|
| RK3588 | 7680x4320@30f | 7680x4320@30f | 1920x1088@30f |
| RK3566/RK3568 | 1920x1088@60f | 1920x1088@60f | Не применимо |
| RK3562 | 1920x1088@60f | Не применимо | Не применимо |
| RK3399 | 1920x1088@30f | Не применимо | 1920x1088@30f |
| RK3328 | 1920x1088@30f | 1920x1088@30f | 1920x1088@30f |
| RK3288 | 1920x1088@30f | Не применимо | 1920x1088@30f |
| RK3326 | 1920x1088@30f | Не применимо | 1920x1088@30f |
| PX30 | 1920x1088@30f | Не применимо | 1920x1088@30f |
| RK312X | 1920x1088@30f | Не применимо | 1920x1088@30f |
6.7.1.6 Изменение каталога хранения фотографий и видео Cheese
По умолчанию изображения и видео сохраняются в ~/.gnome2/cheese. Чтобы изменить путь, выполните следующие действия:
cat << EOF >~/.config/user-dirs.dirs
> #!/bin/bash
> XDG_DESKTOP_DIR="$HOME/Desktop"
> XDG_DOWNLOAD_DIR="$HOME/Downloads"
> XDG_TEMPLATES_DIR="$HOME/Templates"
> XDG_PUBLICSHARE_DIR="$HOME/Public"
> XDG_DOCUMENTS_DIR="$HOME/Documents"
> XDG_MUSIC_DIR="$HOME/Music"
> XDG_PICTURES_DIR="$HOME/Pictures"
> XDG_VIDEOS_DIR="$HOME/Videos"
> EOF
XDG_VIDEOS_DIR задаёт каталог видео, XDG_PICTURES_DIR — каталог изображений.
6.7.2 Адаптация RKISP
Поддерживается ISP1.X, главным образом для RK3399/RK3288/PX30/RK3326.
rkisp/
└── camera_engine_rkisp-v2.2.0_arm64.deb
6.7.3 Адаптация RKAIQ
Поддерживаются версии ISP21/30/32-Lite, главным образом для RK3566/RK3568/RK3588/RK3562 и других микросхем.
rkaiq/
├── camera_engine_rkaiq_rk3562_arm64.deb
├── camera_engine_rkaiq_rk3568_arm64.deb
└── camera_engine_rkaiq_rk3588_arm64.deb
6.7.3.1 Отладка RKAIQ
Проверка версии rkaiq и соответствующих журналов
root@linaro-alip:/# cat /var/log/syslog |grep rkaiq
...
Jun 18 17:37:50 linaro-alip rkaiq: ************************** VERSION INFOS
**************************
Jun 18 17:37:50 linaro-alip rkaiq: version release date: 2023-10-07
Jun 18 17:37:50 linaro-alip rkaiq: AIQ: AIQ v5.0x4.0
Jun 18 17:37:50 linaro-alip rkaiq: IQ PARSER: Calib
v1.4.8,magicCode:1170944
Jun 18 17:37:50 linaro-alip rkaiq: ************************ VERSION INFOS END
************************
Проверьте работу службы rkaiq: root@linaro-alip:/# ps aux |grep rkaiq; пример вывода: root 2339 0.0 0.4 163020 8076 ? Sl 17:37 0:00 /usr/bin/rkaiq_3A_server; root 2340 0.0 0.0 8508 1240 ? S 17:37 0:00 logger -t rkaiq; root 2699 0.0 0.0 6264 604 ttyFIQ0 S+ 17:42 0:00 grep rkaiq. Отладочные журналы ISP ядра: echo 3 > /sys/module/video_rkisp/parameters/debug; echo 3 > /sys/module/video_rkcif/parameters/debug. Журналы rkaiq: AE — echo 0x1ff4 > /tmp/.rkaiq_log; AWB — echo 0x2ff4 > /tmp/.rkaiq_log; AF — echo 0x4ff4 > /tmp/.rkaiq_log; HDR — echo 0x20ff3 > /tmp/.rkaiq_log; NR — echo 0x40ff4 > /tmp/.rkaiq_log.
root@linaro-alip:/# ps aux |grep rkaiq
root 2339 0.0 0.4 163020 8076 ? Sl 17:37 0:00 /usr/bin/rkaiq_3A_server
root 2340 0.0 0.0 8508 1240 ? S 17:37 0:00 logger -t rkaiq
root 2699 0.0 0.0 6264 604 ttyFIQ0 S+ 17:42 0:00 grep rkaiq
echo 3 > /sys/module/video_rkisp/parameters/debug
echo 3 > /sys/module/video_rkcif/parameters/debug
# AE
echo 0x1ff4 > /tmp/.rkaiq_log
# AWB
echo 0x2ff4 > /tmp/.rkaiq_log
# AF
echo 0x4ff4 > /tmp/.rkaiq_log
# HDR
echo 0x20ff3 > /tmp/.rkaiq_log
# NR
echo 0x40ff4 > /tmp/.rkaiq_log
Журнал Dehaze: echo 0x2000ff3 > /tmp/.rkaiq_log; Sharp: echo 0x80000ff4 > /tmp/.rkaiq_log; CAMHW: echo 0x4000000ff4 > /tmp/.rkaiq_log. Проверка информации об узлах устройств:
# Dehaze
echo 0x2000ff3 > /tmp/.rkaiq_log
# Sharp
echo 0x80000ff4 > /tmp/.rkaiq_log
# CAMHW
echo 0x4000000ff4 > /tmp/.rkaiq_log
root@linaro-alip:/# grep '' /sys/class/video4linux/video*/name
/sys/class/video4linux/video0/name:stream_cif_mipi_id0
/sys/class/video4linux/video1/name:stream_cif_mipi_id1
/sys/class/video4linux/video2/name:stream_cif_mipi_id2
/sys/class/video4linux/video3/name:stream_cif_mipi_id3
/sys/class/video4linux/video4/name:rkcif_scale_ch0
/sys/class/video4linux/video5/name:rkcif_scale_ch1
/sys/class/video4linux/video6/name:rkcif_scale_ch2
/sys/class/video4linux/video7/name:rkcif_scale_ch3
/sys/class/video4linux/video8/name:rkcif_tools_id0
/sys/class/video4linux/video9/name:rkcif_tools_id1
/sys/class/video4linux/video10/name:rkcif_tools_id2
...
6.8 Адаптация управления питанием Debian
6.8.1 Адаптация управления питанием
Управление питанием Debian достаточно сложно: разные системы имеют несколько путей перехода в сон. Добавленный сценарий кнопки power-key.sh использует pm-utils либо прямую запись в узлы; команда pm-utils записывает в узлы после выполнения hook-сценариев. Автоматический сон в xfce4, mate, gnome и других рабочих столах обычно сначала использует systemd, затем consolekit или pm-utils; systemd непосредственно записывает в узлы. Здесь приоритет унифицирован: systemd по умолчанию использует pm-utils для сна и пробуждения. Соответствующие файлы конфигурации уже интегрированы в overlay/etc/Powermanager Debian.
├── 01npu
├── 02npu
├── 03wifibt
├── 04wifibt
├── power-key.conf
├── power-key.sh
├── triggerhappy
└── triggerhappy.service
В etc/init.d/rockchip.sh есть специальная обработка управления питанием, особенно для NPU и RKWIFIBT, а также обработка кнопки питания.
# support power management
if [ -e "/usr/sbin/pm-suspend" -a -e /etc/Powermanager ] ;
then
mv /etc/Powermanager/power-key.sh /usr/bin/
mv /etc/Powermanager/power-key.conf /etc/triggerhappy/triggers.d/
if [[ "$CHIPNAME" == "rk3399pro" ]];
then
mv /etc/Powermanager/01npu /usr/lib/pm-utils/sleep.d/
mv /etc/Powermanager/02npu /lib/systemd/system-sleep/
fi
mv /etc/Powermanager/03wifibt /usr/lib/pm-utils/sleep.d/
mv /etc/Powermanager/04wifibt /lib/systemd/system-sleep/
mv /etc/Powermanager/triggerhappy /etc/init.d/triggerhappy
rm /etc/Powermanager -rf
service triggerhappy restart
fi
Особую обработку пробуждения других модулей можно разместить в следующих двух каталогах конфигурации.
/usr/lib/pm-utils/sleep.d/ and /lib/systemd/system-sleep/
Тест сна и пробуждения: /rockchip-test/suspend_resume/suspend_resume.sh. Обработка для других микросхем описана в <SDK>/docs/en/Common/TRUST/Rockchip_RK3588_Developer_Guide_System_Suspend_EN.pdf.
6.8.2 Настройка управления питанием
Раздел описывает настройку питания xfce4, главным образом DPMS и сна. Подробная конфигурация приведена ниже:
#/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml
<channel name="xfce4-power-manager" version="1.0">
<property name="xfce4-power-manager" type="empty">
<!-- Let other power manager(e.g. trigger-happy) handle power key -->
<property name="power-button-action" type="uint" value="0"/>
<!-- Disable DPMS(auto screen-off) by default -->
<property name="dpms-enabled" type="bool" value="false"/>
<property name="blank-on-ac" type="int" value="0"/>
<!-- Disable Screen lock by default -->
<property name="lock-screen-suspend-hibernate" type="bool" value="false"/>
</property>
</channel>
6.9 Адаптация ИИ в Debian
Адаптация NPU платформы Rockchip: RKNPU используется главным образом для преобразования моделей, инференса и оценки производительности моделей.
6.9.1 Адаптация RKNPU
Главным образом для RK3568/RK3566/RK3588.
rknpu2/
└── rknpu2.tar
6.9.2 Проверка RKNN
Включает прежде всего тесты изменения частоты NPU, нагрузочные и демонстрационные тесты.
/rockchip-test/npu2/
├── npu_freq_scaling.sh
├── npu_stress_test.sh
├── npu_test.sh
├── rknn_demo.sh
└── rknn_stress_test
6.10 Обновление прошивки Debian
Основные способы обновления прошивки Debian: USB; загрузка с SD-карты или USB-накопителя; программатор; OTA. OTA подразделяется на обновление через Recovery (Loader, Parameter, прочие и пользовательские разделы), обновление A/B-разделов и дифференциальное обновление. Подробнее: <SDK>/docs/en/Linux/Recovery/Rockchip_Developer_Guide_Linux_Upgrade_EN.pdf.
6.11 Безопасная загрузка Debian
6.11.1 Безопасная загрузка
Основные методы безопасной загрузки — AVB и FIT; поддержка по микросхемам приведена ниже:
| Микросхема | Метод проверки ядра | Версия ядра | Носитель хранения |
|---|---|---|---|
| RK3399/RK3288 | AVB | 4.4 | eFuse |
| RK3308/RK3328/RK3326/PX30/RK3358 | AVB | 4.4 | OTP |
| RK3588/RK3562/RK3566/RK3568 | FIT | 5.10 | OTP |
Подробнее: <SDK>/docs/en/Linux/Security/Rockchip_Developer_Guide_Linux_Secure_Boot_EN.pdf.
6.12 Адаптация сенсорного ввода Debian
Настройте параметры матрицы X server либо проверьте их из командной строки.
6.13 Адаптация USB-устройств Debian
Добавлены службы usbdevice для функций usb adb/acm/hid/mtp/ntb/rndis/uac1/uac2/ums/uvc. Служба находится в /lib/systemd/system/usbdevice.service, основной исполняемый файл — /usr/bin/usbdevice. Функции USB настраиваются в /etc/profile.d/usbdevice.sh, например:
#!/bin/sh
# The env variables below can be overridden
# option: adb acm hid mtp ntb rndis uac1 uac2 ums uvc
export USB_FUNCS="adb"
export UMS_FILE=/userdata/ums_shared.img
export UMS_SIZE=256M
export UMS_FSTYPE=vfat
export UMS_MOUNT=0
export UMS_MOUNTPOINT=/mnt/ums
export UMS_RO=0
Отладочный журнал находится в /tmp/usbdevice.log. Поддерживаемые функции USB можно проверить в /tmp/.usbdevice.
6.14 Адаптация датчиков Debian
gsensor/lsensor. Установите пакет lm-sensors.
sudo apt-get install lm-sensors
Обнаружение датчиков системы
sudo sensors-detect
Будут найдены датчики системы и предложено включить поддержку каждого типа. Следуйте запросам для нужных датчиков. Проверка установки:
sensors
6.15 Сведения о системе Debian
6.15.1 Точный номер версии Debian
root@linaro-alip:~# cat /etc/debian_version
11.8
6.15.2 Сведения о версии Debian
root@linaro-alip:~# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
BUILD_INFO="root@pc April 27, 2022 Wednesday 11:49:33 CST"
6.15.3 Аппаратные сведения системы Debian
root@linaro-alip:~# hardinfo -r
Computer
Summary
Operating System
Kernel Modules
Boots
Languages
Filesystems
Display
Environment Variables
Development
Users
Groups
...
6.15.4 Системные журналы Debian
/info/
├── clk_summary -> /sys/kernel/debug/clk/clk_summary
├── cmdline -> /proc/cmdline
├── cpuinfo -> /proc/cpuinfo
├── device-tree -> /proc/device-tree
├── diskstats -> /proc/diskstats
├── dma_buf -> /sys/kernel/debug/dma_buf
├── dri -> /sys/kernel/debug/dri
├── fstab -> /etc/fstab
├── gpio -> /sys/kernel/debug/gpio
├── interrupts -> /proc/interrupts
├── iomem -> /proc/iomem
├── kallsyms -> /proc/kallsyms
├── log -> /var/log
├── meminfo -> /proc/meminfo
├── mountall.log -> /tmp/mountall.log
├── os-release -> /etc/os-release
├── partitions -> /proc/partitions
├── pinctrl -> /sys/kernel/debug/pinctrl/
├── rkcif-mipi-lvds -> /proc/rkcif-mipi-lvds
├── rk_dmabuf -> /proc/rk_dmabuf
├── rkisp0-vir0 -> /proc/rkisp0-vir0
├── slabinfo -> /proc/slabinfo
├── softirqs -> /proc/softirqs
├── version -> /proc/version
└── wakeup_sources -> /sys/kernel/debug/wakeup_sources
...
6.16 Сокращение Debian
С добавлением функций в каждом выпуске Debian требует больше дискового пространства. Здесь рассматривается сокращение компонентов настольной версии для Rockchip ARM. Для уменьшения образа можно удалить базовые пакеты прошивки, например:
debian/ubuntu-build-service/bullseye-desktop-arm64/customization/package-
lists/linaro.list.chroot
Пакеты, добавленные shell-скриптом rockchip
mk-rootfs-buster.sh
Также можно сократить следующее: в mesa-пакете libgl1-mesa-dri, каталог /usr/lib/*/dri/, оставить только kms_swrast_dri.so и swrast_dri.so, поскольку остальные не используются; в linux-firmware (если установлен), каталог /usr/lib/firmware, оставить только используемые прошивки (заказчикам обычно не нужны); в packages оставить только x11 mali для своего чипа; var/cache. При создании образа также можно изменить размер файла dd-образа в mk-image.sh, например:
truncate -s 2500M rootfs.img
mkfs.ext4 -d binary rootfs.img
Основное использование дискового пространства:
root@pc:/# du -sh */
120M bin/
22M boot/
12K dev/
10M etc/
20K home/
1.6G lib/
4.0K media/
4.0K mnt/
4.0K opt/
4.0K proc/
36M rockchip-test/
28K root/
44K run/
26M sbin/
4.0K srv/
4.0K sys/
18M system/
4.0K tmp/
1.3G usr/
73M var/
8.0K vendor/
Размер установленных пакетов также можно посмотреть следующим образом:
dpkg-query -Wf '${Installed-size}K\t${Package}\t${Status}\n' | grep -w installed
| column -t|sort -h
6.17 Тестирование Debian
Интеграция нагрузочного скрипта Rockchip: rockchip_test объединяет функциональные, нагрузочные и производительные тесты.
root@linaro-alip:~# /rockchip-test/rockchip_test.sh
cpu test: 1 (cpufreq stresstest)
ddr test: 2 (memtester & stressapptest)
gpu test: 3 (use glmark2)
npu test: 4 (npu2:rk3588)
auto reboot test: 5 (reboot tests)
suspend_resume test: 6 (suspend & resume)
nand power lost test: 7 (S5 stress tests)
flash stress test: 8 (flash tests)
audio test: 9 (audio tests)
recovery test: 10 (default wipe all)
bluetooth test: 11 (bluetooth on&off test)
wifi test: 12 (wifi on&off test)
ethernet test: 13 (ethernet tests)
camera test: 14 (use rkaiq_demo)
video test: 15 (use gstreamer-wayland and app_demo)
chromium test: 16 (chromium with video hardware acceleration)
hardware information: 17 (to get the hardware information)
*****************************************************
please input your test module:
6.18 Инструменты отладки Debian
6.18.1 Инструменты ADB
6.18.1.1 Обзор ADB
Запуск shell устройства; управление перенаправлением портов эмулятора или устройства; передача файлов между компьютером и устройством в обоих направлениях.
Установка локального ПО на устройства Debian. ADB — программа «клиент-сервер»: клиентом обычно является ПК, сервером — физическая или виртуальная машина устройства Debian. По способу подключения различают сетевой ADB, где хост соединяется с STB по проводной/беспроводной сети в одной LAN, и USB ADB, где используется USB-кабель.
6.18.1.2 Использование USB ADB
Ограничения USB ADB: только порты USB OTG; одновременная работа нескольких клиентов не поддерживается; хост подключается только к одному устройству, не к нескольким. Для проверки подключения выполните “adb devices”. Появление серийного номера устройства означает успешное подключение.
6.18.2 Анализ загрузки через systemd-analyze
systemd-analyze анализирует производительность загрузки и время запуска служб. Показать время каждого этапа инициализации:
root@linaro-alip:/# systemd-analyze time
Startup finished in 1.523s (kernel) + 3.833s (userspace) = 5.357s
graphical.target reached after 3.810s in userspace
Список времени инициализации всех units
root@linaro-alip:/# systemd-analyze blame
1.680s rkwifibt.service
1.368s keyboard-setup.service
1.148s console-setup.service
588ms blueman-mechanism.service
557ms dev-mmcblk0p6.device
495ms usbdevice.service
319ms udisks2.service
287ms resize-all.service
283ms systemd-udev-trigger.service
246ms systemd-journal-flush.service
203ms user@0.service
198ms user@1000.service
196ms NetworkManager.service
185ms nginx.service
185ms systemd-rfkill.service
184ms systemd-journald.service
...
6.18.3 Инструмент настройки производительности
Инструмент perf; краткое описание использования:
apt install -fy linux-perf-5.10
root@linaro-alip:/# perf
usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS]
The most commonly used perf commands are:
annotate Read perf.data (created by perf record) and display annotated
code
archive Create archive with object files with build-ids found in
perf.data file
bench General framework for benchmark suites
buildid-cache Manage build-id cache.
buildid-list List the buildids in a perf.data file
c2c Shared Data C2C/HITM Analyzer.
config Get and set variables in a configuration file.
data Data file related processing
diff Read perf.data files and display the differential profile
evlist List the event names in a perf.data file
ftrace simple wrapper for kernel's ftrace functionality
inject Filter to augment the events stream with additional
information
kallsyms Searches running kernel for symbols
kmem Tool to trace/measure kernel memory properties
kvm Tool to trace/measure kvm guest os
list List all symbolic event types
lock Analyze lock events
mem Profile memory accesses
record Run a command and record its profile into perf.data
report Read perf.data (created by perf record) and display the
profile
sched Tool to trace/measure scheduler properties (latencies)
script Read perf.data (created by perf record) and display trace
output
stat Run a command and gather performance counter statistics
test Runs sanity tests.
timechart Tool to visualize total system behavior during a workload
top System profiling tool.
version display the version of perf binary
probe Define new dynamic tracepoints
trace strace inspired tool
7. Обновления безопасности Debian
Справочник обновлений безопасности: Debian-security. Последние обновления удобно получать через APT. Чтобы система Debian получала их, добавьте следующую строку в /etc/apt/sources.list:
deb http://security.debian.org/debian-security bookworm-security main contrib
non-free non-free-firmware
Сохраните изменения и выполните две команды для загрузки и установки обновлений безопасности:
apt-get update && apt-get upgrade
Если обнаружена уязвимость в своём или чужом пакете, сообщите команде безопасности по адресу team@security.debian.org. Она отслеживает уязвимости, помогает сопровождающим исправлять их либо исправляет сама, выпускает уведомления и поддерживает security.debian.org. Последние уведомления: следующая страница представляет краткий архив сообщений списка debian-security-announce.
[2023/08/07] DSA-5471-1 libhtmlcleaner-java security update
[2023/08/06] DSA-5470-1 python-werkzeug security update
[2023/08/05] DSA-5469-1 thunderbird security update
[2023/08/05] DSA-5468-1 webkit2gtk security update
[2023/08/04] DSA-5467-1 chromium security update
[2023/08/04] DSA-5466-1 ntpsec security update
[2023/08/03] DSA-5465-1 python-django security update
[2023/08/03] DSA-5464-1 firefox-esr security update
[2023/07/30] DSA-5463-1 thunderbird security update
[2023/07/30] DSA-5462-1 linux security update
[2023/07/30] DSA-5461-1 linux security update
[2023/07/26] DSA-5460-1 curl security update
[2023/07/25] DSA-5459-1 amd64-microcode security update
[2023/07/25] DSA-5458-1 openjdk-17 security update
[2023/07/22] DSA-5457-1 webkit2gtk security update
[2023/07/20] DSA-5456-1 chromium security update
[2023/07/17] DSA-5455-1 iperf3 security update
[2023/07/16] DSA-5454-1 kanboard security update
[2023/07/16] DSA-5453-1 linux security update
[2023/07/14] DSA-5452-1 gpac security update
[2023/07/09] DSA-5451-1 thunderbird security update
8. План развития Debian
Согласно источнику RK поддерживает официальные версии от stretch (9) до bookworm (12), с основным сопровождением bullseye (11).
| Версия | Выпуск Debian | Выпуск SDK | Окончание LTS |
|---|---|---|---|
| Stretch (9) | 2017-06-17 | 2018-06-20 | 2022-07-01 |
| Buster (10) | 2019-07-06 | 2020-12-11 | 2024-06-30 |
| Bullseye (11) | 2021-08-14 | 2022-01-15 | ~ 2026 |
| Bookworm (12) | 2023-06-10 | 2023 Q4 | ~ 2028 |
Версии Debian LTS обновляются каждые два года. Подробнее см. официальные сведения о выпусках Debian-Release.
9. Частые вопросы Debian
Раздел отвечает на частые вопросы Debian GNU/Linux на Rockchip. Дополнительные сведения — в официальном Debian FAQ.
9.1 Проблемы “noexec or nodev”
noexec or nodev issue /usr/share/debootstrap/functions: line 1450:
..../rootfs/ubuntu-build-service/buster-desktop-arm64/chroot/test-dev-null:
Permission denied E: Cannot install into target '/rootfs/ubuntu-build-
service/buster-desktop-arm64/chroot' mounted with noexec or nodev
Решение:
mount -o remount,exec,dev xxx
Здесь xxx — путь каталога проекта; затем повторите сборку.
При других ошибках сборки прежде всего проверьте тип файловой системы ext2/ext4 как возможный фактор.
9.2 Проблемы загрузки “Base Debian”
Для сборки Base Debian нужен доступ к зарубежным сайтам, загрузки с которых из Китая часто не удаются. Debian использует live build; зеркало можно заменить на китайское следующим образом:
32位系统:
+++ b/ubuntu-build-service/{buster/bullseye}-desktop-armhf/configure
@@ -11,6 +11,11 @@ set -e
echo "I: create configuration"
export LB_BOOTSTRAP_INCLUDE="apt-transport-https gnupg"
lb config \
+ --mirror-bootstrap "http://mirrors.ustc.edu.cn/debian" \
+ --mirror-chroot "http://mirrors.ustc.edu.cn/debian" \
+ --mirror-chroot-security "http://mirrors.ustc.edu.cn/debian-security" \
+ --mirror-binary "http://mirrors.ustc.edu.cn/debian" \
+ --mirror-binary-security "http://mirrors.ustc.edu.cn/debian-security" \
--apt-indices false \
--apt-recommends false \
--apt-secure false \
64位系统:
--- a/ubuntu-build-service/{buster/bullseye}-desktop-arm64/configure
+++ b/ubuntu-build-service/{buster/bullseye}-desktop-arm64/configure
@@ -11,6 +11,11 @@ set -e
echo "I: create configuration"
export LB_BOOTSTRAP_INCLUDE="apt-transport-https gnupg"
lb config \
+ --mirror-bootstrap "http://mirrors.ustc.edu.cn/debian" \
+ --mirror-chroot "http://mirrors.ustc.edu.cn/debian" \
+ --mirror-chroot-security "http://mirrors.ustc.edu.cn/debian-security" \
+ --mirror-binary "http://mirrors.ustc.edu.cn/debian" \
+ --mirror-binary-security "http://mirrors.ustc.edu.cn/debian-security" \
--apt-indices false \
--apt-recommends false \
--apt-secure false \
Если другие сетевые проблемы мешают загрузить пакеты, готовые пакеты доступны на Baidu Cloud Disk. Поместите их в текущий каталог и сразу переходите к следующему шагу.
9.3 Ошибка монтирования /dev после нештатных операций
Например, возникает ошибка «askpass command or cannot use one».
Причиной могут быть частые нештатные прерывания сборки (CTRL+C). Исправить можно следующим образом:
sudo -S umount /dev
9.4 Ошибка /dev после многократного монтирования
Например, возникает ошибка sudo: unable to allocate pty: No such device.
Причиной может быть многократное монтирование во время сборки. Исправление:
ssh <⽤⼾名>@<IP地址> -T sudo -S umount /dev -l
9.5 Просмотр сведений о системе
9.5.1 Проверка версии Debian
root@linaro-alip:~# cat /etc/debian_version
11.1
9.5.2 Как определить, используется X11 или Wayland
В системе X11:
$ echo $XDG_SESSION_TYPE
x11
В системе Wayland:
$ echo $XDG_SESSION_TYPE
wayland
9.5.3 Проверка разделов системы
root@linaro-alip:~# parted -l
Model: MMC BJTD4R (sd/mmc)
Disk /dev/mmcblk0: 31.3GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 8389kB 12.6MB 4194kB uboot
2 12.6MB 16.8MB 4194kB misc
3 16.8MB 83.9MB 67.1MB boot
4 83.9MB 218MB 134MB recovery
5 218MB 252MB 33.6MB backup
6 252MB 15.3GB 15.0GB ext4 rootfs
7 15.3GB 15.4GB 134MB ext2 oem
8 15.6GB 31.3GB 15.6GB ext2 userdata
9.5.4 Сбой службы SSH
Проблема встречается в Debian10 и более ранних версиях. Добавьте в /etc/rc.local:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Generate the SSH keys if non-existent
if [ ! -f /etc/ssh/ssh_host_rsa_key ]
then
# else ssh service start in dpkg-reconfigure will fail
systemctl stop ssh.socket||true
dpkg-reconfigure openssh-server
fi
exit 0
9.6 Ошибка сборки базового пакета Debian11
Пример возникающей ошибки:
W: Failure trying to run: /sbin/ldconfig
W: See //debootstrap/debootstrap.log for details
Основное требование — ядро ПК 5.10+ из-за ошибки старых QEMU. Два решения: обеспечить на ПК ядро 5.10+; проверить его версию:
cat /proc/version
Linux version 5.13.0-39-generic
Либо обновить QEMU системы; см. QEMU.
9.7 Распаковка, изменение и повторная упаковка deb-пакетов Debian
Для изменения и повторной упаковки существующего deb-пакета выполните следующие шаги:
# Extract the package files into the extract directory
dpkg -X xxx.deb extract/
# Extract the package control information into extract/DEBIAN/
dpkg -e xxx.deb extract/DEBIAN/
# Modify the file XXX
# Repackage the modified content to generate a deb package
dpkg-deb -b extract/ .
9.8 Добавление swap в Debian
При нехватке физической памяти можно добавить swap для запущенных программ. Например, создайте 2G виртуальной памяти. Создание swap-файла:
cd /opt
mkdir swap
dd if=/dev/zero of=swapfile bs=1024 count=2000000
# count represents the size, which is 2G here.
Преобразовать файл в swap
sudo mkswap swapfile
Активировать swap-файл
swapon /opt/swapfile
To deactivate:
swapoff /opt/swapfile
Для автоматического подключения после загрузки добавьте в /etc/fstab, например: /opt/swapfile swap swap defaults 0 0. Проверить действие:
root@linaro-alip:/opt# free -h
total used free shared buff/cache available
Memory: 1.9Gi 390Mi 91Mi 75Mi 1.5Gi 1.4Gi
Swap: 1.9Gi 0B 1.9Gi
9.9 Первое обновление Debian может перезапустить службу отображения
Универсальная Debian-система при первом выполнении /etc/init.d/rockchip.sh устанавливает зависящие от чипа пакеты, например libmali и isp, для совместимости с разными микросхемами. Затем перезапускается служба отображения. В отдельном проекте различия можно учесть при создании образа.
9.10 Проблемы вызова dri.so, связанного с libGL
Объяснение: EGL — расширение OpenGL для ARM и оконной системы X, функционально соответствующее glx на x86. Xorg использует modesetting, по умолчанию загружающий libglx.so. Отключение glx может мешать запуску приложений, проверяющих GLX. libglx.so ищет библиотеки реализации DRI, но 2D-ускорение Xorg здесь напрямую основано на DRM и не реализует библиотеку DRI. Поэтому при запуске libglx.so сообщает следующую ошибку.
AIGLX error: dlopen of /usr/lib/aarch64-linux-gnu/dri/rockchip_dri.so failed
Это не влияет на работу системы и не требует обработки. По той же причине приложения при запуске могут выводить следующие ошибки, которые также не требуют обработки и не мешают работе приложения.
libGL error: unable to load driver: rockchip_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: rockchip
9.11 Проверка использования аппаратного слоя указателя в Debian
Конфигурация DTS ядра задана. Пример журнала:
root@linaro-alip:~# dmesg |grep cursor
[ 2.062561] rockchip-vop2 fe040000.vop: [drm:vop2_bind] Cluster1-win0 as
cursor plane for vp0
[ 2.062669] rockchip-vop2 fe040000.vop: [drm:vop2_bind] Cluster0-win0 as
cursor plane for vp1
Проверить через modetest, сообщается ли слой
102 0 0 0,0 0,0 0 0x00000002
formats: XR30 AR30 XB30 AB30 XR24 AR24 XB24 AB24 RG24 BG24 RG16 BG16 YU08 YU10
YUYV Y210
props:
8 type:
flags: immutable enum
enums: Overlay=0 Primary=1 Cursor=2
value: 2
Проверьте в summary использование аппаратного слоя курсора: root@linaro-alip:~# cat /sys/kernel/debug/dri/0/summary |grep 64 x 64. Если шаги 1/2 подтверждены, но проблема остаётся, проверьте /var/log/drm-cursor.log.
9.12 Размер журналов Debian
Debian предоставляет logrotate для управления многочисленными журналами. Он автоматически ротирует, сжимает и удаляет файлы, отправляет связанные с журналами письма. Запуск возможен ежедневно, еженедельно, ежемесячно или при достижении заданного размера файла. Обычно это ежедневная задача cron.
apt install -fy logrotate cron
9.13 Настройка multi-user target в Debian
При старте systemd пытается запустить /lib/systemd/system/default.target, обычно символическую ссылку на “graphical.target” для графических систем. Состояние можно получить командой:
systemctl get-default
graphical.target
Задать многопользовательский режим командной строки
systemctl set-default multi-user.target
После перезагрузки экран остаётся на логотипе, войти в систему не удаётся.
Обычная последовательность запуска: sysinit->multi-user->graphic. При multi-user.target графический интерфейс не запускается. Нужен VT2 с включённым терминальным взаимодействием, то есть следующие два макроса ядра:
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_VT=y
9.14 Имя пользователя и пароль Debian
В описанной системе имя пользователя и пароль по умолчанию — linaro и linaro. Учётная запись root допускает вход без пароля; переключиться на неё можно командой sudo su.
9.15 Ошибка двойного щелчка по значкам XFCE в Debian
В XFCE есть исходная ошибка, которую можно обойти в Settings--->Desktop--->Icons, включив Single-click to activate items.
9.16 Параметр командной строки Chromium –no-sandbox
Исключение — штатная официальная версия браузера без аппаратного ускорения. Специальные версии запускаются с -no-sandbox: песочница управляет правами доступа к файлам; её отключение позволяет обращаться к аппаратным узлам для ускорения.
9.17 Поддержка расширения DRI2 в Debian X11
glmark2-es2 из SDK и библиотека Mali GPU выводят изображение через dri2.
Реализацию см. в коде xserver: ./hw/xfree86/drivers/modesetting/dri2.c, ms_dri2_get_msc и ms_dri2_schedule_wait_msc.
Поддержку DRI2 в Xserver можно проверить по следующему журналу:
root@linaro-alip:/# grep -i dri2 /var/log/Xorg.0.log
[ 47.696] (II) modeset(0): [DRI2] Setup complete
[ 47.699] (II) modeset(0): [DRI2] DRI driver: rockchip
[ 47.712] (II) modeset(0): [DRI2] VDPAU driver: rockchip
[ 48.502] (II) Initializing extension DRI2
Ниже приведён тест DRI2 в файле dri2-test.c.
#include <stdlib.h>
#include <stdio.h>
#include <xcb/xcb.h>
#include <xcb/dri2.h>
#include <X11/Xlib.h>
#include <X11/Xlib-xcb.h>
int main(void)
{
xcb_connection_t *c;
xcb_dri2_connect_cookie_t cookie;
xcb_dri2_connect_reply_t *reply;
Display *display = XOpenDisplay(NULL);
Window window = DefaultRootWindow(display);
c = XGetXCBConnection(display);
cookie = xcb_dri2_connect(c, window, XCB_DRI2_DRIVER_TYPE_DRI);
reply = xcb_dri2_connect_reply(c, cookie, 0);
printf("%s[%d] device(%s)\n", __func__, __LINE__,
xcb_dri2_connect_device_name (reply));
c = xcb_connect(NULL, NULL);
xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(c)).data;
cookie = xcb_dri2_connect(c, screen->root, XCB_DRI2_DRIVER_TYPE_DRI);
reply = xcb_dri2_connect_reply(c, cookie, 0);
printf("%s[%d] device(%s)\n", __func__, __LINE__,
xcb_dri2_connect_device_name (reply));
return 0;
}
Сборка и проверка:
$ gcc dri2-test.c -lxcb -lxcb-dri2 -lX11 -lX11-xcb -o dri2-test
$ ./dri2-test
main[21] device(/dev/dri/card0)
main[27] device(/dev/dri/card0)
9.18 Установка инструментария GCC в Debian
Выполните следующие команды установки:
apt update && apt install -y build-essential manpages-dev
После установки проверьте версию GCC:
root@linaro-alip:/# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/10/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 10.2.1-6' --with-
bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-
languages=c,ada,c++,go,d,fortranx
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.1 20210110 (Debian 10.2.1-6)
9.19 Не работает автодополнение при установке пакетов Debian
Это обычная операция Linux: основные дистрибутивы требуют ручной установки bash-completion. Подробности источник предлагает искать в Baidu; обычно нужны следующие действия:
sudo apt-get install bash-completion
source /etc/bash_completion
9.20 Поддержка расширения DRI3 в Debian X11
DRI3 — расширение X11, улучшающее прямой рендеринг. В Debian оно обычно включено по умолчанию. Как низкоуровневый протокол, оно не запускается самостоятельно без внешних вызовов. Для применения изучите документацию и вызывайте нужные интерфейсы, например DRI3 из XCB (X protocol C-language Binding). Шаги установки и просмотра: установите библиотеку разработки XCB DRI3 следующей командой для libxcb-dri3:
sudo apt-get install libxcb-dri3-dev
Будут установлены библиотеки и заголовки для использования DRI3 в приложениях. Просмотр интерфейсов DRI3:
Определения интерфейса и доступные функции находятся в заголовке dri3.h:
vi /usr/include/xcb/dri3.h
Файл содержит сведения о реализации интерфейса DRI3 и помогает понять его применение. Выполнив эти шаги, можно использовать DRI3 для разработки или улучшения графических приложений Debian. При программировании обращайтесь к официальной документации XCB и DRI3 для правильного и эффективного использования.
9.21 Загрузка системы в режим командной строки
Общий подход: удалить xserver; включить в ядре CONFIG_FRAMEBUFFER_CONSOLE, CONFIG_DRM_FBDEV_EMULATION, CONFIG_VT, CONFIG_VT_CONSOLE.
9.22 Настройка поворота экрана
См. /etc/X11/xorg.conf.d/20-modesetting.conf.
...
Section "Screen"
Identifier "Default Screen"
Device "Rockchip Graphics"
Monitor "Default Monitor"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1024x600"
EndSubSection
EndSection
### Valid values for rotation are "normal", "left", "right"
Section "Monitor"
Identifier "HDMI-A-1"
Option "Rotate" "inverted"
Option "Position" "0x0"
EndSection
Section "Monitor"
Identifier "DSI-1"
Option "Rotate" "left"
Option "Position" "0x0"
EndSection
9.23 Устранение чёрного экрана в Debian
Между запуском X и появлением приложений рабочего стола экран чёрный; время расходуется самими приложениями. Чтобы сохранить логотип на этот период, перед Xorg.wrap в /usr/bin/X добавьте:
export XSERVER_FREEZE_DISPLAY=/.freeze_xserver
touch $XSERVER_FREEZE_DISPLAY
$(sleep 6; rm $XSERVER_FREEZE_DISPLAY)&
Изображение фиксируется на 6 секунд, затем появляется рабочий стол. Длительность можно разумно изменить под требования продукта.
{
export XSERVER_FREEZE_DISPLAY=/.freeze_xserver
touch $XSERVER_FREEZE_DISPLAY
while sleep .5; do
pgrep panel && break # Wait for the status bar service
done
sleep 2 # Wait for the status bar to be drawn
rm $XSERVER_FREEZE_DISPLAY
}&
9.24 Удаление указателя мыши с рабочего стола Debian
Штатный механизм нужен для приложений без поддержки касаний: Xserver принудительно преобразует первое касание в событие мыши. Для обхода есть три способа: прозрачная тема курсора (подробности ищите отдельно); в hw/xfree86/drivers/modesetting/drmmode_display.c удалить вызовы drmModeSetCursor и drmModeMoveCursor; если SDK содержит drm-cursor, добавить hide=1 в /etc/drm-cursor.conf.
9.25 Сборка и перенос репозитория rkaiq/rkisp в Debian
Как правильно перенести в Debian функции rkaiq/rkisp, отлаженные в Buildroot?
9.25.1 Обзор шагов
Например, для RK3588 можно выбрать более старые GCC и GLIBC и собрать вариант для сторонней системы. Шаг 1: изменить конфигурацию Buildroot для поддержки GCC 8.
diff --git a/configs/rockchip/chips/rk3588.config
b/configs/rockchip/chips/rk3588.config
index f806813a6e..affb5e71ad 100644
--- a/configs/rockchip/chips/rk3588.config
+++ b/configs/rockchip/chips/rk3588.config
@@ -1,4 +1,4 @@
-BR2_cortex_a76_a55=y
+BR2_cortex_a72_a53=y
BR2_PACKAGE_RK3588=y
BR2_ROOTFS_OVERLAY+="board/rockchip/rk3588/fs-overlay/"
BR2_TARGET_GENERIC_HOSTNAME="rk3588"
diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
index 7556e1ece6..c917823f57 100644
--- a/package/gcc/Config.in.host
+++ b/package/gcc/Config.in.host
@@ -17,7 +17,6 @@ config BR2_GCC_VERSION_ARC
config BR2_GCC_VERSION_8_X
bool "gcc 8.x"
- depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_9
# ARC HS48 rel 31 only supported by gcc arc fork.
depends on !BR2_archs4x_rel31
select BR2_TOOLCHAIN_GCC_AT_LEAST_8
Шаг 2: настроить Buildroot на сборку с GCC 8 и GLIBC 2.28 по умолчанию.
buildroot#cat configs/rockchip_rk3588_glibc2.28_defconfig
#include "../rockchip_rk3588_defconfig"
BR2_GCC_VERSION_8_X=y
BR2_PACKAGE_GLIBC_2_28=y
Шаг 3: собрать соответствующую конфигурацию Buildroot. Настроить среду и собрать модуль camera-engine-rkaiq.
<SDK>#source buildroot/envsetup.sh rockchip_rk3588_glibc2.28
<SDK>## cd buildroot
buildroot# make camera-engine-rkaiq
После сборки перенесите полученные файлы, например output/rockchip_rk3588_glibc2.28/build/camera-engine-rkaiq-1.0/camera-engine-rkaiq-1.0.tar, в систему Debian.
9.26 Загрузка deb-пакетов для автономной установки
root@linaro-alip:/# apt-get download <package name>
9.27 Проверка версии glibc в Debian
root@linaro-alip:/# ldd --version
ldd (Debian GLIBC 2.31-13+deb11u7) 2.31
# /lib/libc.so.6
GNU C Library (GNU libc) stable release version 2.35.
9.28 Поддержка физически обрезанного экрана в Debian
Экран заказчика физически обрезан с 3840x2160 до 3840x720. Для включения экрана выходное разрешение должно оставаться 3840x2160, однако видны лишь 720 строк. В нижнюю невидимую область высотой 1440 строк указатель может перемещаться.
В новую версию xserver добавлена поддержка padding.
Способ настройки:
+++ b/overlay/etc/X11/xorg.conf.d/20-modesetting.conf
@ -2,6 +2,9 @ Section "Device"
Identifier "Rockchip Graphics"
Driver "modesetting"
+ Option "VirtualSize" "LVDS-1:3840x720"
+ Option "Padding" "LVDS-1:0,1440,0,0"
Измените /etc/X11/xorg.conf.d/20-modesetting.conf указанным способом. VirtualSize задаёт разрешение, видимое приложению; Padding — число отсекаемых пикселей в порядке сверху, снизу, слева, справа. Если текст нечёткий, порядок Padding можно изменить на left right top bottom: Option “VirtualSize” “DSI-1:1920x316”; Option “Padding” “DSI-1:0,0,0,764”. Мышь перемещается относительно и обычно не требует изменений. При неправильном масштабе или смещении попробуйте программный курсор: удалить аппаратный слой из DTS ядра либо настроить SWcursor в modesetting conf. Найдите и удалите cursor в DTS, например:
kernel/arch/arm64/boot/dts/rockchip# ag cursor
rk3566-evb2-lp4x-v10-linux.dts
12: cursor-win-id = <ROCKCHIP_VOP2_CLUSTER0>;
Или:
--- a/overlay/etc/X11/xorg.conf.d/20-modesetting.conf
+++ b/overlay/etc/X11/xorg.conf.d/20-modesetting.conf
@@ -2,6 +2,8 @@ Section "Device"
Identifier "Rockchip Graphics"
Driver "modesetting"
+ Option "SWcursor" "TRUE"
9.29 Не работает блокировка экрана XFCE4 в Debian
Для блокировки экрана через верхний правый угол рабочего стола XFCE нужен пакет light-locker.
sudo apt install -y light-locker
9.30 Проблемы сборки Debian на ПК с Ubuntu 24.04
Если /sbin/ldconfig не запускается, причиной может быть неверная среда QEMU. Замените исполняемый файл QEMU в device/rockchip/common/tools/x86_64/qemu-aarch64-static внутри SDK, затем перезагрузите систему. Перед заменой убедитесь, что
соответствующие файлы сохранены в резервной копии. По состоянию на источник версии QEMU после V8.1.1 имеют несовместимость со старым ldconfig; см. официальный отчёт #2072564.
10. Стороннее открытое ПО Debian и лицензии
Сведения об открытом ПО Debian см. в разделе legal официального сайта.
11. Справочные материалы Debian
Официальная документация: debian-docs. Официальные пакеты stable: packages.
