Skip to main content

Rockchip Buildroot Weston 开发指南

:::info 文档信息

文档标识:RK-KF-YF-326 · 发布版本:V1.3.0 · 发布日期:2022-01-13 · 页数:11 · 语言:中文

原始文档:Rockchip_Developer_Guide_Buildroot_Weston_CN.pdf

:::

章节大纲​

  • Rockchip Buildroot Weston 开发指南(P1)
    • 简介(P4)
      • 相关介绍(P4)
      • 配置方式(P4)
    • 具体配置(P4)
      • 状态栏相关配置(P5)
      • 背景配置(P6)
      • 待机及锁屏配置(P6)
      • 显示颜色格式配置(P7)
      • 屏幕方向配置(P7)
      • 分辨率及缩放配置(P7)
      • 冻结屏幕(P8)
      • 屏幕状态配置(P9)
      • 多屏配置(P9)
      • 输入设备配置(P10)
      • 触屏校准(P10)
      • 无GPU平台配置(P11)
      • ARM AFBC modifier配置(P11)

在线预览​

若预览无法显示,请直接下载 PDF 后用本地阅读器打开。


1. 简介​

1.1 相关介绍​

Weston是Wayland开源显示协议的官方参考实现,Rockchip Buildroot SDK的显示服务默认使用Weston 9.0(可选8.0.0) drm后端。

1.2 配置方式​

Buildroot SDK中Weston的配置方式主要有以下几种:

a、启动参数

即启动Weston时命令所带参数,如weston --tty=2

b、weston.ini配置文件

位于/etc/xdg/weston/weston.ini,对应SDK代码中位置为:buildroot/board/rockchip/common/base/etc/xdg/weston/weston.ini

参考:https://fossies.org/linux/weston/man/weston.ini.man

c、特殊环境变量

此类环境变量一般设置于:

  1. Weston的启动脚本内,SDK固件中位于/etc/init.d/S50launcher,如:
export WESTON_DRM_MIRROR=1 # 需设置于启动Weston前
weston&
  1. Weston的环境变量配置文件,SDK固件中位于/etc/profile.d/weston.sh,对应SDK代码中位置为:buildroot/package/weston/weston.sh.

d、动态配置文件

对于drm后端,Buildroot SDK中的Weston提供一些动态配置支持,比如动态显示配置文件,默认路径为/tmp/.weston_drm.conf,可以通过环境变量WESTON_DRM_CONFIG指定。

e、udev rules

Weston中输入设备的部分配置需要通过udev rules。

2. 具体配置​

2.1 状态栏相关配置​

Weston支持在weston.ini配置文件的shell段设置状态栏的背景色、位置,以及在launcher段设置快捷启动程序,如:

[shell]
panel-color=0x90ff0000
# 颜色格式为ARGB8888
panel-position=bottom
# top|bottom|left|right|none,none为禁止
[launcher]
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png

  #图标路径

path=/usr/bin/gnome-terminal

  #快捷启动命令

Weston目前不支持设置状态栏的大小,如要调整,必须进行代码级别的修改:

// weston/clients/desktop-shell.c
static void
panel_configure(void *data,
struct weston_desktop_shell *desktop_shell,
uint32_t edges, struct window *window,
int32_t width, int32_t height)
{
switch (desktop->panel_position) {
case WESTON_DESKTOP_SHELL_PANEL_POSITION_TOP:
case WESTON_DESKTOP_SHELL_PANEL_POSITION_BOTTOM:
height = 32; # 高度
break;
case WESTON_DESKTOP_SHELL_PANEL_POSITION_LEFT:
case WESTON_DESKTOP_SHELL_PANEL_POSITION_RIGHT:
switch (desktop->clock_format) {
case CLOCK_FORMAT_NONE:
width = 32;
break;
case CLOCK_FORMAT_MINUTES:
width = 150;
break;
case CLOCK_FORMAT_SECONDS:
width = 170;
break;
}
break;
}

2.2 背景配置​

Weston支持在weston.ini配置文件的shell段设置背景图案、颜色,如

[shell]
background-image=/usr/share/backgrounds/gnome/Aqua.jpg

  #背景图案(壁纸)绝对路径

background-type=tile
# scale|scale-crop|tile
background-color=0xff002244

  #颜色格式为ARGB8888,未设置背景图案时生效

2.3 待机及锁屏配置​

Weston的超时待机时长可以在启动参数中配置,也可以在weston.ini的core段配置,如:

weston --idle-time=0&  # 0为禁止待机,单位为秒

或者

[core]
idle-time=10

Weston的锁屏可以在weston.ini的shell段配置,如:

[shell]
locking=false

  #禁止锁屏

lockscreen-icon=/usr/share/icons/gnome/256x256/actions/lock.png

  #解锁按钮图案

lockscreen=/usr/share/backgrounds/gnome/Garden.jpg

  #锁屏界面背景

2.4 显示颜色格式配置​

Buildroot SDK内Weston目前默认显示格式为ARGB8888,对于某些低性能平台,可以在weston.ini的core段配置为RGB565,如:

[core]
gbm-format=rgb565
# xrgb8888|rgb565|xrgb2101010

也可以在weston.ini的output段单独配置每个屏幕的显示格式,如:

# output的名字可以在Weston启动log中看到,如:Output LVDS-1, (connector 71, crtc
60)
gbm-format=rgb565
# xrgb8888|rgb565|xrgb2101010

2.5 屏幕方向配置​

Weston的屏幕显示方向可以在weston.ini的output段配置,如

transform=90
# normal|90|180|270|flipped|flipped-90|flipped-180|flipped-270

如果需要动态配置屏幕方向,可以通过动态配置文件,如:

