铭凡 N5 Pro (Radeon 890M) PVE 直通飞牛 OS 硬解问题排查记录
一、环境概述
| 项目 |
配置 |
| 主机 |
铭凡 N5 Pro |
| CPU/GPU |
AMD Ryzen AI 9 HX 370 (Radeon 890M) |
| 虚拟化平台 |
Proxmox VE 9.2.3 |
| 虚拟机系统 |
飞牛 OS (FNOS) 1.2.0010 |
| 目标 |
将 Radeon 890M 核显直通给飞牛 VM,实现影视硬件转码 |
二、BIOS 设置(铭凡 N5 必须配置)
进入 BIOS 后确认以下选项:
| 选项 |
状态 |
| SVM |
Enabled |
| IOMMU |
Enabled |
| Above 4G Decoding |
Enabled |
| CSM |
Disabled |
| Secure Boot |
Disabled |
| UMA Frame Buffer |
512MB 或更高 |
| iGPU Multi-Monitor |
Disabled(如存在) |
三、PVE 宿主机配置
1. GRUB 参数
编辑 /etc/default/grub:
text
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt initcall_blacklist=sysfb_init pci=realloc"
执行 update-grub 并重启。
2. 屏蔽宿主机 amdgpu 驱动
bash
echo "blacklist amdgpu" > /etc/modprobe.d/pve-blacklist.conf
update-initramfs -u -k all
3. 虚拟机配置(100.conf)
text
bios: ovmf
machine: q35
hostpci0: c5:00.0,pcie=1,rombar=1,x-vga=1
hostpci1: c5:00.1,pcie=1
args: -device pcie-pci-bridge -device pcie-root-port
关键点:rombar=1 是必须的,否则虚拟机内无法读取 VBIOS。
四、飞牛 OS 内配置
1. 安装驱动和固件
bash
apt update
apt install -y firmware-amd-graphics mesa-va-drivers mesa-vulkan-drivers libdrm-amdgpu1 libva2 vainfo
2. 替换飞牛自带的 VA-API 库
飞牛自带的 libva 和 libdrm 版本较旧,需要替换为系统库:
bash
# 备份并替换 libva 库
mv /usr/trim/lib/mediasrv/lib/libva.so.2{,.bak}
mv /usr/trim/lib/mediasrv/lib/libva-drm.so.2{,.bak}
mv /usr/trim/lib/mediasrv/lib/libdrm.so.2{,.bak}
ln -sf /usr/lib/x86_64-linux-gnu/libva.so.2 /usr/trim/lib/mediasrv/lib/libva.so.2
ln -sf /usr/lib/x86_64-linux-gnu/libva-drm.so.2 /usr/trim/lib/mediasrv/lib/libva-drm.so.2
ln -sf /usr/lib/x86_64-linux-gnu/libdrm.so.2 /usr/trim/lib/mediasrv/lib/libdrm.so.2
3. 替换 libdrm_amdgpu 库
bash
mv /usr/trim/lib/mediasrv/lib/libdrm_amdgpu.so.1{,.bak}
mv /usr/trim/lib/mediasrv/lib/libdrm_amdgpu.so{,.bak}
ln -sf /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1 /usr/trim/lib/mediasrv/lib/libdrm_amdgpu.so.1
ln -sf /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1 /usr/trim/lib/mediasrv/lib/libdrm_amdgpu.so
4. 修复 VA-API 驱动链接
bash
rm -f /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
ln -sf ../libgallium-25.0.7-2~bpo12+1.so /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
5. 配置 mediasrv 环境变量
bash
cat > /etc/systemd/system/mediasrv.service.d/override.conf << 'EOF'
[Service]
Environment="LIBVA_DRIVER_NAME=radeonsi"
Environment="LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri"
Environment="GST_VAAPI_DRM_DEVICE=/dev/dri/renderD128"
EOF
systemctl daemon-reload
systemctl restart mediasrv
五、验证结果
1. 检查 GPU 设备
bash
ls -la /dev/dri/
# 应看到 card0 和 renderD128
2. 验证 VA-API
bash
vainfo
# 应显示 Radeon 890M Graphics 的编码/解码列表
3. mediasrv VA-API 加载成功
text
Jun 19 22:24:40 FnOS mediasrv[121496]: libva info: VA-API version 1.17.0
Jun 19 22:24:40 FnOS mediasrv[121496]: libva info: User environment variable requested driver 'radeonsi'
Jun 19 22:24:40 FnOS mediasrv[121496]: libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
Jun 19 22:24:40 FnOS mediasrv[121496]: libva info: Found init function __vaDriverInit_1_17
Jun 19 22:24:40 FnOS mediasrv[121496]: libva info: va_openDriver() returns 0
六、当前问题
现象:mediasrv 成功加载 VA-API 驱动,但在实际转码时出现 VPE 初始化失败:
text
SIVPE ERROR ../src/gallium/drivers/radeonsi/si_vpe.c:947 si_vpe_construct_blt
Failed in checking process operation and build settings(9)
分析:
- VA-API 驱动(
libgallium)已正确加载
/dev/dri/renderD128 设备存在
- GPU 直通和驱动层工作正常
mediasrv 在转码时尝试调用 VPE(Video Processing Engine)进行视频处理
- VPE 初始化失败导致整个 GPU 加速被跳过,fallback 到软解
- 环境变量
AMD_VPE_DISABLE=1 对当前 Mesa 版本无效
疑似原因:飞牛 mediasrv 的转码模块与 Radeon 890M 的新版 Mesa 驱动(25.0.7)存在兼容性问题。
七、建议
飞牛官方:建议在新版中优化 mediasrv 的 GPU 检测逻辑,增加对 Radeon 890M(RDNA 3.5)的兼容性支持,或提供禁用 VPE 的配置选项。
八、相关日志
journalctl -u mediasrv -f
/usr/trim/logs/mediasrv.log
dmesg | grep -i amdgpu
九、参考信息
- GPU:AMD Radeon 890M(Device ID: 1002:150E)
- 内核:6.18.18.c788-trim
- Mesa:25.0.7-2~bpo12+1
- 飞牛影视服务端版本:0.8.35