收起左侧

香橙派5 硬件加速问题反馈

1
回复
18
查看
[ 复制链接 ]

2

主题

0

回帖

0

牛值

江湖小虾

首先感谢飞牛团队对香橙派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 当前镜像的设备树与硬件加速驱动集成,并在后续版本中提供正式修复。

二、原始故障现象

  1. 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 无法正常初始化。

  1. NPU

系统内存在 rknpu.ko,驱动版本为 v0.9.8,但基础设备树中的 NPU 核心和 IOMMU 使用拆分式节点,无法直接满足 Rockchip 厂商 RKNPU 驱动所需的组合节点结构。

结果是 NPU 无法按预期完整初始化和使用。

  1. 视频硬件编解码

系统内已经存在 rk_vcodec.ko,飞牛媒体服务自带的 FFmpeg 也已经包含以下功能:

rkmpp hwaccel
h264_rkmpp
hevc_rkmpp
scale_rkrga
vpp_rkrga
overlay_rkrga

但是原始状态下没有生成:

/dev/mpp_service
/dev/rga

因此,虽然飞牛自带 FFmpeg 具备 Rockchip 硬件加速功能,底层硬件设备实际上不可用,飞牛影视无法完成硬件转码。

  1. 媒体服务崩溃

在只修复 MPP/VPU、尚未修复 RGA 时,mediasrv 出现以下错误:

im2d_rga_context: failed to open /dev/rga: No such file or directory

随后媒体服务发生崩溃。

这说明飞牛媒体服务的硬件转码流程不仅依赖 RKVDEC/RKVENC,也依赖 RGA 图像处理设备。

三、原因分析

当前 FNOS 镜像的硬件支持组合大致如下:

  1. 基础设备树采用较新的、偏主线内核风格的 RK3588S 节点定义。
  2. GPU、NPU、MPP/VPU 和 RGA 使用的是 Rockchip 厂商版或树外驱动。
  3. 厂商驱动要求 Rockchip BSP 设备树中的 compatible、时钟名称、中断顺序、资源名称、CCU 和 IOMMU 组织方式。
  4. 当前基础设备树没有完整满足这些厂商驱动的绑定要求。
  5. 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

  1. GPU/NPU Overlay 的主要处理

将 GPU 节点适配为厂商驱动需要的 rockchip,rk3588-mali-csf。

补充 GPU 所需的时钟名称、中断顺序和相关资源。

将三个 NPU 核心及三个 IOMMU 合并为 rockchip,rk3588-rknpu 驱动需要的组合节点。

禁用会重复匹配的原拆分节点。

  1. MPP/RGA Overlay 的主要处理

增加两个 RKVDEC 解码核心及其 CCU。

增加两个 RKVENC 编码核心及其 CCU。

适配 FNOS 6.18 设备树的 4-cell GIC 中断格式。

调整 CCU 与核心节点顺序,确保 CCU 先完成探测。

增加两个 RGA3 核心及其 IOMMU。

  1. GPU 用户态库

安装的 Mali 用户态软件包为:

libmali-valhall-g610-g24p0-x11-wayland-gbm 1.9-1

需要注意,当前内核 GPU DDK 是 g18p0,用户态库是 g24p0。现有 OpenCL 和 Vulkan 测试可以正常工作,但这属于不同版本组合,后续系统升级时需要重新验证兼容性。

五、修复后的验证结果

  1. GPU

已生成:

/dev/mali0

识别信息:

Mali-G610
4 cores
r0p0
GPU ID:0xA867
驱动:rkgpu_bifrost_csf

验证结果:

OpenCL 3.0 能够识别 Mali-G610。
1024 元素向量加法计算通过。
Vulkan 使用 ARM Mali 驱动,不是 llvmpipe 软件渲染。

  1. 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 模型做端到端推理测试,因此只能确认内核初始化、三个核心枚举和设备节点访问正常,不能确认所有模型推理场景均正常。

  1. MPP/VPU

已生成:

/dev/mpp_service

/proc/mpp_service/supports-device 显示:

DEVICE[ 9]: RKVDEC HW_ID:0x53813f05
DEVICE[16]: RKVENC HW_ID:0x50603312

系统识别到两个 RKVDEC 核心和两个 RKVENC 核心。

  1. RGA

