Raspberry Pi 树莓派上安装Weston
目录:
树莓派上安装Weston
Raspbian包
编译依赖
固件
环境配置
pkg-config配置文件
Wayland库
libxkbcommon
Weston和示例应用
故障排除
找不到bcm_host.pc
编译错误: 未定义的`wl_egl_...引用
部分或整个界面 (图形)破损
显示器或电视黑屏, 丢失信号
窗口或图像闪烁
由于硬件异常导致程序挂掉
树莓派上安装Weston
本文将指导你把Weston装入树莓派. 所有的命令行和编译操作都直接在派上完成. 用Raspbian作为操作系统的时候需要以用户'pi'来运行Weston, 这是因为在本地登录(非ssh)该用户时Raspbian才允许输入设备接入.
如果你只是想试试Weston, 并不想手动编译它, 可以用下面的包.
Raspbian包
对于Raspbian, 有预编译好的Wayland及Weston包.
在/etc/apt/sources.list文件中添加一行:
deb http://raspberrypi.collabora.com wheezy rpi
接着运行:
sudo apt-get update sudo apt-get install weston
这会安装一个名为weston-launch的脚本 (并非真实启动程序), 它会为你自动设置XDG_RUNTIME_DIR, 并运行weston. 想要运行Weston十分简单:
weston-launch
无需手动设置环境变量. 但是下面提及的固件仍然需要检查.
编译依赖
如果你使用的是Raspbian, 请安装编辑依赖:
$ sudo apt-get install build-essential automake libtool bison flex \ xutils-dev libcairo2-dev libffi-dev libmtdev-dev libjpeg-dev \ libudev-dev libxcb-xfixes0-dev libxcursor-dev libraspberrypi-dev
固件
你需要更新到最新的树莓派固件, 以便你能获得rpi-update工具. 太旧的固件会导致树莓派rpi-backend出现故障. 执行rpi-update会覆盖一些raspbian包安装的文件, 比如libraspberrypi-dev. 你先不要rpi-update, 直接运行Weston, 如果出现了图像问题, 再执行它, 看看能否解决问题.
你可能需要在/boot/config.txt文件中调整以下选项:
gpu_mem=128
为VideoCore保留多少内存, 例如: framebuffer, GL纹理贴图, Dispmanx资源.
dispmanx_offline=1
固件将切换为离线合成Dispmanx元素. 通常情况下合成都是在线完成的, 但是在scanout时无法处理过多的元素. 在开启离线后, 会分配一个关屏缓冲区来合成. 当屏幕复杂度(元素的数量和尺寸)过高, 将会在缓冲区中离线合成. 强烈推荐开启!
环境配置
我们将安装到树莓派用户的home目录下.
export WLD="$HOME/local" export PATH="$WLD/bin:$PATH" export LD_LIBRARY_PATH="$WLD/lib:/opt/vc/lib" export PKG_CONFIG_PATH="$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/" export ACLOCAL="aclocal -I $WLD/share/aclocal" export XDG_RUNTIME_DIR="/run/shm/wayland" export XDG_CONFIG_HOME="$WLD/etc" export XORGCONFIG="$WLD/etc/xorg.conf" mkdir -p "$WLD/share/aclocal" mkdir -p "$XDG_RUNTIME_DIR" chmod 0700 "$XDG_RUNTIME_DIR"
你可以把上面的内容放到一个脚本里并在终端里放置到你想编译包的位置或者运行Weston.
pkg-config配置文件
派上的一些库并没有安装合适的 pkg-config文件. 我们需要手动安装它们.
从git://git.collabora.co.uk/git/user/pq/Android-pc-files.git下载.pc文件并且确保你选取的是raspberrypi分支. 主分支是适用于Android平台的相似文件.
复制.pc文件到$WLD/share/pkgconfig/目录下:
$ cp bcm_host.pc egl.pc glesv2.pc $WLD/share/pkgconfig/
Wayland库
Libwayland请按照the generic build guide来编译及安装.
$ git clone git://anongit.freedesktop.org/wayland/wayland $ cd wayland $ ./autogen.sh --prefix=$WLD --disable-documentation $ make $ make install
使用--disable-documentation使其不依赖Doxygen.
libxkbcommon
Libxkbcommon同样请按照the generic build guide来编译及安装.
$ git clone git://people.freedesktop.org/xorg/lib/libxkbcommon.git $ cd libxkbcommon/ $ ./autogen.sh --prefix=$WLD $ make && make install
Weston和示例应用
相比正常的编译, Weston的配置有些许不同:
$ git clone git://anongit.freedesktop.org/wayland/weston $ cd weston $ ./autogen.sh --prefix=$WLD \ --disable-setuid-install --with-cairo-glesv2 \ --disable-x11-compositor --disable-drm-compositor \ --disable-fbdev-compositor --disable-wayland-compositor \ --disable-weston-launch --disable-simple-egl-clients \ --disable-egl --disable-libunwind --disable-colord \ --disable-resize-optimization --disable-xwayland-test \ WESTON_NATIVE_BACKEND="rpi-backend.so" $ make $ make install
如果你之前就装过wayland, 需要添加--disable-wayland-compositor, 删除虚设的wayland-egl.pc pkg-config文件. 这里需要注意, toytoolkit (Weston示例程序) 并不使用Cairo EGL. EGL不能作为客户端工作, 因为EGL Wayland还没在树莓派上实现.
现在Weston应该已经可以运行了. 要记得设置环境, 以防Weston不能打开任何输入或输出设备, 最好先与树莓派开启ssh会话. 在Raspbian下最好用'pi'用户登录.
故障排除
找不到bcm_host.pc
checking for RPI_BCM_HOST... no configure: WARNING: Raspberry Pi BCM host libraries not found, will use stubs instead.
如果没有安装正确的pkg-config文件, weston的编译将会失败. 如果在Weston的配置过程中看到上面的提示, 找不到bcm_host.pc文件, rpi-backend将无法执行. 下面是正常的提示:
checking for RPI_BCM_HOST... yes
编译错误: 未定义的`wl_egl_...引用
本来不应该被用到的cairo-egl被用到了. 删除虚设的wayland-egl.pc文件, 并确保在配置参数里有--disable-wayland-compositor. 当一切正常的时候, 应该提示:
checking for CAIRO_EGL... no configure: WARNING: clients will use cairo image, cairo-egl not used
部分或整个界面 (图形)破损
老旧的固件会导致图形破损. 请尝试更新固件, 并尝试上面提到的/boot/config.txt选项.
显示器或电视黑屏, 丢失信号
你可能没有设置固件dispmanx_offline=1. 当屏幕上有过多东西需要做在线合成处理, 没有离线合成备用, 输出就会挂掉或中断.
窗口或图像闪烁
可能是在屏幕上有太多东西了, 即使用固件里的离线合成也忙不过来. 关掉些窗口就好了.
由于硬件异常导致程序挂掉
极大可能是你跑出了$XDG_RUNTIME_DIR的空间. 这个目录是Wayland程序分配像素缓冲区的位置.