首先感谢飞牛团队对香橙派5的适配
飞牛 FNOS Orange Pi 5 GPU、NPU、视频硬件转码适配问题反馈
反馈日期:2026-08-02
设备型号:Orange Pi 5
SoC:Rockchip RK3588S
系统:FNOS(Debian 12)
内核版本:6.18.18.c951-trim
一、问题概述
在 Orange Pi 5 上安装官方 FNOS 镜像后,GPU、NPU 以及视频硬件编解码单元未能按预期工作。
经过排查,问题并不是单纯缺少用户态软件包,而是当前系统所使用的 RK3588S 设备树,与系统内附带的 Rockchip 厂商 GPU、NPU、MPP/VPU、RGA 内核模块之间存在绑定不匹配。
通过补充设备树 Overlay 后,Mali-G610、RKNPU、RKVDEC、RKVENC 和 RGA3 均可被识别,飞牛媒体服务自带 FFmpeg 的 H.264/H.265 硬件编解码及 RGA 缩放也已实际验证通过。
希望飞牛官方检查 Orange Pi 5 当前镜像的设备树与硬件加速驱动集成,并在后续版本中提供正式修复。
二、原始故障现象
- GPU
系统内存在 Rockchip/ARM Mali 厂商内核模块,但启动后没有生成 /dev/mali0。
内核没有启用主线 Mali 驱动:
CONFIG_DRM_PANFROST is not set
CONFIG_DRM_PANTHOR is not set
CONFIG_DRM_ACCEL is not set
系统实际提供的 GPU 模块为:
rkgpu_bifrost_csf.ko
DDK 版本:g18p0-01eac0
由于主线 GPU 驱动未启用,而基础设备树又不符合厂商驱动绑定要求,Mali-G610 无法正常初始化。
- NPU
系统内存在 rknpu.ko,驱动版本为 v0.9.8,但基础设备树中的 NPU 核心和 IOMMU 使用拆分式节点,无法直接满足 Rockchip 厂商 RKNPU 驱动所需的组合节点结构。
结果是 NPU 无法按预期完整初始化和使用。
- 视频硬件编解码
系统内已经存在 rk_vcodec.ko,飞牛媒体服务自带的 FFmpeg 也已经包含以下功能:
rkmpp hwaccel
h264_rkmpp
hevc_rkmpp
scale_rkrga
vpp_rkrga
overlay_rkrga
但是原始状态下没有生成:
/dev/mpp_service
/dev/rga
因此,虽然飞牛自带 FFmpeg 具备 Rockchip 硬件加速功能,底层硬件设备实际上不可用,飞牛影视无法完成硬件转码。
- 媒体服务崩溃
在只修复 MPP/VPU、尚未修复 RGA 时,mediasrv 出现以下错误:
im2d_rga_context: failed to open /dev/rga: No such file or directory
随后媒体服务发生崩溃。
这说明飞牛媒体服务的硬件转码流程不仅依赖 RKVDEC/RKVENC,也依赖 RGA 图像处理设备。
三、原因分析
当前 FNOS 镜像的硬件支持组合大致如下:
- 基础设备树采用较新的、偏主线内核风格的 RK3588S 节点定义。
- GPU、NPU、MPP/VPU 和 RGA 使用的是 Rockchip 厂商版或树外驱动。
- 厂商驱动要求 Rockchip BSP 设备树中的 compatible、时钟名称、中断顺序、资源名称、CCU 和 IOMMU 组织方式。
- 当前基础设备树没有完整满足这些厂商驱动的绑定要求。
- GPU 主线驱动 Panfrost/Panthor 又没有编入内核,无法自动切换到主线方案。
具体表现包括:
GPU 节点的 compatible、时钟和中断定义与 rkgpu_bifrost_csf 驱动不匹配。
NPU 在主线设备树中拆分为多个核心和 IOMMU,而 rknpu 厂商驱动需要一个包含三个核心资源的组合节点。
RKVDEC、RKVENC 节点缺少厂商 MPP 驱动所需的 compatible、资源名称和 CCU 组织方式。
RGA 节点没有按 rga3.ko 所需方式描述两个 RGA3 核心及其 IOMMU。
当前 6.18 设备树的 GIC 中断描述为 4-cell 格式,而参考的 Rockchip 6.1 BSP 设备树使用 3-cell 格式,不能直接照搬。
U-Boot 合并 Overlay 时还会影响新增子节点的最终顺序。MPP 核心若先于 CCU 探测,会出现核心附加失败,因此需要保证合并后的 CCU 探测顺序正确。
四、临时修复方法
本次没有覆盖系统原始 DTB,而是增加了两个用户设备树 Overlay:
/boot/overlay-user/rk3588-gpu-npu.dtbo
/boot/overlay-user/rk3588-mpp.dtbo
启动配置:
/boot/fnEnv.txt
user_overlays=rk3588-gpu-npu rk3588-mpp
- GPU/NPU Overlay 的主要处理
将 GPU 节点适配为厂商驱动需要的 rockchip,rk3588-mali-csf。
补充 GPU 所需的时钟名称、中断顺序和相关资源。
将三个 NPU 核心及三个 IOMMU 合并为 rockchip,rk3588-rknpu 驱动需要的组合节点。
禁用会重复匹配的原拆分节点。
- MPP/RGA Overlay 的主要处理
增加两个 RKVDEC 解码核心及其 CCU。
增加两个 RKVENC 编码核心及其 CCU。
适配 FNOS 6.18 设备树的 4-cell GIC 中断格式。
调整 CCU 与核心节点顺序,确保 CCU 先完成探测。
增加两个 RGA3 核心及其 IOMMU。
- GPU 用户态库
安装的 Mali 用户态软件包为:
libmali-valhall-g610-g24p0-x11-wayland-gbm 1.9-1
需要注意,当前内核 GPU DDK 是 g18p0,用户态库是 g24p0。现有 OpenCL 和 Vulkan 测试可以正常工作,但这属于不同版本组合,后续系统升级时需要重新验证兼容性。
五、修复后的验证结果
- GPU
已生成:
/dev/mali0
识别信息:
Mali-G610
4 cores
r0p0
GPU ID:0xA867
驱动:rkgpu_bifrost_csf
验证结果:
OpenCL 3.0 能够识别 Mali-G610。
1024 元素向量加法计算通过。
Vulkan 使用 ARM Mali 驱动,不是 llvmpipe 软件渲染。
- NPU
驱动版本:
RKNPU v0.9.8
用户态运行库:
librknnrt 2.3.2
429f97ae6b@2025-04-09T09:09:27
已生成并可访问:
/dev/dri/card0
/dev/dri/renderD128
三个 NPU 核心均已枚举。
当前 NPU 状态:
频率:200 MHz
电压:800 mV
空闲时自动断 电
目前没有使用实际 .rknn 模型做端到端推理测试,因此只能确认内核初始化、三个核心枚举和设备节点访问正常,不能确认所有模型推理场景均正常。
- MPP/VPU
已生成:
/dev/mpp_service
/proc/mpp_service/supports-device 显示:
DEVICE[ 9]: RKVDEC HW_ID:0x53813f05
DEVICE[16]: RKVENC HW_ID:0x50603312
系统识别到两个 RKVDEC 核心和两个 RKVENC 核心。
- RGA
已生成:
/dev/rga
RGA 驱动版本:
v1.3.4
两个 RGA3 核心均已识别,硬件版本信息为:
hw_version: 3.0.76831
两个核心的 IOMMU 均绑定成功。
- 实际硬件转码测试
使用飞牛媒体服务自带的 FFmpeg 7.1.3-mediasrv 进行测试:
720p H.264 硬件编码,90 帧:
约 29.1 倍实时速度。
H.264 RKMpp 硬件解码:
约 65.1 倍实时速度。
H.264 硬件解码后转 HEVC 硬件编码:
约 22.7 倍实时速度。
H.264 硬解、RGA 从 1280×720 缩放到 640×360、再进行 HEVC 硬编:
约 31 倍实时速度。
以上测试均实际完成数据处理,不是仅确认驱动 probe 成功。
修复 RGA 后,mediasrv.service 保持 active/running,NRestarts=0。
六、仍然存在的警告和限制
- NPU OPP
RKNPU 当前固定在 200 MHz,并有 OPP 初始化失败相关警告。
现有基础设备树中缺少可以确认适用于 Orange Pi 5 板级供电设计的 NPU OPP、电压和校准表。为了避免复制其他 RK3588 板型的参数导致不稳定或硬件风险,本次没有继续强行提高 NPU 频率。
建议飞牛官方基于 Orange Pi 5 官方 BSP,补充对应板型的 NPU 电源和 OPP 配置。
- MPP 日志
当前可能出现以下非致命警告:
shared_niu_a/h is not found
rkvenc OPP init failure / no devfreq
mpp_platform client ... driver is not ready
已启用的 RKVDEC、RKVENC 和 RGA3 核心能够完成 H.264/H.265 实际硬件任务。
未启用或未验证的部分主要包括 AV1、JPEG、IEP 等其他硬件客户端。
- MPP 用户态库警告
FFmpeg 结束时偶尔会输出 mpp_mem_pool_put invalid 等警告。
当前测试输出文件正常,程序返回成功。该警告可能来自飞牛随附 MPP 用户态库的资源释放处理,建议官方继续检查。
- 系统升级风险
当前基础 DTB 没有完整的 symbols。Overlay 中部分资源只能引用基础设备树的原始 phandle。
FNOS 更新内核或基础 DTB 后,节点结构和 phandle 编号可能变化,当前 Overlay 可能需要重新适配,严重时可能影响启动。
因此,更合适的正式方案是由飞牛将对应节点直接整合进 Orange Pi 5 官方 DTB,或者随每个内核版本发布匹配的板型 Overlay。
七、CPU/GPU 频率说明
Orange Pi 官方资料给出的 CPU 最高频率为:
Cortex-A55:1.8 GHz
Cortex-A76:2.4 GHz
当前系统已通过独立 systemd 服务设置为:
A55:1.8 GHz
A76:2.4 GHz
GPU:1.0 GHz
GPU 1.0 GHz 是当前内核设备树 GPU OPP 表的最高档位。Orange Pi 官方产品页没有明确标注 GPU MHz。
固定最高频率属于用户自行启用的性能策略,不属于本次镜像设备识别故障。该设置会增加功耗和温度,散热不足时仍可能热降频。
八、希望飞牛官方处理的事项
- 检查 Orange Pi 5 当前 6.18 内核基础 DTB,与 rkgpu_bifrost_csf、rknpu、rk_vcodec、rga3 模块的绑定是否完整匹配。
- 在官方 Orange Pi 5 DTB 或官方 Overlay 中补齐 Mali-G610、三个 RKNPU 核心、RKVDEC、RKVENC、CCU、RGA3 和 IOMMU 节点。
- 对当前 6.18 内核的 4-cell GIC 中断格式进行正式适配,不要直接使用 Rockchip 6.1 BSP 的 3-cell 定义。
- 检查 MPP CCU 与核心的探测依赖,避免核心先探测时出现附加失败。
- 补充适用于 Orange Pi 5 板级供电设计的 NPU 和 RKVENC OPP/devfreq 配置。
- 在 Orange Pi 5 上执行飞牛影视端到端测试,包括:
H.264 硬解;
H.264 硬编;
HEVC 硬解;
HEVC 硬编;
RGA 缩放和色彩转换;
多路并发转码;
长时间稳定性测试。
- 检查 mediasrv 在 /dev/rga 缺失时直接崩溃的问题。建议改为明确报告硬件不可用,并回退到软件路径,而不是发生段错误。
- 统一或明确 Mali 内核 DDK 与用户态 libmali 的推荐版本,避免不同版本混用带来的升级兼容风险。
- 检查飞牛随附 MPP 用户态库退出时的 mpp_mem_pool_put invalid 警告。
- 在系统升级时检测第三方或旧版 DT Overlay,避免基础 DTB 更新后因 phandle 变化导致启动故障。
九、建议官方复现时检查的内容
内核配置:
zcat /proc/config.gz | grep -E 'PANFROST|PANTHOR|DRM_ACCEL'
Overlay 配置:
grep '^user_overlays=' /boot/fnEnv.txt
设备节点:
ls -l /dev/mali0 /dev/mpp_service /dev/rga /dev/dri/renderD128
相关日志:
dmesg | grep -Ei 'mali|rknpu|rkvdec|rkvenc|mpp|rga|iommu'
MPP 设备:
cat /proc/mpp_service/supports-device
NPU 状态:
cat /proc/rknpu/freq
媒体服务:
systemctl status mediasrv.service --no-pager
systemctl show mediasrv.service -p ActiveState -p SubState -p NRestarts
十、可随工单提供的附件
- fnos-rk3588-gpu-npu-overlay.dts
GPU/NPU Overlay 源文件。
- fnos-rk3588-mpp-overlay.dts
RKVDEC、RKVENC、CCU、RGA3 和 IOMMU Overlay 源文件。
- 完整的 dmesg 日志。
建议同时提供未修复状态和修复后状态。
- /proc/mpp_service/supports-device 输出。
- 飞牛自带 FFmpeg 的硬件编解码测试命令及完整输出。
- mediasrv.service 崩溃日志和修复后的服务状态。
十一、补充说明
本次修复没有直接覆盖系统原始 DTB,只使用 /boot/overlay-user/ 下的 Overlay,便于回滚。
该问题与客户端终端是否能够直接访问局域网无关。目标 Orange Pi 5 的网络和 SSH 服务本身正常,网络访问路径不属于本次 FNOS 镜像问题。
本反馈不包含设备密码、内网地址或其他登录凭据。