飞牛OS暂时还未更新支持890M硬件解码,我通过GPT协助实现了让890M支持飞牛影视的解码功能,攻略仅供大家参考
环境概况
- 设备:铭凡 N5 Pro(Radeon 890M / Strix Halo)
- 系统:飞牛 OS,基于 Debian 12 (bookworm),内核
6.12.18-trim
- 目标:让飞牛影视(基于 Jellyfin)使用 VAAPI/Vulkan 进行 GPU 解码与编码
典型症状
dmesg 显示 amdgpu 已加载,但飞牛影视提示“硬件转码失败,无法播放”。
vainfo 默认加载 /usr/trim/lib/mediasrv 下的旧版 radeonsi_drv_video.so,初始化失败。
journalctl -u mediasrv 日志出现 VK_ERROR_INITIALIZATION_FAILED 和 amdgpu: unknown (family_id, chip_external_rev): (150, 20)。
排障历程概述
- 基础确认:
uname -r/lspci/dmesg 证明内核、固件与 amdgpu 模块工作正常,但 /dev/dri 设备存在时 Jellyfin 仍报错。
- 第一次
vainfo 失败:直接运行 vainfo 提示 XDG_RUNTIME_DIR 和 X server,改用 vainfo --display drm --device /dev/dri/renderD128 后仍因 /usr/trim/lib/mediasrv/dri/radeonsi_drv_video.so 加载旧版库导致 va_openDriver() returns 2。
- 发现 libdrm 版本冲突:Mesa 包含的新
radeonsi_drv_video.so 需要 amdgpu_va_get_start_addr 符号,飞牛自带的 /usr/trim/lib/mediasrv/libdrm_amdgpu.so 太旧;将其改名并链接到 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1 后 vainfo 成功输出。
- 补齐
amdgpu.ids:日志出现 /usr/lib/jellyfin-ffmpeg/share/libdrm/amdgpu.ids: No such file or directory,手动复制系统版本解决。
- 处理 Vulkan 初始化失败:播放仍报错,
journalctl 显示 VK_ERROR_INITIALIZATION_FAILED;检查发现 /usr/trim/lib/mediasrv/ 下仍加载旧版 libvulkan*.so 和 libvulkan_radeon.so,改为符号链接指向 Mesa/系统版本后问题消失。
- 固件缺失排除:最初下载
linux-firmware 时遇到 GitLab 登录页(17KB HTML)覆盖固件、以及旧版包缺 gc_11_0_3_toc.bin,最终使用 linux-firmware-20251021 才补齐所有 RDNA3 所需固件。
- 最终验证:
vainfo、vulkaninfo、journalctl 均正常,飞牛影视播放信息显示 “启用 GPU: GPU 1 – AMD,VAAPI 解码/编码”,硬件转码恢复。
解决步骤
1. 启用 non-free 仓库并更新索引
cat <<'EOL' > /etc/apt/sources.list.d/nonfree.list
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware
EOL
apt update
2. 安装新版驱动与库
apt install -t bookworm-backports \
firmware-amd-graphics mesa-vulkan-drivers mesa-va-drivers mesa-vdpau-drivers \
libdrm-amdgpu1 libgl1-mesa-dri libva2 libva-drm2 libva-x11-2 libva-wayland2 libva-glx2
apt install vulkan-tools vainfo
3. 覆盖最新 linux-firmware
cd /tmp
# 若下载过慢,可在本地获取压缩包后通过 scp 上传至 /tmp
wget https://mirrors.edge.kernel.org/pub/linux/kernel/firmware/linux-firmware-20251021.tar.xz
tar xf linux-firmware-20251021.tar.xz
cp -a linux-firmware-20251021/amdgpu/. /lib/firmware/amdgpu/
# 确认新的 RDNA3 固件(gc_11_0_3_mes1/mes_2 等)已就位且文件尺寸正常
ls -l /lib/firmware/amdgpu/gc_11_0_3_mes1.bin /lib/firmware/amdgpu/gc_11_0_3_mes_2.bin /lib/firmware/amdgpu/gc_11_0_3_rlc.bin
update-initramfs -u
reboot
注:近期固件仓库不再提供单独的 gc_11_0_3_toc.bin 或通用 ip_discovery.bin,缺失属正常;若 update-initramfs 仍提示缺少这些文件,可忽略。
重启后再次连接系统后继续以下操作。
4. 替换飞牛内置的旧库
# 备份飞牛旧版 libdrm / radeonsi 驱动
timestamp=$(date +%Y%m%d-%H%M)
for f in libdrm_amdgpu.so libdrm_amdgpu.so.1 libdrm_amdgpu.so.1.0.0 \
dri/radeonsi_drv_video.so libvulkan.so libvulkan.so.1 libvulkan_radeon.so; do
if [ -e "/usr/trim/lib/mediasrv/$f" ]; then
mv "/usr/trim/lib/mediasrv/$f" "/usr/trim/lib/mediasrv/${f}.${timestamp}.bak"
fi
done
# 建立指向 Mesa 库的符号链接
ln -sf /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so \
/usr/trim/lib/mediasrv/dri/radeonsi_drv_video.so
ln -sf /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1 \
/usr/trim/lib/mediasrv/libdrm_amdgpu.so.1
ln -sf /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1 \
/usr/trim/lib/mediasrv/libdrm_amdgpu.so
ln -sf /usr/lib/x86_64-linux-gnu/libvulkan.so.1 \
/usr/trim/lib/mediasrv/libvulkan.so.1
ln -sf /usr/lib/x86_64-linux-gnu/libvulkan.so.1 \
/usr/trim/lib/mediasrv/libvulkan.so
ln -sf /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so \
/usr/trim/lib/mediasrv/libvulkan_radeon.so
# 提供缺失的 amdgpu.ids
mkdir -p /usr/lib/jellyfin-ffmpeg/share/libdrm
cp /usr/share/libdrm/amdgpu.ids /usr/lib/jellyfin-ffmpeg/share/libdrm/
# 重启媒体服务
systemctl restart mediasrv
5. 验证 GPU 解码/转码可用
vainfo --display drm --device /dev/dri/renderD128
vulkaninfo | grep -A2 "GPU id"
journalctl -u mediasrv --no-pager -n 50
vainfo 应显示 “Driver version: Mesa Gallium driver 25.0.7-2~bpo12+1 ...”。
vulkaninfo 应列出 AMD Radeon Graphics (RADV GFX1150)。
journalctl 不再出现 VK_ERROR_INITIALIZATION_FAILED。
- 纯命令行环境运行
vulkaninfo 时出现 “DISPLAY/XDG_RUNTIME_DIR not set” 仅为警告,可忽略。
- 飞牛影视播放界面应显示“启用 GPU: GPU 1 – AMD,VAAPI 解码/编码”。
常见问题与注意事项
update-initramfs 提示缺少其他 GPU 固件(如 vega10_cap.bin)可以忽略,它们与 890M 无关。
- 飞牛 OS 更新后可能恢复旧库,如遇再次失败,重复“步骤 4” 重新链接新版库。
- 若需要 ROCm/OpenCL,请关注 AMD 是否发布针对 Strix Halo 的正式支持。
- 若从 GitLab 下载固件得到约 17 KB 的 HTML,说明被重定向到登录页,需要重新下载正确的压缩包或改用镜像站。
- 新版
linux-firmware 不再单独提供 gc_11_0_3_toc.bin/ip_discovery.bin,警告可忽略;只需确认 gc_11_0_3_mes1、gc_11_0_3_mes_2、gc_11_0_3_rlc 等文件存在。旧版(例如 20240909)缺少这些关键文件时仍会导致初始化失败,应升级至 20251021 或更新版本。
附录:诊断命令合集
uname -r
lspci -nn | grep VGA
dmesg | grep -iE "amdgpu|firmware"
ls /dev/dri
vainfo --display drm --device /dev/dri/renderD128
journalctl -u mediasrv --no-pager -n 100