Ubuntu21.04下通过BitBake编译meson-mali报错如何解决?
问题根因
你使用的meson-mali对应的Mali Bifrost r12p0驱动为适配4.x内核的旧版本,与编译目标的5.11版本内核、高版本GCC存在兼容性问题:
array-bounds错误:5.11内核arm64架构的atomic_t类型定义和旧驱动的cmpxchg操作逻辑不匹配,GCC边界检查检测到类型长度不一致,触发报错maybe-uninitialized错误:高版本GCC的数据流分析规则更严格,检测到栈变量buf存在未初始化就被调用的可能执行路径,因为内核默认开启-Werror将警告升级为错误
解决方案
方案1(最快生效):添加编译参数忽略指定错误
直接修改meson-mali对应的BitBake配方文件(通常为meson-mali-module.bb或同名的.bbappend文件),在编译参数中添加对这两类错误的忽略规则:
EXTRA_CFLAGS += "-Wno-error=array-bounds -Wno-error=maybe-uninitialized"
修改后重新触发BitBake编译即可,这两类警告均为不影响驱动实际运行的兼容性提示,忽略后不会产生功能问题。
方案2(彻底修复):给驱动源码打适配补丁
如果需要保留-Werror的编译检查规则,可以修改两处驱动源码:
- 修复
array-bounds错误:在mali_kbase_tlstream.c中,将对kbase_tlstream_enabled的自定义cmpxchg操作,替换为5.x内核标准的atomic_cmpxchg接口 - 修复
maybe-uninitialized错误:在mali_kbase_core_linux.c的kbasep_serialize_jobs_debugfs_write函数中,将buf的定义修改为初始化状态:
char buf[MAX_SERIALIZE_JOBS_NAME_LEN] = {0};
将修改内容做成补丁放到配方的files目录下,在配方中通过SRC_URI引用补丁即可。
方案3:更换适配5.x内核的驱动版本
直接选用已经适配5.10+内核的meson-mali驱动版本,替换当前使用的旧版配方即可从根源解决兼容性问题。
内容的提问来源于stack exchange,提问作者fairbird
相关产品推荐
相关产品推荐

