您好,NXP技术支持,
我们正在调查 i.MX8MP 平台上的一个可重现的图形问题。
结果:
结果:
malloc(): unaligned tcache chunk detected图形故障后,偶尔还会出现无关进程的崩溃。
最初,这个问题看起来像是 Qt Quick 的问题。
但是,我们将测试用例简化到了最小:
QOpenGLWindow不使用 QML、场景图、QRhi、纹理或自定义渲染。
故障依然发生。
一个简单的原生 Wayland/EGL/GLES3 应用程序运行稳定:
wl_egl_window
eglCreateContext
glClear
eglSwapBuffers1920x1080持续了几个小时。
我们使用以下方法创建了一个原生 Wayland/EGL/GLES3 测试:
以下尺寸通过了验证:
500x500
640x480
800x480
900x540
1024x6001280x720
1280x800启动 OpenGL 应用程序后,Weston 崩溃了:
weston.service: Main process exited
status=11/SEGVThe Wayland connection broke.
Did the Wayland compositor die?这表明韦斯顿首先撞车。
以下库在正常运行的系统中与出现故障的系统中有所不同:
libGAL.so
libEGL.so
libGLESv2.so6.4.11.p4.4
6.4.11.p4.6而年长的:
6.4.11.p2.x适用于 6.6 内核。
Vivante 6.4.11.p4.x 版本是否存在与以下方面相关的已知问题:
p2.x 和 p4.x 之间是否存在已知的回归关系?
是否有推荐的调试选项?
任何指导都将不胜感激。
我附上了一个简单的测试应用程序,它可以在内核 6.18.20 和 Vivante 堆栈 6.4.11.p4.4 和 6.4.11.p4.6 上重现崩溃问题。
我进行了进一步调查。
内核 6.6.52 与 Vivante p6.4.11.p4.4 -> 运行正常
内核 6.18.20 与 Vivante p6.4.11.p4.4 -> 崩溃
研究结果显然已经恶化:
直接将图像尺寸从 500x500 调整到 1024x600 就足以导致崩溃。
崩溃发生在 OpenGL 路径中,紧接着交换链大小的变化。
与此同时,systemd-journal 再次发生 SEGV 错误。
这强烈表明 GL/Wayland/Vivante 堆栈中存在内存损坏,而不仅仅是应用程序错误。
该假设的现状
关键的不仅仅是 1280x720 分辨率。
相反,决定性因素是直接跳转到“重新配置”并接着跳转到“呈现”。
顺序的、较小的尺寸调整比直接跳跃要稳健得多。
软件后端保持稳定,证实问题出在硬件-GL路径上。
你好,
与其说是 Qt 问题,不如说是 Vivante/galcore 或缓冲区管理问题,尤其是原生 EGL 测试也会触发该问题,而且 Weston 是第一个崩溃的进程。它从较大的渲染目标开始,并且只在 p4.x 堆栈中发生,这一点尤其有趣。我会比较 p2 和 p4 GAL/GBM 的变化,并启用 galcore/Weston 调试缓冲区分配和导入功能。