Skip to the content.

使用内核 xe 驱动使 Intel DG1 可以在 Jellyfin 下解码

背景

Linux 内核在 6.8 版本引入了 xe 内核模块(参考),来支持 Intel 较新的显卡,DG1 也包括在内。而在 2024 年 10 月 26 日,Jellyfin 官方更新到 10.10 版本,正式支持内核 xe 驱动。所以目前使用内核版本大于等于 6.8 的 Linux 发行版(例如 Arch LinuxUbuntu)可以直接使用 DG1 在 Jellyfin 下转码,而不需要像之前一样安装 backport i915 的内核和修改驱动(参见:Ubuntu 22.04 下修改驱动使 Intel DG1 可以在 Jellyfin 下解码)。本文以 Ubuntu Server 22.04 LTS 为例,介绍如何安装 6.8 内核并开启 Jellyfin 硬件转码。

安装 6.8 内核

如果 Ubuntu 在安装时选择的是 HWE 内核,那么有可能通过 apt 更新就可以安装 6.8 内核。首先命令行执行 uname -r 查看内核版本号,如果返回结果类似 6.8.0-47-generic,证明已经安装 6.8 内核了,可以跳过这一步。如果返回版本不是,请按照下述步骤安装 6.8 内核。

最快捷的办法就是安装 Ubuntu 的 HWE 内核:

sudo apt update # 更新仓库
sudo apt install --install-recommends linux-generic-hwe-22.04

安装完成后重启,重启后命令行执行 uname -r,如果显示 6.8 版本说明安装成功。

添加内核启动项,使用 xe 内核驱动

因为目前 xe 内核模块还在实验阶段,Linux 内核默认不会加载,需要添加内核启动项。首先使用 lspci -nn 查看 DG1 的 PCI ID,这里以华硕圣旗全高 80EU 版本为例,返回值如下:

01:00.0 VGA compatible controller [0300]: Intel Corporation DG1 [Iris Xe Graphics] [8086:4908] (rev 01)

这里 [8086:4908] 前四位是制造商 ID,后四位就是我们需要的 PCI ID。然后修改 /etc/default/grub,找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,在已有参数后面添加 i915.force_probe=!4908 xe.force_probe=4908,记得新增参数要与原有参数以空格隔开。如果之前内核添加过其他 i915 相关参数(比如 i915.enable_guc=3),请删除,因为不会再使用 i915 内核模块驱动 DG1。

修改完成后保存,执行 sudo update-grub 更新 GRUB 启动文件,然后重启。重启完成后执行 sudo lspci -v 查看 DG1 对应信息:

01:00.0 VGA compatible controller: Intel Corporation DG1 [Iris Xe Graphics] (rev 01) (prog-if 00 [VGA controller])
        Subsystem: ASUSTeK Computer Inc. DG1 [Iris Xe Graphics]
        Physical Slot: 0
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at 80000000 (64-bit, non-prefetchable) [size=16M]
        Memory at 7000000000 (64-bit, prefetchable) [size=4G]
        Expansion ROM at <ignored> [disabled]
        Capabilities: [40] Vendor Specific Information: Len=0c <?>
        Capabilities: [70] Express Endpoint, MSI 00
        Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable+ 64bit+
        Capabilities: [d0] Power Management version 3
        Capabilities: [100] Latency Tolerance Reporting
        Kernel driver in use: xe
        Kernel modules: i915, xe

如果出现 Kernel driver in use: xe 说明内核已经在使用 xe 内核模块驱动 DG1。驱动完成后就可以使用 Jellyfin 调用 DG1 硬件解码了。

结语

使用最新 Jellyfin 10.10,内核版本 6.8.0-47-generic 测试解码能力,与皮蛋熊大佬的测试(数据)对比,可以看出基本区别不大,说明成功解码了。

文件 格式 帧率 帧率(by 皮蛋熊)
Taylor Swift 4K H264 310 290
三星HDR 4K HEVC 315 293
蔡依林 8K HEVC 138 134
地球上 8K HEVC 122 122
Meridian 8K AV1 93 93