目錄:
樹莓派上安裝Weston
Raspbian包
編譯依賴
固件
環境配置
pkg-config配置文件
Wayland庫
libxkbcommon
Weston和示例應用
故障排除
找不到bcm_host.pc
編譯錯誤: 未定義的`wl_egl_...引用
部分或整個界面 (圖形)破損
顯示器或電視黑屏, 丟失信號
窗口或圖像閃爍
由於硬件異常導致程序掛掉
本文將指導你把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文件. 我們需要手動安裝它們.
從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/
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同樣請按照the generic build guide來編譯及安裝.
$ git clone git://people.freedesktop.org/xorg/lib/libxkbcommon.git $ cd libxkbcommon/ $ ./autogen.sh --prefix=$WLD $ make && make install
相比正常的編譯, 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'用戶登錄.
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
本來不應該被用到的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程序分配像素緩沖區的位置.