V2D 硬件加速问题总结
一、硬件状态
V2D 硬件设备存在:/dev/v2d_dev
内核驱动已加载:设备 minor 263
硬件理论上支持 BGRA → NV12 格式转换
二、软件栈问题
1. 缺少关键符号
text
/usr/lib/libv2d_plugin.so: undefined symbol: ASR_V2D_EndJob
ASR_V2D_BeginJob、ASR_V2D_EndJob等符号在用户空间不存在- 这些符号应由内核驱动或固件提供,但未导出到用户态
2. G2D API 崩溃
G2D_CreateChannel()成功,但ctx->pModule为 NULLG2D_SetParam()和G2D_Init()都导致段错误- 原因:内部函数指针表未正确初始化
3. MPP 框架问题
module_init(VPS_K1_V2D)返回成功,但后续 API 调用崩溃- VI 框架错误地将 V2D 当作视频输入设备使用
libv2d_plugin.so只导出al_g2d_*,不导出al_vi_*
4. 官方测试程序也崩溃
text
/usr/bin/vi_file_vdec_vo_test --moduletype 301 … → Segmentation fault in VI_Init
三、缺失的组件
| 组件 | 状态 | 说明 |
|---|---|---|
| libv2d_core.so | 提供 ASR_V2D_* 符号 | |
| v2d_test 工具 | 官方验证工具 | |
| 示例代码 | 无参考实现 | |
| 完整文档 | README 为空 | |
| 头文件 | g2d.h 有但 API 崩溃 |
四、根本原因
SpacemiT K3 的 V2D 软件栈不完整:
- 用户态库
libv2d_plugin.so依赖的内核符号未导出 - MPP 框架的 V2D 模块有 bug,无法正常使用
- 缺少必要的运行时库(如 libv2d_core.so)
- 没有可用的示例程序和文档