目錄:
樹莓派上安裝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 updatesudo 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... noconfigure: 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... noconfigure: WARNING: clients will use cairo image, cairo-egl not used
部分或整個介面 (圖形)破損
老舊的韌體會導致圖形破損. 請嘗試更新韌體, 並嘗試上面提到的/boot/config.txt選項.
顯示器或電視黑屏, 丟失訊號
你可能沒有設定韌體dispmanx_offline=1. 當螢幕上有過多東西需要做線上合成處理, 沒有離線合成備用, 輸出就會掛掉或中斷.
視窗或映像閃爍
可能是在螢幕上有太多東西了, 即使用韌體裡的離線合成也忙不過來. 關掉些視窗就好了.
由於硬體異常導致程式掛掉
極大可能是你跑出了$XDG_RUNTIME_DIR的空間. 這個目錄是Wayland程式分配像素緩衝區的位置.