如何不使用Yocto构建启用etnaviv驱动?定制板配置求助
因为你没法通过Yocto重构镜像,咱们直接在运行的系统上手动调整配置,一步步来:
1. 先禁用原有Vivante驱动
Vivante的内核模块会抢占GPU资源,必须先让它停止加载:
- 先查看当前加载的Vivante相关模块:
通常会看到lsmod | grep -E "vivante|galcore"vivante或者galcore模块 - 临时卸载(重启后失效):
# 如果是vivante模块 rmmod vivante # 如果是galcore模块 rmmod galcore - 永久禁用模块加载:新建
/etc/modprobe.d/blacklist-vivante.conf文件,写入:blacklist vivante blacklist galcore - 检查内核启动参数:如果你的启动配置(比如
/boot/extlinux/extlinux.conf或者Uboot环境变量)里有vivante.*相关的参数(比如vivante.gpu_core_clk),把这些参数删掉,避免内核初始化Vivante驱动。
2. 加载Etnaviv与KMSRO相关内核模块
Linux 4.14已经内置了Etnaviv的基础支持,手动加载必要模块:
- 加载模块:
modprobe drm modprobe drm_kms_helper modprobe etnaviv modprobe kmsro - 验证加载成功:
能看到这些模块名字就说明加载成功了lsmod | grep -E "etnaviv|kmsro" - 永久设置开机加载:新建
/etc/modules-load.d/etnaviv.conf文件,写入:drm drm_kms_helper etnaviv kmsro
3. 配置Mesa与Qt的环境变量
要让系统优先使用你编译的Mesa驱动,同时让Qt应用选择Etnaviv渲染:
- 确保Mesa库被优先加载:新建
/etc/ld.so.conf.d/mesa.conf文件,添加你的Mesa安装路径(比如你编译安装到/usr/local的话):
然后执行/usr/local/lib # 如果是ARM架构,还要加对应架构的库目录,比如 /usr/local/lib/arm-linux-gnueabihfldconfig更新系统库缓存:ldconfig - 设置Mesa强制使用Etnaviv驱动:在用户的
.bashrc或者全局的/etc/profile里添加环境变量:export MESA_LOADER_DRIVER_OVERRIDE=etnaviv export LIBGL_DRIVERS_PATH=/usr/local/lib/dri # 这是你Mesa编译生成的dri驱动目录 - 针对Qt应用配置渲染后端:同样在环境变量里添加(根据你的Qt平台插件选择):
注:如果你的Qt是原来针对Vivante编译的,可能需要额外设置# 如果用X11平台 export QT_QPA_PLATFORM=xcb # 如果用EGLFS平台(嵌入式常用) export QT_QPA_PLATFORM=eglfs export QT_QPA_EGLFS_INTEGRATION=eglfs_etnavivLD_LIBRARY_PATH指向Mesa的库目录,确保Qt调用到Mesa的EGL/GL库。
4. 验证驱动是否生效
- 用
glxinfo(如果系统有安装)检查OpenGL渲染器:
正常应该显示glxinfo | grep "OpenGL renderer string"Etnaviv GPU [你的GPU型号] - 查看内核日志确认Etnaviv初始化:
能看到类似dmesg | grep etnavivetnaviv gpu xxxx: bound的日志就说明硬件绑定成功了 - 运行你的Qt应用,查看输出日志有没有Etnaviv相关的信息,同时观察应用是否正常渲染(没有黑屏、花屏,性能符合预期)
5. 处理GPU设备权限问题
Etnaviv的DRM设备节点/dev/dri/card0需要确保你的用户有访问权限:
- 查看当前权限:
ls -l /dev/dri/card0 - 如果权限不是
rw-rw-rw-,新建udev规则/etc/udev/rules.d/99-etnaviv.rules:SUBSYSTEM=="drm", KERNEL=="card0", MODE="0666" - 重新加载udev规则:
udevadm control --reload-rules && udevadm trigger
一些额外注意事项
- Linux 4.14的Etnaviv对部分Vivante GPU型号的支持可能有限,如果遇到兼容性问题,可以尝试调整Mesa编译时的参数,或者检查内核是否有针对你的GPU的补丁(不过你没法重构内核的话只能尽量排查)
- 确保你编译Mesa时的架构和系统完全匹配(比如ARM32/ARM64),否则库会无法加载
内容的提问来源于stack exchange,提问作者EzeEst
相关产品推荐
相关产品推荐

