树莓派编译wayland

我在 树莓派Raspberry Pi 400 上为了能够充分加速图形性能,准备将桌面切换到基于wayland的 sway - i3兼容Wayland compositor 窗口管理器。不过,sway对wayland的版本要求超出了Raspberry Pi OS发行版提供的wayland版本,所以我从源代码编译安装。

  • 首先卸载刚才安装的系统提供的wayland:

    sudo apt remove wayland-protocols libwayland-dev
    sudo apt autoremove
    

备注

这里不能全部卸载所有 wayland 组件,会导致其他常用的大量应用软件卸载

备注

wayland官方文档提供了 Building Weston 文档,不过比较方便是使用 Wayland Build Tools ,可以自动完成标准的Wayland编译和安装,并且可以自动下载和编译很多所需的上游组件。这个方法目前我没有尝试,仅做记录参考。

编译准备

wayland编译依赖

  • 在树莓派上安装以下依赖包:

    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
    
    sudo apt install libxml2-dev
    
    # 以下软件包可以不安装,不过配置时候需要 --disable-documentation ,否则下载文件太多了
    sudo apt install doxygen xmlto graphviz
    

Firmware

确保树莓派firmware是最新版本,可以使用 rpi-update 工具更新。这个更新firmware操作是比较特殊的操作,通常软件更新都不会执行这个操作。

/boot/config.txt 中添加以下两个参数配置:

  • gpu_mem=128

配置多少内存保留给VideoCore,例如 framebuffers, GL textures, Dispmanx资源

  • dispmanx_offline=1

激活firmware回退Dispmanx因素的off-line compositing。通常在scanout时compositing是on-line,但是不能处理太多的元素。当激活了 off-line ,就会给compositing配置一个off-screen buffer。当场景复杂(有大量元素),compositing就会在缓存中实现off-line。

默认情况下 rpi-backend 是配置成 dispmanx_offline=1 。没有这个设置,则建议在运行Weston时使用参数 --max-planes=10 。如果使用纯粹的 GLESv2 compositing 模式的Weston,则可以给Weston传递 --max-planes=0 参数。这种情况下就不需要设置 dispmanx_offline=1 来保留VideoCore内存。

设置环境

  • 在用户目录下安装,所以设置以下环境参数:

    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"
    
    mkdir -p "$WLD/share/aclocal"
    mkdir -p "$XDG_RUNTIME_DIR"
    

pkg-config文件(这步么有成功)

一些在Pi上的库没有安装相应的 pkg-config 文件,我们需要安装。

  • 下载 .pc 文件,这个文件需要从 raspberrypi 分支获取,不要使用master分支(用于android)

    git clone  git://git.collabora.co.uk/git/user/pq/android-pc-files.git
    git checkout raspberrypi
    
  • 复制 .pc 文件到pkgconfig 目录:

    cp bcm_host.pc egl.pc glesv2.pc $WLD/share/pkgconfig/
    

Wayland libraries

  • 编译wayland:

    git clone git://anongit.freedesktop.org/wayland/wayland
    cd wayland
    ./autogen.sh --prefix=$WLD
    make
    make install
    
  • 我使用这个方法:如果在系统范围安装,则配置 WLD 如下:

    export WLD=/usr
    export LD_LIBRARY_PATH=$WLD/lib
    export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/
    export PATH=$WLD/bin:$PATH
    export ACLOCAL_PATH=$WLD/share/aclocal
    export ACLOCAL="aclocal -I $ACLOCAL_PATH"
    
    mkdir -p $WLD/share/aclocal # needed by autotools
    
    git clone https://gitlab.freedesktop.org/wayland/wayland.git
    cd wayland
    ./autogen.sh --prefix=$WLD --disable-documentation
    make
    sudo make install
    

备注

暂时没有时间继续,待以后再实践 (可能在 LFS(Linux from scratch) 实践过程中重启这个实践)

参考