【Super Point】K3 平台 V2D 硬件加速格式转换驱动不完整导致集成失败

系统版本

  • SoC :SpacemiT Key Stone K3
  • GPU :PowerVR B-Series BXM-4-64 MC1
  • 内核版本 :Linux 5.x(SpacemiT 官方 BSP)
  • V2D 驱动libv2d_plugin.so (版本未知,随 BSP 发布)

使用场景或测试目标

目标构建一个完整的渲染 → 格式转换 → 编码流水线:

  1. Vulkan 离屏渲染输出 BGRA 纹理(VK_FORMAT_B8G8R8A8_UNORM
  2. 需要转换为 NV12(YUV 4:2:0)格式供 VPU 硬件编码器(h264_v4l2m2m )使用
  3. 预期用 V2D 硬件加速替代 CPU 颜色转换,提升

渲染 (GPU) → BGRA → [V2D 硬件转换] → NV12 → VPU 编码 → H.264

操作步骤

1. 环境检查

bash

检查 V2D 设备节点 ls -la /dev/v2d*

输出:/dev/v2d0 存在

检查 V2D 库 ls -la /usr/lib/libv2d_plugin.so

输出:文件存在

2. 官方测试程序验证

bash

运行官方 g2d_test ./g2d_test

3. 引擎集成尝试

core/graphics/v2d/v2d_converter.cpp 中:

cpp

// 动态加载 libv2d_plugin.so void* handle = dlopen(“libv2d_plugin.so”, RTLD_LAZY);
// 调用 ASR_V2D_Init 成功
// 调用 ASR_V2D_StartJob 成功
// 调用 ASR_V2D_EndJob 崩溃

结果数据 / 截图 / 日志

官方测试程序崩溃日志

text

$ ./g2d_test [G2D] Version: 1.0.0 [G2D] Device opened: /dev/v2d0 [G2D] Initialization successful [G2D] Starting job… Segmentation fault (core dumped)

引擎集成崩溃堆栈

text

(gdb) bt #0 0x0000fffff7a8b4c0 in ASR_V2D_EndJob () from /usr/lib/libv2d_plugin.so #1 0x0000aaaab4c2d8a0 in V2DConverter::convert() at v2d_converter.cpp:87 #2 0x0000aaaab4c2e000 in main() at test_v2d.cpp:45

符号检查

bash

$ nm -D /usr/lib/libv2d_plugin.so | grep ASR_V2D 0000fffff7a8b000 T ASR_V2D_Init 0000fffff7a8b200 T ASR_V2D_StartJob U ASR_V2D_EndJob # ← 未定义!?

关键发现ASR_V2D_EndJob 符号在 .so 中缺失或被剥离,导致调用时跳转到无效地址。

遇到的问题

问题一:V2D 驱动接口不完整

  • libv2d_plugin.so 导出了 ASR_V2D_InitASR_V2D_StartJob ,但 ASR_V2D_EndJob 符号缺失或为 UNDEFINED
  • 官方提供的测试程序 g2d_test 同样崩溃,说明不是引擎集成问题,而是底层驱动/BSP 问题

问题二:缺少 V2D 文档

  • 没有公开的 V2D API 文档
  • 不清楚正确的 job 提交和等待完成流程
  • libv2d_plugin.so 的调用约定不明确

问题三:社区经验空白

  • 在 SpacemiT 官方论坛搜索 V2D 关键词,几乎找不到任何开发者分享的使用经验
  • 官方 SDK 示例中只有简单的 g2d_test ,没有实际生产级示例

你的判断 / 改进建议

根因判断

  1. BSP 发布不完整 :K3 的 V2D 硬件在设备树中已启用(/dev/v2d0 存在),但用户态驱动 libv2d_plugin.so 缺少关键 API 实现
  2. 质量验证不足 :官方测试程序无法正常运行,说明 V2D 软件栈未经过基本质量验证即随 BSP 发布
  3. 文档缺失 :没有提供完整的 V2D 编程指南或 API 参考手册
1 Like

恭喜点亮 【K3 共建计划】 Super Point 精选反馈!相关权益和后续进展我们会通过论坛或社群同步。

对于内核,我们目前是6.18
你这个是 buildroot 还是bianbu?
buildroot 和 bianbu lxqt 对应都有example

@Jun 这是【K3 共建计划】super point精选反馈,在这里跟进交流:)

谢谢指点,问题已经解决

系统环境验证 (Bianbu 4.0.1 + 内核 6.18) :white_check_mark: V2D 工作正常
官方 v2d_test 运行 :white_check_mark: 测试通过