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 eglinfo
wget 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