已生成:

/dev/rga

RGA 驱动版本:

v1.3.4

两个 RGA3 核心均已识别,硬件版本信息为:

hw_version: 3.0.76831

两个核心的 IOMMU 均绑定成功。

  1. 实际硬件转码测试

使用飞牛媒体服务自带的 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。

六、仍然存在的警告和限制

  1. NPU OPP

RKNPU 当前固定在 200 MHz,并有 OPP 初始化失败相关警告。

现有基础设备树中缺少可以确认适用于 Orange Pi 5 板级供电设计的 NPU OPP、电压和校准表。为了避免复制其他 RK3588 板型的参数导致不稳定或硬件风险,本次没有继续强行提高 NPU 频率。

建议飞牛官方基于 Orange Pi 5 官方 BSP,补充对应板型的 NPU 电源和 OPP 配置。

  1. 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 等其他硬件客户端。

  1. MPP 用户态库警告

FFmpeg 结束时偶尔会输出 mpp_mem_pool_put invalid 等警告。

当前测试输出文件正常,程序返回成功。该警告可能来自飞牛随附 MPP 用户态库的资源释放处理,建议官方继续检查。

  1. 系统升级风险

当前基础 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。

固定最高频率属于用户自行启用的性能策略,不属于本次镜像设备识别故障。该设置会增加功耗和温度,散热不足时仍可能热降频。

八、希望飞牛官方处理的事项

  1. 检查 Orange Pi 5 当前 6.18 内核基础 DTB,与 rkgpu_bifrost_csf、rknpu、rk_vcodec、rga3 模块的绑定是否完整匹配。
  2. 在官方 Orange Pi 5 DTB 或官方 Overlay 中补齐 Mali-G610、三个 RKNPU 核心、RKVDEC、RKVENC、CCU、RGA3 和 IOMMU 节点。
  3. 对当前 6.18 内核的 4-cell GIC 中断格式进行正式适配,不要直接使用 Rockchip 6.1 BSP 的 3-cell 定义。
  4. 检查 MPP CCU 与核心的探测依赖,避免核心先探测时出现附加失败。
  5. 补充适用于 Orange Pi 5 板级供电设计的 NPU 和 RKVENC OPP/devfreq 配置。
  6. 在 Orange Pi 5 上执行飞牛影视端到端测试,包括:
    H.264 硬解;
    H.264 硬编;
    HEVC 硬解;
    HEVC 硬编;
    RGA 缩放和色彩转换;
    多路并发转码;
    长时间稳定性测试。
  7. 检查 mediasrv 在 /dev/rga 缺失时直接崩溃的问题。建议改为明确报告硬件不可用,并回退到软件路径,而不是发生段错误。
  8. 统一或明确 Mali 内核 DDK 与用户态 libmali 的推荐版本,避免不同版本混用带来的升级兼容风险。
  9. 检查飞牛随附 MPP 用户态库退出时的 mpp_mem_pool_put invalid 警告。
  10. 在系统升级时检测第三方或旧版 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

十、可随工单提供的附件

  1. fnos-rk3588-gpu-npu-overlay.dts
    GPU/NPU Overlay 源文件。
  2. fnos-rk3588-mpp-overlay.dts
    RKVDEC、RKVENC、CCU、RGA3 和 IOMMU Overlay 源文件。
  3. 完整的 dmesg 日志。
    建议同时提供未修复状态和修复后状态。
  4. /proc/mpp_service/supports-device 输出。
  5. 飞牛自带 FFmpeg 的硬件编解码测试命令及完整输出。
  6. mediasrv.service 崩溃日志和修复后的服务状态。

十一、补充说明

本次修复没有直接覆盖系统原始 DTB,只使用 /boot/overlay-user/ 下的 Overlay,便于回滚。

该问题与客户端终端是否能够直接访问局域网无关。目标 Orange Pi 5 的网络和 SSH 服务本身正常,网络访问路径不属于本次 FNOS 镜像问题。

本反馈不包含设备密码、内网地址或其他登录凭据。

收藏
送赞
分享

1

主题

4

回帖

0

牛值

江湖小虾

你是 immich 或者 frigate 调用 NPU 失败吗?

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则