NAS系统折腾记 | 群晖DIY系统快速制作英特尔核显补丁支持硬解

2024年2月21日 3925点热度 4人点赞 112条评论
本文是《NAS系统折腾记》系列文章中的第11篇,共15篇

常见的群晖机器,例如 DS920+DS918+,系统内核一直是 4.4 的,而这个内核自带的核显驱动最高支持到 9 代,支持的CPU型号分别是J3455(DS918+)和J4155(DS920+)。而目前DIY搭建NAS系统有了更多的低功耗平台选择,如发布于2021年的Jasper Lake平台系列:N5095,N5105,N6005等。这些平台的集成显卡在群晖NAS的4.4内核里并不能缺省支持,因此也无法实现在Emby/Jellyfin/Plex等媒体服务器的硬解和其它的一些高级功能。本文介绍一种在使用DS920+和DS918+镜像的黑群晖系统上快速制作核显补丁支持硬解的方法。其它的配置本人未经测试,请谨慎。

下载和备份核显驱动module i915.ko

在群晖系统里,驱动程序模块ko一般在/usr/lib/modules目录下。将这个目录下的i915.ko文件(核显驱动模块)备份一下以防意外。

sudo cp /usr/lib/modules/i915.ko /usr/lib/modules/i915.ko.orig

启动DSM File Station,找一个目录,一会儿需要用这个目录转存i915.ko。我这里选择的是我用户主目录下的temp目录。选中这个目录,单击鼠标右键,选择“属性”。

在属性对话框中,记下位置文本框中显示的绝对路径。

返回到NAS的命令行,将i915.ko拷贝到上面的路径。

sudo cp /usr/lib/modules/i915.ko /volume2/homes/hyang/temp

这时候temp目录下就有i915.ko文件了。

鼠标右键单击下载,将i915.ko文件下载到本地。

下载SynologyVGPUTools

下载SynologyVGPUTools到本地。本工具exe文件大小为2.412KB,仅支持Windows操作系统。

SynologyVGPUTools工具包下载地址:

https://nas.yanghong.dev:8203/Synology/Tools/SynologyVGPUTools.zip

 

查询iGPU设备型号

通过浏览器访问英特尔的产品资料查询网站:https://ark.intel.com

在“Search Specification”输入框中输入NAS的CPU型号。我的NAS用的是N6005 CPU,输入N6005,点击放大镜查询。

在查询的结果页面,选择GPU Specification,记录下Device ID的内容。我的GPU Device ID是0x4E71。

制作核显补丁

选中SynologVGPUTools.exe文件,单击鼠标右键,选择“以管理员身份运行”。

这时候会弹出一个对话框选择核显驱动的ko文件。选中我们刚才从File Station下载到本机的i915.ko文件,点击“打开”。

输入刚才记录下的Device ID,我的Device ID是0x4E71,所以输入4E71,按回车。

再次输入Device ID以确保无误,然后回车。

这时候核显驱动的补丁就已经成功生成,放在C:盘的根目录下了。

回到DSM File Station,将C:盘根目录下的i915.ko文件上传回到temp目录下,选择“上传-覆盖”以覆盖掉原来的i915.ko。

启用核显补丁

然后把这个补丁的ko文件拷贝回/usr/lib/modules目录,以替换系统原有的的核显驱动,并重新启动NAS以启用补丁后的核显驱动。

sudo cp -f /volume2/homes/hyang/temp/i915.ko /usr/lib/modules
sudo chmod 644 /usr/lib/modules/i915.ko
sudo reboot

重启后验证核显驱动加载是否正常。在命令行输入如下命令:

sudo -i
ls /dev/dri
cat /sys/kernel/debug/dri/0/i915_frequency_info

如果能看到红框中的信息则恭喜你,核显驱动工作正常,可以去Emby/Jellyfin/Plex启用硬解了。本文以开源的Jellyfin为例,Emby和Plex应该跟Jellyfin类似。

Jellyfin docker启用硬解

