Платформенная справка ArmSoM по предоставленным китайскому и английскому оригиналам Rockchip. Проверяйте конкретную плату, SoC, SDK/BSP, ядро и периферию; поддержка всех плат ArmSoM не заявляется. Примеры и измерения источника не являются испытаниями ArmSoM. Команды и аппаратные тесты не выполнялись.
Относится к модифицированному Weston Rockchip Buildroot SDK; поддержка расширенных переменных в upstream не гарантируется.
Оба оригинала V1.4.5; сохранены все настройки до §2.16. Отдельных рисунков нет. Исправлены лишь PDF-переносы команд, матриц и комментариев, значения неизменны. Повторные export одной переменной показывают альтернативы, а не готовый скрипт. Функции с многоточиями неполные.
Различие CN/EN: §2.16 использует >> /tmp/.weston_drm.conf (добавление) в китайском и > /tmp/.weston_drm.conf (перезапись) в английском. Оба сохранены, RU/DE следуют английскому. Проверяйте обработчик динамической конфигурации SDK.
1. Введение
1.1 Обзор
Weston — эталонная реализация открытого протокола отображения Wayland. Rockchip Buildroot SDK по умолчанию использует DRM-бэкенд Weston. Указанный исходником репозиторий модифицированного Weston: https://github.com/JeffyCN/weston
1.2 Способы конфигурации
Rockchip Buildroot SDK Weston настраивается несколькими способами:
a. Параметры командной строки при запуске, например weston --tty=2. Скрипт: /etc/init.d/S49weston; в SDK: buildroot/package/weston/S49weston.
b. Файл weston.ini: /etc/xdg/weston/weston.ini и /etc/xdg/weston/weston.ini.d/; в SDK: buildroot/board/rockchip/common/base/etc/xdg/weston/weston.ini. Справка: https://fossies.org/linux/weston/man/weston.ini.man.
c. Специальные переменные окружения, обычно в /etc/profile.d/weston.sh; в SDK: buildroot/package/weston/weston.sh.
d. Файл динамической конфигурации DRM-бэкенда: по умолчанию /tmp/.weston_drm.conf, путь задаётся WESTON_DRM_CONFIG.
e. Правила udev: часть настроек устройств ввода Weston задаётся через udev.
2. Настройки
2.1 Идентификация экранов
Weston различает экраны по имени output(head). Имена видны в журнале запуска Weston:
# weston&
[02:11:29.746] DRM: head 'DSI-1' found ...
2.2 Курсор
Тема и размер курсора задаются в секции shell файла weston.ini, например:
# /etc/xdg/weston/weston.ini
[shell]
cursor-theme=whiteglass # Buildroot SDK supports comix/obsidian/xcursor/xcursor-transparent cursor theme packages.
cursor-size=24
2.3 Панель состояния
Цвет фона, положение и масштаб панели задаются в shell; программы быстрого запуска — в launcher файла weston.ini:
# /etc/xdg/weston/weston.ini
[shell]
panel-color=0x90ff0000
# the color format is ARGB8888
panel-position=bottom
# top|bottom|left|right|none,none is disable
panel-scale=4
# scale up by 4
[launcher]
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png
# icon path
path=/usr/bin/gnome-terminal
# quick start command
2.4 Фон
Изображение и цвет фона задаются в shell, программы быстрого запуска — в desktop-launcher файла weston.ini:
# /etc/xdg/weston/weston.ini
[shell]
background-image=/usr/share/backgrounds/gnome/Aqua.jpg
# Background pattern (wallpaper) absolute path
background-type=tile
# scale|scale-crop|tile
background-color=0xff002244
# The color format is ARGB8888, effective when no background pattern is set
[desktop-launcher]
icon=/usr/share/icons/hicolor/256x256/apps/chromium.png
# icon path
path=/usr/bin/chromium www.baidu.com
# quick start command
displayname=chromium
# display name
2.5 Простой и блокировка экрана
Тайм-аут простоя Weston задаётся параметром запуска или в секции core файла weston.ini:
# /etc/init.d/S49weston
start_weston()
{
/usr/bin/weston --idle-time=0& # 0 means idle mode is disabled, in seconds
}
Или:
# /etc/xdg/weston/weston.ini
[core]
idle-time=10
Блокировка экрана Weston настраивается в shell файла weston.ini:
# /etc/xdg/weston/weston.ini
[shell]
locking=false
# lock screen is disabled
lockscreen-icon=/usr/share/icons/gnome/256x256/actions/lock.png
# unlock button icon
lockscreen=/usr/share/backgrounds/gnome/Garden.jpg
# background of lock screen
2.6 Цветовой формат
По умолчанию Weston в Buildroot SDK выводит ARGB8888. Для менее производительных платформ можно выбрать RGB565 в core файла weston.ini:
# /etc/xdg/weston/weston.ini
[core]
gbm-format=rgb565
# xrgb8888|argb8888|rgb565|xrgb2101010
Формат каждого экрана можно отдельно задать в output файла weston.ini:
# /etc/xdg/weston/weston.ini
[output]
name=LVDS-1
gbm-format=rgb565
# xrgb8888|argb8888|rgb565|xrgb2101010
2.7 Ориентация экрана
Ориентация задаётся в output файла weston.ini:
# /etc/xdg/weston/weston.ini
[output]
name=LVDS-1
transform=rotate-90
# normal|rotate-90|rotate-180|rotate-270|flipped|flipped-90|flipped-180|flipped-270
Для динамического изменения ориентации используйте файл динамической конфигурации:
echo "output:all:rotate90" > /tmp/.weston_drm.conf # All screens rotate 90 degrees
echo "output:eDP-1:rotate180" > /tmp/.weston_drm.conf # eDP-1 rotates 180 degrees
2.8 Разрешение и масштаб
Разрешение и масштаб экрана Weston задаются в output файла weston.ini:
# /etc/xdg/weston/weston.ini
[output]
name=LVDS-1
mode=1280x800
# should be an effective resolution supported by the screen
scale=2
# value must be an integer, support application level scaling
Чтобы масштабировать все экраны до заданного разрешения без изменения физического разрешения, задайте WESTON_DRM_VIRTUAL_SIZE:
# /etc/profile.d/weston.sh
export WESTON_DRM_VIRTUAL_SIZE=1024x768
Для динамической настройки разрешения и масштаба используйте файл динамической конфигурации:
echo "output:HDMI-A-1:mode=800x600" > /tmp/.weston_drm.conf # change the resolution of HDMI-A-1 to 800x600
echo "output:eDP-1:rect=<10,20,410,620>" > /tmp/.weston_drm.conf # eDP-1 display to the position of (10,20), the size is scaled to 400x600
echo "output:HDMI-A-1:size=1920x1080" > /tmp/.weston_drm.conf # HDMI-A-1 scale to 1080p, the physical resolution is unchanged.
Если VOP аппаратно не поддерживает масштабирование, эти способы требуют 2D-ускорителя Rockchip RGA.
2.9 Замораживание экрана
При запуске Weston между загрузочным логотипом и интерфейсом кратковременно появляется чёрный экран. Его можно предотвратить временным замораживанием содержимого Weston одним из следующих способов. Добавьте –warm-up к параметрам запуска:
# /etc/init.d/S49weston
start_weston()
{
/usr/bin/weston --warm-up&
}
Или:
# /etc/init.d/S49weston
start_weston()
{
export WESTON_FREEZE_DISPLAY=/tmp/.weston_freeze # Set a special configuration file path
touch /tmp/.weston_freeze # Freeze the display
/usr/bin/weston&
sleep 1 && rm /tmp/.weston_freeze& # unfreeze after 1 second
}
Или:
# /etc/init.d/S49weston
start_weston()
{
echo "output:all:freeze" > /tmp/.weston_drm.conf # Freeze the display
/usr/bin/weston&
...
sleep 1 && \
echo "output:all:unfreeze" > /tmp/.weston_drm.conf& # unfreeze after 1 second
}
2.10 Состояние экранов
DRM позволяет принудительно задать состояние экрана:
echo on > /sys/class/drm/card0-HDMI-A-1/status # Force HDMI-A-1 connected
#on|off|detect, detect means hot-plug
Более подробные настройки доступны через динамический файл:
echo "output:DSI-1:off" > /tmp/.weston_drm.conf # Turn off screen
echo "output:HDMI-A-1:freeze" > /tmp/.weston_drm.conf # Freeze screen
echo "output:eDP-1:on" > /tmp/.weston_drm.conf # Turn on screen
echo "output:HDMI-A-1:state=on" > /tmp/.weston_drm.conf #Force connected(should set screen mode on in weston.ini)
echo "output:DSI-1:state=off" > /tmp/.weston_drm.conf #Force disconnected
echo "output:DSI-1:state=detect" > /tmp/.weston_drm.conf #Use hot-plug
echo "compositor:state:off" > /tmp/.weston_drm.conf # Turn off display
echo "compositor:state:freeze" > /tmp/.weston_drm.conf # Freeze display
echo "compositor:state:sleep" > /tmp/.weston_drm.conf # Turn off display and touch to wake
echo "compositor:state:on" > /tmp/.weston_drm.conf # Turn on display
2.11 Несколько экранов
Weston в Buildroot SDK поддерживает зеркалирование, расширенный рабочий стол, настройку положения экранов и горячее подключение. При зеркалировании он пытается использовать RGA 2D, если VOP не поддерживает масштабирование или поворот. Настройки задаются переменными окружения:
# /etc/profile.d/weston.sh
export WESTON_DRM_PRIMARY=HDMI-A-1 # Specify HDMI-A-1 as primary monitor
export WESTON_DRM_SINGLE_HEAD=1 # Force using single monitor
export WESTON_DRM_MIRROR=1 # In mirror mode (multi-screen with the same display), without setting this environment variable will be with different display
export WESTON_DRM_KEEP_RATIO=1 # In mirror mode, scaling maintains the aspect ratio, without setting this variable will be full screen by force
export WESTON_DRM_HEAD_MODE=primary # Only enable primary monitor
export WESTON_DRM_HEAD_MODE=internal # Only enable internal monitors
export WESTON_DRM_HEAD_MODE=external # Only enable external monitors
export WESTON_DRM_HEAD_MODE=external-dual # Enable all monitors, and prefer the external ones
export WESTON_DRM_HEAD_FALLBACK=1 # Fallback to any available monitor when none matched
export WESTON_DRM_MASTER=1 # Allow disabling unused monitors
export WESTON_OUTPUT_FLOW=horizontal # Laying outputs horizontally by default
export WESTON_OUTPUT_FLOW=vertical # Laying outputs vertically by default
export WESTON_OUTPUT_FLOW=same-as # Laying outputs at (0,0) by default
Отдельный экран можно выключить в output файла weston.ini:
# /etc/xdg/weston/weston.ini
[output]
name=LVDS-1
mode=off
# off|current|preferred|<WIDTHxHEIGHT@RATE>
Возможна и динамическая конфигурация:
echo "output:HDMI-A-1:pos=100,200" > /tmp/.weston_drm.conf # Set HDMI's position
echo "output:HDMI-A-1:prefer" > /tmp/.weston_drm.conf # Show apps on HDMI by default
echo "output:HDMI-A-1:primary" > /tmp/.weston_drm.conf # Specify HDMI as primary
echo "output:HDMI-A-1:pin" > /tmp/.weston_drm.conf # Try to pin later views to the screen
2.12 Устройства ввода
По умолчанию службе Weston нужно хотя бы одно устройство ввода. Если его нет, задайте специальную настройку в core файла weston.ini:
# /etc/xdg/weston/weston.ini
[core]
require-input=false
При нескольких экранах устройство ввода привязывается к экрану через WL_OUTPUT в правиле udev:
# /lib/udev/rules.d/99-goodix-ts.rules
ATTRS{name}=="goodix-ts", ENV{WL_OUTPUT}="HDMI-A-1"
Или через WL_SEAT:
# /lib/udev/rules.d/99-goodix-ts.rules
ATTRS{name}=="goodix-ts", ENV{WL_SEAT}="seat1"
# /etc/xdg/weston/weston.ini
[output]
name=LVDS-1
seat=seat1
Или через динамическую конфигурацию:
echo "output:HDMI-A-1:input=*" > /tmp/.weston_drm.conf # Match all devices
echo "output:HDMI-A-1:input=" > /tmp/.weston_drm.conf # Disallow all devices
echo "output:HDMI-A-1:input=event6" > /tmp/.weston_drm.conf
echo "output:HDMI-A-1:input=goodix*" > /tmp/.weston_drm.conf
echo "output:HDMI-A-1:input=goodix-ts" > /tmp/.weston_drm.conf
Vendor ID, product ID и имя устройства можно получить утилитой evtest:
# evtest /dev/input/event8 | head -3
Input driver version is 1.0.1
Input device ID: bus 0x18 vendor 0xdead product 0xbeef version 0x28bb
Input device name: "goodix-ts"
2.13 Калибровка устройств ввода
Для калибровки сенсорного экрана используйте WESTON_TOUCH_CALIBRATION:
# /etc/profile.d/weston.sh
export WESTON_TOUCH_CALIBRATION="1.013788 0.0 -0.061495 0.0 1.332709 -0.276154"
Либо правило udev:
# /lib/udev/rules.d/99-goodix-ts.rules
ATTRS{name}=="goodix-ts", ENV{LIBINPUT_CALIBRATION_MATRIX}="1.013788 0.0 -0.061495 0.0 1.332709 -0.276154"
Либо динамическую конфигурацию:
echo "calibration:event9:-1 0 1 0 -1 1" > /tmp/.weston_drm.conf
echo "calibration:goodix-ts:1 0 0 0 -1 1" > /tmp/.weston_drm.conf
echo "calibration:event9:restore" > /tmp/.weston_drm.conf # Restore the previous setting
echo "calibration:goodix-ts:clear" > /tmp/.weston_drm.conf # Clear all settings
Параметры получают утилитой weston-calibrator: она выводит случайные точки, которые нужно последовательно нажать. Пример результата: Final calibration values: 1.013788 0.0 -0.061495 0.0 1.332709 -0.276154.
Также можно использовать новый weston-touch-calibrator; для него требуется:
# /etc/xdg/weston/weston.ini
[libinput]
touchscreen_calibrator=true
calibration_helper=/bin/weston-calibration-helper.sh
2.14 Платформа без GPU
Weston в SDK по умолчанию ускоряет отрисовку через GPU. Если GPU отсутствует или недостаточно производителен, можно использовать Rockchip RGA 2D. В Buildroot SDK включите BR2_PACKAGE_LINUX_RGA и BR2_PACKAGE_WESTON_DEFAULT_PIXMAN.
2.15 Модификатор ARM AFBC
На чипах с AFBC Weston в SDK поддерживает вывод в сжатом GPU-формате ARM AFBC.
# /etc/profile.d/weston.sh
# export WESTON_DISABLE_ATOMIC=1
export WESTON_ALLOW_GBM_MODIFIERS=1
2.16 Уменьшение разрешения интерфейса
При недостаточной производительности интерфейса или пропускной способности DDR можно уменьшить разрешение UI:
echo "output:HDMI-A-1:down-scale=0.5" > /tmp/.weston_drm.conf
