dv1/eglinfo
是一個開源的 EGL 信息檢測工具,廣泛用于 OpenGL ES 圖形棧調試、驅動驗證和嵌入式平臺圖形支持排查。在 Rockchip RK3588 上編譯該工具可以協助我們確認 EGL + DRM 是否配置正確,尤其在無窗口系統(如 eglfs、framebuffer)環境中非常實用。
🧱 第一步:準備源碼與工具鏈
? 克隆項目
git clone https://github.com/dv1/eglinfo.git
cd eglinfo
項目默認自帶一個較老版本的 waf
構建系統,不兼容 Python 3.7 及以上,需進行升級處理。
?? 問題一:waf 拋出 StopIteration
異常
? 報錯內容
RuntimeError: generator raised StopIteration
原因:項目中自帶的 .waf3-*
是 waf 1.7.x 版本,不兼容 Python 3.7+,在新版解釋器中拋出異常。
? 解決方案:替換 waf
wget https://waf.io/waf-2.0.22 -O waf
chmod +x waf
waf 2.x 支持 Python 3.7-3.12,并可無縫替代舊版本。無需改動其它項目文件。
?? 第二步:配置編譯選項
./waf configure --platform=fb --device=generic
參數 | 說明 |
---|---|
--platform=fb | 使用 framebuffer 環境(適配無 X11 的 RK3588) |
--device=generic | 通用設備類型 |
?? 問題二:/usr/bin/env: 'python' No such file
報錯
? 報錯信息
/usr/bin/env: 'python': No such file or directory
原因:部分 Ubuntu 系統默認沒有 python
命令(只有 python3
),而 waf 腳本使用的是 #!/usr/bin/env python
。
? 解決方案:
sudo ln -s /usr/bin/python3 /usr/bin/python
或者修改 waf
腳本第一行:
#!/usr/bin/env python
# 改為:
#!/usr/bin/env python3
🛠? 第三步:編譯與安裝
./waf
sudo ./waf install
默認會將 eglinfo
安裝到 /usr/bin/eglinfo
,可直接運行。
🧪 第四步:驗證運行效果
export EGL_PLATFORM=fb # 在 framebuffer 模式下推薦設置
eglinfo
你將看到 EGL vendor、版本、支持的 config 以及圖形 API 等信息。
?? 常見運行期錯誤
🔻 錯誤:eglinfo: eglInitialize failed
可能原因 | 解決方法 |
---|---|
未加載 DRM 設備 | 確認 /dev/dri/card0 存在,權限正確 |
libmali.so 不支持 fb 模式 | 替換為 dummy 版本的 Mali EGL 庫(無 X11 依賴) |
未設置環境變量 | 添加 export EGL_PLATFORM=fb |
未加載 Mali GPU 模塊 | 使用 `lsmod |
? 編譯成功截圖示意
如果一切順利,運行 eglinfo
將輸出形如:
EGL API version: 1.4
EGL vendor string: ARM
EGL version string: 1.4 Valhall-"g13p0-01eac0"
EGL client APIs: OpenGL_ES
...
這說明 Mali 驅動生效、EGL 成功初始化、系統支持 OpenGL ES 渲染 ?
📦 附:自動化構建腳本(適用于 RK3588 Ubuntu)
#!/bin/bash
set -e
cd /home/firefly
git clone https://github.com/dv1/eglinfo.git
cd eglinfowget https://waf.io/waf-2.0.22 -O waf
chmod +x waf[ ! -f /usr/bin/python ] && sudo ln -s /usr/bin/python3 /usr/bin/python./waf configure --platform=fb --device=generic
./waf
sudo ./waf install