echo "output:all:rotate90" > /tmp/.weston_drm.conf # 所有屏幕旋转90度
echo "output:eDP-1::rotate180" > /tmp/.weston_drm.conf # eDP-1旋转180度

2.6 分辨率及缩放配置​

Weston的屏幕分辨率及缩放可以在weston.ini的output段配置,如:

mode=1280x800

  #需为屏幕支持的有效分辨率

scale=2

  #需为整数倍数,支持应用内部实现缩放

如需要缩放到特定分辨率(物理分辨率不变),可以通过WESTON_DRM_VIRTUAL_SIZE环境变量配置,如:

export WESTON_DRM_VIRTUAL_SIZE=1024x768

如果需要动态配置分辨率及缩放,可以通过动态配置文件,如:

echo "output:HDMI-A-1:mode=800x600" > /tmp/.weston_drm.conf # 修改HDMI-A-1分辨
率为800x600
echo "output:eDP-1:rect=<10,20,410,620>" > /tmp/.weston_drm.conf # eDP-1显示到

(10,20)位置,大小缩放为400x600

以上缩放时,如果硬件VOP显示模块不支持缩放,则需要依赖RGA处理。

2.7 冻结屏幕​

在启动Weston时,开机logo到UI显示之间存在短暂切换黑屏。如需要防止黑屏,可以通过以下方式短暂冻结Weston屏幕内容:

使用定制--warm-up运行参数在UI启动后开始显示

weston --warm-up&

或者

export WESTON_FREEZE_DISPLAY=/tmp/.weston_freeze # 设置特殊配置

文件路径

touch /tmp/.weston_freeze # 冻结显示
weston&
sleep 1 && rm /tmp/.weston_freeze& # 1秒后解冻

又或者

echo "output:all:freeze" > /tmp/.weston_drm.conf # 冻结显示
weston&
sleep 1 && \
echo "output:all:unfreeze" > /tmp/.weston_drm.conf& # 1秒

后解冻

2.8 屏幕状态配置​

DRM框架支持强制配置屏幕状态:

echo on > /sys/class/drm/card0-HDMI-A-1/status # 强制HDMI-A-1为接入状态
#on|off|detect,detect为热拔插

如果需要更具体的动态屏幕状态配置,可以通过动态配置文件,如:

echo "output:DSI-1:off" >> /tmp/.weston_drm.conf #关闭DSI
echo "output:eDP-1:on" >> /tmp/.weston_drm.conf #开启eDP
echo "compositor:state:sleep" >> /tmp/.weston_drm.conf #显示休眠,触屏唤醒
echo "compositor:state:off" >> /tmp/.weston_drm.conf #显示休眠
echo "compositor:state:on" >> /tmp/.weston_drm.conf #显示唤醒

2.9 多屏配置​

Buildroot SDK的Weston支持多屏同异显及热拔插等功能,不同显示器屏幕的区分根据drm的name(通过Weston启动log或者/sys/class/drm/card0-<name>获取),相关配置通过环境变量设置,如:

export WESTON_DRM_PRIMARY=HDMI-A-1 # 指定主显为HDMI-A-1

export WESTON_DRM_MIRROR``=``1 # 使用镜像模式(多屏同显),不设置此环境变量即为异显export WESTON_DRM_KEEP_RATIO``=``1 # 镜像模式下缩放保持纵横比,不设置此变量即为强制全屏export WESTON_DRM_PREFER_EXTERNAL``=``1 # 外置显示器连接时自动关闭内置显示器export WESTON_DRM_PREFER_EXTERNAL_DUAL``=``1 # 外置显示器连接时默认以第一个外显为主显

镜像模式缩放时,如果硬件VOP显示模块不支持缩放,则需要依赖RGA处理。

同时也支持在weston.ini的output段单独禁用指定屏幕:

mode=off
# off|current|preferred|<WIDTHxHEIGHT@RATE>

2.10 输入设备配置​

Weston服务默认需要至少一个输入设备,如无输入设备,则需要在weston.ini中的core段特殊设置:

[core]
require-input=false

Weston中如存在多个屏幕,需要把输入设备和屏幕进行绑定,则需要通过触摸设备的udev规则配置WL_OUTPUT,如:

# /lib/udev/rules.d/99-goodix-ts.rules
ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", ENV{WL_OUTPUT}="HDMI-A-1"

或者配置WL_SEAT:

# /lib/udev/rules.d/99-goodix-ts.rules
ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", ENV{WL_SEAT}="seat1"
seat=seat1

2.11 触屏校准​

Weston如果需要校准触屏,可以通过WESTON_TOUCH_CALIBRATION环境变量,如:

export WESTON_TOUCH_CALIBRATION="1.013788 0.0 -0.061495 0.0 1.332709
-0.276154"

校准参数的获取可以使用Weston校准工具: weston-calibrator,工具运行后会生成若干随机点,依次点击后输出校准参数,如:Final calibration values: 1.013788 0.0 -0.061495 0.0 1.332709 -0.276154

也可以直接使用Weston提供的另一个校准工具:weston-touch-calibrator,需要配置:

[libinput]
touchscreen_calibrator=true
calibration_helper=/bin/weston-calibration-helper.sh

2.12 无GPU平台配置​

SDK中的Weston默认使用GPU进行渲染合成加速,对于无GPU或GPU性能不足的平台,也可以选用RGA替代进行加速。

具体配置需要Buildroot SDK开启BR2_PACKAGE_LINUX_RGA以及BR2_PACKAGE_WESTON_DEFAULT_PIXMAN。

2.13 ARM AFBC modifier配置​

当芯片支持AFBC时,SDK中的Weston支持使用基于GPU的AFBC压缩格式进行显示。

具体配置:

# export WESTON_DISABLE_ATOMIC=1
export WESTON_ALLOW_GBM_MODIFIERS=1