首先,Jellyfin docker启动的时候需要把/dev/dri设备映射到docker里,DSM缺省的container manager是不支持这样的操作的。可以用portainer或者命令行创建docker container。这里以命令行为例。

sudo docker run -d \
–name jellyfin_i915
–volume /volume1/docker/jellyfin_i915/config:/config
–volume /volume1/video:/mnt/video
–device /dev/dri:/dev/dri
–publish 8096:8096
–publish 8920:8920
–env UID=0
–env GID=0
–env GIDLIST=0
jellyfin/jellyfin:latest

登录Jellyfin server的管理界面,选择播放->转码->硬件加速,选择“Video Acceleration API (VAAPI)”,在“启用硬件解码”下面,勾选上。

VA-API设备设置“/dev/dri/renderD128”(缺省应该设置好了),在“启用硬件解码”下面勾选所有适用的选项,并保存。

打开Jellyfin客户端(或者其它客户端播放软件),播放一个高清视频。我用ios infuse播放阿凡达水之道。

在群晖DSM的资源监控里看到,CPU占用非常低,仅为8%,说明硬解工作正常了。

Emby如果需要支持硬解的话,需要购买Emby Premiere会员。如果仅出于学习目的的话,可以参考我的另外一篇博文使用Emby server开心版:https://blog.yanghong.dev/nas-diy-emby-server/

感谢热爱钻研的本站网友 @laiba 分享了他在 Gemini Lake 平台 + 新版 Jellyfin 上解决硬解问题的过程,总结如下,希望能给碰到类似问题的同学带来一些思路。

1. 使用本文下载的工具查看自己的CPU型号,如果是Gemini Lake,则在BIOS里disable VT-d
2. 完成第一步以后,系统里就能看到 /dev/dri/renderD128 设备了,不需要其它的操作(如修改并替换i915.ko)
3. 关于Jellyfin如果不能硬解,则按照下述的步骤:
先找到jellyfin中的ffmpeg所在的位置,如果是安装的套件,一般是/volume1/@appstore/jellyfin/……
可以用find /volume1/@appstore/jellyfin/ | grep ffmpeg找到后 将ffmpeg改名为 ffmpeg-orig,然后将下面的内容贴到一个文件中,该文件中的换行符需要是 LF,不能是CRLF,文件命名为 ffmpeg,放到ffmpeg-orig同级目录下,
#Beginning of new ffmpeg file-------------------------------------------------------------------------
#!/bin/bash
paras="$(sed 's/rc_mode\ [CV]BR/rc_mode CQP/g' <<< $)"
MYDIR=$(realpath "$0"})
"$MYDIR/ffmpeg-orig" $paras
#End of new ffmpeg file---------------------------------------------------------------------------
设置权限为 755, 设置用户为 ffmpeg-orig相同的用户即可,
如果在docker中,替换方法类似,ffmpeg路径为/usr/lib/jellyfin-ffmpeg。
到这一步 Jellyfin 硬解支持的问题也应该ok了。

予人玫瑰,手有余香。如果您觉得本文对您有帮助,请点赞或打赏。

