在 RK3588 Ubuntu 上编译 eglinfo:全流程实战 + 常见报错修复

发布于:2025-07-02 ⋅ 阅读:(22) ⋅ 点赞:(0)

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