文章评论

  • eric

    看看i3-8100T能用不?

    2024年2月22日
    • hyang

      @eric i3-8100T是第8代的Coffee Lake的平台,搭载的是 Intel UHD Graphics 630 集成显卡。这款显卡应该在Linux kernel 4.x里就已经支持了。群晖的kernel已经是4.4版,按理应该缺省就可以支持了。不能用吗?

      2024年2月22日
    • warpool

      @eric I3-8100t还是不行啊

      2024年3月24日
    • 664566340

      @eric 试一试,我的NAS不能硬解

      2024年3月30日
  • lslsls

    感谢分享!!!

    2024年2月23日
  • lslsls

    请问为什么我替换过驱动后,还是检测没有目录呢?

    2024年2月23日
    • hyang

      @lslsls 你啥CPU?

      2024年2月23日
      • lslsls

        @hyang N5105,打上驱动后,用jellyfin还是不能硬解

        2024年2月23日
        • hyang

          @lslsls N5105跟我的N6005一样都是Jasper Lake,Intel UHD Graphics,按理说应该没问题呀。/dev/dri下面的设备文件出来没有?

          2024年2月23日
          • lslsls

            @hyang 出来了,就很无解

            2024年2月23日
        • hyang

          @lslsls /dev/dri出来了说明核显硬件和驱动都工作正常了,应该还是你jellyfin配置的问题。折腾一下配置,或者换一个版本试试看能不能解决。

          2024年2月23日
          • lslsls

            @hyang 目前查到的资料应该是我群晖系统的问题,7.0的系统,linux内核4.4,不支持11代处理器核显

            2024年2月23日
        • hyang

          @lslsls 你的N5105跟我用的N6005一样应该都是Jasper Lake架构,不属于第11代的Tiger Lake或者Elkhart Lake。我用的也是群晖4.4内核(4.4.302+ #69057 SMP Sat Sep 23 21:44:10 CST 2023 x86_64 GNU/Linux synology_apollolake_918+),DSM 7.2.1-69057 Update 1,跟你的也大差不差。继续折腾一下,应该有希望的 :cool:

          2024年2月23日
  • shbonny

    感谢分享

    2024年2月25日
  • root

    thanks

    2024年2月27日
  • tim

    感谢分享

    2024年3月4日
  • hero77572

    @tim 分享快乐 :cool:

    2024年3月5日
  • lhomme

    感谢分享

    2024年3月7日
    • hy

      @lhomme :cool:

      2024年3月7日
      • lhomme

        @hy 我的i3-4005U核显驱动不了,,,是CPU太低端吗

        2024年3月8日
        • hy

          @lhomme i3-4005U是13年出的第四代呀,确实有点老了,我没试过。。。
          按理说这个CPU,群晖自带的4.x的kernel已经支持了,不用这么折腾。就看看它能不能硬解了。我搜了一下,好像H.264,VC-1,MPEG-2是可以硬解的,但是H.265/HEVC,VP9啥的就不支持了。
          打个广告,升级呀 :cool:

          2024年3月8日
  • sxp1234567489

    试试

    2024年3月7日
  • 69829568

    看看行不行

    2024年3月8日
  • hetz

    感谢分享!

    2024年3月8日
  • max365

    感谢分享!

    2024年3月9日
  • luanma

    一起折腾~

    2024年3月12日
  • iris

    感谢分享!

    2024年3月13日
  • xddong

    xiexie dalao renxiang

    2024年3月13日
  • Yanji

    感谢楼主分享

    2024年3月14日
  • jordanyanwu

    6代小黑裙也能用吗

    2024年3月15日
    • hy

      @jordanyanwu 6代的核显,群晖4.x的内核应该就已经支持了吧。
      不过产品比较老了,我估计很多新的视频格式也没法支持硬解。

      2024年3月15日
  • Dongyun

    感谢分享

    2024年3月16日
  • araqicq3

    谢谢分享 i3 8100t试试

    2024年3月18日
  • paolu

    洪哥~我的群晖是 DS3615xs ,找不到类似驱动程序模块目录,能否给指导一下?
    CPU实际是I3-2100T,但被认成INTEL Core i3-4130

    2024年3月18日
    • hy

      @paolu 1. 驱动程序模块目录用ssh远程登录后在命令行里cd /usr/lib/modules,File Station里看不到的。你这样登录进去看不到吗?那你看到的目录结构是啥呢?
      2. CPU显示问题应该跟你用的引导程序有关。你用的哪个引导程序呢?看看有没有相应的cpuinfo patch

      2024年3月19日
      • paolu

        @hy 是用的ssh远程登录的,再modules 目录下面看到都是各种 ko

        2024年3月19日
        • hy

          @paolu 那就对了呀,把i915.ko文件备份一下,然后用新生成的文件替换掉。

          2024年3月19日
          • paolu

            @hy 各种ko,但是没有i915.ko

            2024年3月20日
        • hy

          @paolu 那估计是iGPU的kernel module没编进去?你用的哪个引导程序?

          2024年3月20日
  • a256

    thanks

    2024年3月19日
  • lanzijie

    thanks

    2024年3月19日
  • laiba

    看看ds923+知否也能用

    2024年3月19日
    • hy

      @laiba 能用的话,告知一下结果哈,我也想知道 :smile:

      2024年3月19日
      • laiba

        @hy 最后没选923+,还是选918+,因为923是针对amd cpu的
        现在硬件是 asrock 的 j5040-itx,没使用补丁的时候就能看到 render128,但是不好用,加了补丁,依然不行,看别的地方有说得在主板上关闭 vt-D vt-x,这个还没试

        2024年4月1日
        • laiba

          @laiba 刚试完,确认在bios中关闭 vt-d 之后 就好用了,各种 能看到 /dev/dri/内容但是 依然不能硬解的,估计都是这个问题,我也是无意间看到有人这么说的,经过博主分享的操作还不行的,可以试试!!!!!

          2024年4月1日
      • laiba

        @hy 刚试完,确认在bios中关闭 vt-d 之后 就好用了,各种 能看到 /dev/dri/内容但是 依然不能硬解的,估计都是这个问题,我也是无意间看到有人这么说的,经过博主分享的操作还不行的,可以试试!!!!!

        2024年4月1日
        • hy

          @laiba 赞👍
          能分享一下具体的过程吗?详细的步骤,截图啥的,我更新一下这篇文章,给你 credit :smile:
          可以的话我邮箱私信联系你,大家一起学习一起进步 :cool:

          2024年4月1日
          • laiba

            @hy 先查看自己的cpu是否是Gemini lake的,查询方法跟你帖子里查intel 的GPU一个界面,如果是的话,好些都有这个问题,在能看到/dev/dri/renderD128的情况下,再在bios种找到vt-d功能,disable掉就可以了,不需要其他操作,这个选项的位置一般在cpu设定里面,找不到慢慢找,现在的bios肯定有,除非是瘦客户机那种是够呛。我现在用的redpill的引导,装的dsm 7.2.1,里面本来是直接能看到/dev/dri/renderD128的,但是功能不好用,使用ffmpeg单独测试也发现确实不好用,包括群晖自己的videostation也不行。另外注意如果自己安装的支持vaapi的ffmpeg(包括docker版的)很可能带有 iHD_drv_video.so 这个driver,需要将其者改名字,否则默认会选择这个,但是这个驱动有问题用不了(如果你的默认就能用那就用着,因为这个驱动提供的功能比i965的多)。我基本就做了这些,现在videostation好用,单独的ffmpeg(到vaapi支持的)也好用,但是jellyfin新版 还不行,看着是jellyfin中封装的命令行好像不支持,这个看看能不能安装旧版解决吧

            2024年4月2日
          • laiba

            @hy 又一次测试,发现iHD 在关闭了vt-d之后竟然能用!!不用删除这个了。
            另外 docker版最新的jellyfin还是不能硬解,原因是 jellyfin在调用ffmpeg的时候使用了 -rc_mode CBR这个选项,而很多Gemini lake的硬解驱动并不支持这个,一般只支持 -rc_mode CQP, 由于这个参数是jellyfin自己加进去的,暂时没找到办法解决(也许可以使用旧版的?)。

            2024年4月2日
        • hy

          @laiba 感谢分享,我试图小结一下你解决问题的过程:
          1. 使用本文下载的工具查看自己的CPU型号
          2. 如果是Gemini Lake,则在BIOS里disable VT-d
          3. 不需要其它操作(不需要替换i915.ko?),系统就可以看到/dev/dri/renderD128?
          4. Jellyfin新版硬解可能工作不正常,原因是 jellyfin在调用ffmpeg的时候使用了 -rc_mode CBR这个选项,而很多Gemini lake的硬解驱动并不支持这个,一般只支持 -rc_mode CQP,建议换回旧版尝试
          因我这边没有该平台,没法尝试哈。

          2024年4月3日
          • laiba

            @hy 对的,如果是2那么3成立。另外我在da918+以及ds920+测试都是这个结果。原本这个是intel的问题,只需要在启动时加上i915.enable_guc=2,但是群晖这上面加了就会反复重启,不知是引导盘的问题还是群晖做了限制,所以始终也没有成功加载huc的firmware,所以就不能支持vbr和cbr了。

            2024年4月4日
          • laiba

            @hy 这个i915.enable_guc=2在ds918+ ds920+上无论如何加载不成功(手动rmmod -f i915然后再加载也试过,添加了 huc firmware的path也不行),重新编译i915.ko又太麻烦了,俺不做了。 emby 和video station 由于硬解时用的参数与 jellyfin不同,他俩都能正常运行,jellyfin运行不了,这个虽然是intel驱动的问题(包括群晖加载驱动也有问题),但是jellyfin的做法也有些不妥,提了issue,人家只是说这是intel的问题,然后就没有然后了。。。。。。不从用户角度考虑问题啊。。。折腾了将近1个星期,不想再折腾了。

            2024年4月5日
          • laiba

            @hy 给jellyfin加个中间层让jellyfin也能跑起来。
            先找到jellyfin中的ffmpeg所在的位置,如果是安装的套件,一般是/volume1/@appstore/jellyfin/......
            可以用find /volume1/@appstore/jellyfin/ | grep ffmpeg找到后 将ffmpeg改名为 ffmpeg-orig,然后将下面的内容贴到一个文件中,该文件中的换行符需要是 LF,不能是CRLF,文件命名为 ffmpeg,放到ffmpeg-orig同级目录下,
            #!/bin/bash
            paras="$(sed 's/rc_mode\ *[CV]BR/rc_mode CQP/g' <<< $*)"
            MYDIR=$(realpath "$0"})
            "$MYDIR/ffmpeg-orig" $paras

            设置权限为 755, 设置用户为 ffmpeg-orig相同的用户即可,
            如果在docker中,替换方法类似,ffmpeg路径为/usr/lib/jellyfin-ffmpeg。
            我这边已经验证ok

            2024年4月7日
        • hy

          @laiba 有钻研精神,赞👍

          2024年4月7日
          • laiba

            @hy 好听的是 钻研精神,不好听的其实是 强迫症,每次都知道浪费时间,后面都会觉得不值,但是每次继续干......

            2024年4月8日
  • lalal

    ls /dev/dri
    cat /sys/kernel/debug/dri/0/i915_frequency_info
    这个两个都没问题,还是硬解不了,不知道哪里出问题。有大佬帮忙解决一下吗?

    2024年3月20日
  • vip0469

    看看ds923+知否也能用

    2024年3月20日
  • sjysh

    看看N5095可以开启吗?

    2024年3月21日
    • sjysh

      @sjysh 替换了文件,群晖启动不起来了。是7.1的版本。这如何处理,楼主。

      2024年3月21日
      • hy

        @sjysh 具体是挂在哪里了呢?引导程序起不来,还是进不了DSM?

        2024年3月21日
    • hy

      @sjysh N5095应该说是没问题的,跟我用的N6005都是同一代的架构,iGPU也都是Intel UHD Graphics,区别在于iGPU主频和EU数目不一样。

      2024年3月21日
  • haha_6677

    感谢分享👍

    2024年3月22日
  • baolintx

    感谢分享

    2024年3月22日
  • whtyh

    好的,谢谢

    2024年3月22日
  • czy

    xuexi

    2024年3月23日
  • zxlei

    感谢分享

    2024年3月24日
  • 737893124

    感谢分享

    2024年3月24日
  • tiger0012

    感谢分享, 就是不知道N100+PVE 硬件直通能用不?

    2024年3月24日
    • hy

      @tiger0012 值得一试。反正有虚拟机,挂了也不怕 :lol:

      2024年3月24日
  • qq10857049

    我看看怎么替换

    2024年3月26日
  • bigxxxl

    n5105等了好久,试试看

    2024年3月27日
  • lianxx

    111

    2024年3月28日
  • lzjtdx

    试一试,我的NAS不能硬解

    2024年3月28日
  • ninglala

    感谢分享

    2024年3月29日
  • jhonyi

    66666666666666666

    2024年3月31日
  • zcyfic

    谢谢分享!

    2024年4月2日
  • yelufei

    感谢分享

    2024年4月2日
  • xymyx66

    感谢博主,我试试

    2024年4月4日
  • aliya

    学习一下 试一试。

    2024年4月5日
  • aliya

    没有找到J3455的设备号。然后在windows这个程序中输入你的设备号软件也报错。

    2024年4月5日
  • a964051807

    多谢多谢

    2024年4月6日
  • three

    thanks

    2024年4月6日
  • hesc618

    学习

    2024年4月6日
  • fanxizhou

    学习

    2024年4月9日
  • jaydogg

    学习一下,一直困扰我

    2024年4月9日
  • knowusf

    你好,我按照步骤打了补丁,cpu是i5 7600t,始终无法显示 /de/dri下的内容,我直接用ls /dev/查看文件,甚至都没有/dri/这个文件夹,为此我更换了三个引导(918 ,sa6400),出现的情况均一样,始终没有显示核显文件。真的有点崩溃,如果有好的办法,请告诉我。

    2024年5月18日
    • hy

      @knowusf 本文的折腾方法主要是针对第9代以后的CPU,群晖官方的kernel还不支持的。7600t是第七代,按理说Linux kernel里应该已经支持它的iGPU了。

      2024年5月18日
  • Chopin in November

    请问DS923是不是不持支硬解

    2024年7月29日
    • hy

      @Chopin in November 这个驱动是英特尔集成显卡的,DS923是AMD CPU

      2024年8月8日
  • Chopin in November

    我按照此方法尝试重启后,失联状态有办法吗

    2024年7月31日
  • kdskds

    . 使用本文下载的工具查看自己的CPU型号,如果是Gemini Lake,则在BIOS里disable VT-d
    2. 完成第一步以后,系统里就能看到 /dev/dri/renderD128 设备了,不需要其它的操作(如修改并替换i915.ko)
    3. 关于Jellyfin如果不能硬解,则按照下述的步骤:
    先找到jellyfin中的ffmpeg所在的位置,如果是安装的套件,一般是/volume1/@appstore/jellyfin/……
    可以用find /volume1/@appstore/jellyfin/ | grep ffmpeg找到后 将ffmpeg改名为 ffmpeg-orig,然后将下面的内容贴到一个文件中,该文件中的换行符需要是 LF,不能是CRLF,文件命名为 ffmpeg,放到ffmpeg-orig同级目录下,
    #Beginning of new ffmpeg file-------------------------------------------------------------------------
    #!/bin/bash
    paras="$(sed 's/rc_mode\ [CV]BR/rc_mode CQP/g' <<< $)"
    MYDIR=$(realpath "$0"})
    "$MYDIR/ffmpeg-orig" $paras
    #End of new ffmpeg file---------------------------------------------------------------------------
    设置权限为 755, 设置用户为 ffmpeg-orig相同的用户即可,
    如果在docker中,替换方法类似,ffmpeg路径为/usr/lib/jellyfin-ffmpeg。
    到这一步 Jellyfin 硬解支持的问题也应该ok了

    这要怎么操作?能详细点吗?小白看不懂

    2024年8月8日
    • hy

      @kdskds 这部分内容是热心的网友 @laiba 提供的,我也没有Gemini Lake的硬件所以没办法再写详细如提供截屏啥的。
      你问问他看看。

      2024年8月8日
  • 您需要 登录 之后才可以评论