侧边栏壁纸
博主头像
蔚然小站博主等级

未来会有的,不要辜负了梦想

  • 累计撰写 39 篇文章
  • 累计创建 15 个标签
  • 累计收到 51 条评论

目 录CONTENT

文章目录
nas

飞牛NAS使用DG1教程

皮蛋熊
2024-09-02 / 11 评论 / 31 点赞 / 8016 阅读 / 17317 字
温馨提示:
本文最后更新于 2024-11-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

飞牛NAS使用DG1教程

by 皮蛋熊和众多热心的群友

零、注意

注意放在最前面:

飞牛商店DG1驱动不能用的,请直接安装本站提供的V2版本驱动!!!

一、简介

DG1作为Intel真正意义上独立核显,拥有令人艳羡的低功耗(待机3~5W、编解码12W),强悍的编解码能力,一度作为NAS佬心目中的神器。可直通崩主机、拉胯的驱动,曾让无数英雄折戟沉沙。皮蛋熊最开始于2023年11月开始探索,好在众人拾材火焰高,在随后的一个多月的时间里,经过众多小伙伴的帮忙,我们成功探索到了DG1的一些使用方案。

注意!!!总的来说DG1折腾还是比较麻烦,思路上大家已经达成了共识,需要分为四步进行攻克:

  1. 点亮:正所谓万事开头难,点亮DG1正是最难的一步,DG1对于主板的兼容性非常不好,虽然在4~9代IntelCPU上都有小伙伴成功使用,但并不意味着你的主板也可以,这需要你操作主板进入BIOS中,并开启UEFI引导Above4GResizebleBAR(开启后可锁UEFI)选项,关闭PCIe ASPM功能。【众多勇士分享案例 DG1折腾英雄榜
  2. 直通:很多小伙伴底层是PVE系统,想要把DG1直通给虚拟机中使用,往往会出现启动虚拟机的时候,宿主机死机。【皮蛋熊已攻克】
  3. Linux驱动:当一部分小伙伴翻山越岭走过了前两关,发现DG1的windows驱动体验还将就,但到了Linux系统后,却发现这玩意驱动不好使,编解码不工作。【皮蛋熊提供了魔改版的驱动】
  4. 稳定性:偶尔会有一部分小伙伴到到达这一步的时候发现机器偶尔会出现莫名死机等情况,同时通过dmesg看到了很多的AER报错,那基本上要使用DG1只能换平台或者换主板。

恭喜你迈过了所有的关卡,DG1那强大编解码性能、超低的功耗和极难折腾的路,必定让你印象深刻,也让你对玩机有了新的认识。

二、关联教程

如果你通篇看完后仍然在某一步卡着了,建议可以翻阅下下面这几个教程,找找有没有什么是没注意到的。

关联文字教程

  1. PVE直通DG1/DG2并使用SA6400驱动DG1/DG2教程
  2. 编解码能力记录
  3. 什么?DG1和1135G7竟有如此关系?
  4. DG1 ESXi直通尝试
  5. DG1折腾英雄榜

关联视频教程

  1. 全网首发!NAS独显转码新王晋级, Intel DG1驱动适配计划第一阶段完成!
  2. NAS独显转码新王晋级, Intel DG1驱动第二阶段,PVE内核+群晖SA6400驱动分享!
  3. 群晖喂屎,飞牛出世,DG1有新去处了?

三、通关之路

如果你成功通关,希望能留言本站、留言B站、进群告知等方式告知皮蛋熊你具体的硬件配置,皮蛋熊代广大的NAS玩家非常感谢你做出的贡献!!

开始之前,请先翻阅DG1折腾英雄榜,感谢众多勇士的尝试,如果你和他一个主板,那么大概率他的成功是可以被你复制的。

3.1 点亮

点亮是最难的一个环节,不是所有4~9intel的主板都可以点亮,也有一部分AMD主板可以成功按照下面的方法点亮。4~9代的主板,有些主板带有下面点亮需要的选项的很多都可以成功,不带的也有魔改BIOS开启的案例,需要找寻对应的魔改BIOS,其中难度想必不会低,只有交给有动手能力手刷bios的玩家探索。

注意

  1. 版本DG1分为80EU96EU两个版本,对于编解码来说,两个版本差距小,多出的16EU虽然可以让opencl等跑的快点,但对于编解码来说意义并不大。但96EU的兼容性最差,我i5-10400 + MSI B460M 迫击炮无法点亮,换到i5-12400 + ASUS B660M可以点亮,而80EU的版本在两个平台都可点亮,群友尝试4~9代可以点亮的也均是80EU版本。
  2. 兼容性:不同厂家的板子,布线不同,对于主板的兼容性也略有不同,比如蓝戟半高DG1就比华硕的全高被动散热版兼容性差,更容易出现PCIe链路AER错误导致主机死机。

点亮这一步我们建议最好是在windows环境下尝试。

注意:不管你的机器是否带有核显,玩DG1最好是有一个亮机卡(独显),插入亮机卡进入BIOS中设置下面几个选项:开启UEFI引导Above4GResizebleBAR(开启后可锁UEFI)选项,关闭PCIe ASPM功能。

注意1:不同主板的具体位置有所不同,建议仔细寻找,找不到可以进群问问看看有没有相同主板的群友。

注意2:有的主板在核显状态下设置了UEFI引导后,再插上DG1会出现从UEFI跳回到Legacy的情况。

3.1.1 UEFI引导

这里图上指向的是Legacy,请选择下面的UEFI选项 UEFI

3.1.2 Above4G

UEFI

3.1.3 ResizebleBAR

UEFI

3.1.4 PCIe ASPM

UEFI

这时候所有设置项全部设置完毕后,请关机,拔掉亮机卡,插入DG1,测试是否可以正常点亮系统(有可能不会出现BIOS界面,这都没关系)。

3.2 PVE直通(如果是直接安装飞牛的可以忽略这一步)

PVE环境下DG1直通不是很稳定,容易出现机器死机等情况,建议更换皮蛋熊定制的PVE内核,皮蛋熊修改过两款内核,一个针对PVE7.4,一个针对于PVE8.2

3.2.1 安装指定内核

其中第一个就是更换为皮蛋熊修改过的内核,为了防止之前系统或存在同样的内核,所以先将其卸载:

dpkg --purge linux-tools-5.15 linux-tools-5.15-dbgsym pve-headers-5.15.131-1-pve pve-kernel-5.15.131-1-pve

卸载后我们进行安装,请注意,皮蛋熊这里提供了5.15.1316.8.4两个内核,请根据实际使用情况替换掉这里的内核地址,这里皮蛋熊使用的目录是/root/kernel

# 准备内核
mkdir /root/kernel
cd /root/kernel
curl https://blog.kkk.rs/upload/5.15.131-pve-pdbear.tar.gz -o 5.15.131-pdbear.tar.gz

# 解压内核,如果是6.8.4请使用 unzip命令解压
tar -xf 5.15.131-pdbear.tar.gz

# 安装内核
cd ./5.15.131-pve
dpkg -i *.deb

# 固定启动内核版本
root@pve:~# pve-efiboot-tool kernel list
Manually selected kernels:
None.

Automatically selected kernels:
5.15.102-1-pve
5.15.131-1-pve

# 这里 5.15.131-1-pve 内核是皮蛋熊修改过的
# 这里固定内核内核为 5.15.131-1-pve
pve-efiboot-tool kernel pin 5.15.131-1-pve

# 更新下引导和ramfs
update-initramfs -u -k all
update-grub
reboot

内核安装完毕后,重启检查是否内核启动完成:

root@pve:~# uname -a
Linux pve 5.15.131-1-pve #1 SMP PVE 5.15.131-2 (2023-11-14T11:32Z) x86_64 GNU/Linux

可以看到上面内核已经修改成功了,接下来我们将修改内核参数。

3.2.2 修改内核参数

下面开始修改内核参数:

# vim /etc/default/grub
# 修改 GRUB_CMDLINE_LINUX_DEFAULT

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on spectre_v2=off spectre_v1=off pcie_acs_override=downstream pcie_aspm=off"

上面的选项解释如下:

  1. intel_iommu=on 开启intel的iommu,这里如果是amd的处理需要修改为:amd_iommu=on
  2. spectre_v2=off spectre_v1=off两个CPU BUG的修补,是侧信道攻击,安全类BUG,但修复会导致CPU性能下降,这里我选择不修补,可根据自己情况进行选择。
  3. pcie_acs_override=downstream IOMMU分组补丁,用于将设备分组分的更开一点,如果使用这段代码仍然无法分开iommu组,可以尝试使用这段:pcie_acs_override=downstream,multifunction
  4. pcie_aspm=off 关闭PCIe硬件链路节能机制,DG1的PCIe IP不太兼容这个,建议关闭,关闭后可以运行的更为稳定。

上面选项修改完毕后,使用update-grub更新引导,并重新启动PVE系统;

重新启动后将下面脚本保存为iommu.sh,给与可执行权限chmod +x iommu.sh,并执行,即可查看iommu分组:

#!/bin/bash
for g in `find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V`; do \
    echo "IOMMU Group ${g##*/}:"; \
        for d in $g/devices/*; do \
        echo -e "\t$(lspci -nns ${d##*/})"; \
        done; \
done;

这里我的查看结果是:

root@pve:~# ./iommu.sh
.......
IOMMU Group 17:
        05:00.0 VGA compatible controller [0300]: Intel Corporation DG1 [Iris Xe Graphics] [8086:4908] (rev 01)
IOMMU Group 18:
        06:00.0 Audio device [0403]: Intel Corporation Device [8086:490d]
IOMMU Group 19:
        07:00.0 Memory controller [0580]: Intel Corporation Device [8086:490e]
.......

可以发现iommu分组都划分的很开,我们需要的DG1被单独划分到17组里面。

3.3 ESXi直通(如果是直接安装飞牛的可以忽略这一步)

ESXi直通,不一定可行,如果下面方法无法奏效,请直接放弃该主板平台使用ESXi直通DG1转而使用PVE

该办法来自群友Q号(571086844)和网友sleep,感谢大佬提供的宝贵办法。

该办法可让DG1在某些平台上正常实现直通,在某些平台上不行,如果你尝试过后正常的话,还请加群私聊群主告知具体平台,该信息将同步到DG1英雄榜,更多的案例能为折腾的网友提供指引,感谢你为各位朋友做出的贡献。

  1. 先在 操作 → 服务中打开ssh
  2. ssh连接后执⾏命令后查看dg1vendor-iddevice-id
lspci -v
0000:12:00.0 Display controller VGA compatible controller: Intel
Class 0300: 8086:4908
0000:13:00.0 Multimedia controller Audio device: Intel Corporati
Class 0403: 8086:490d
  1. 输⼊ vi /etc/vmware/passthru.map ,按i进⼊编辑模式,在⽂档末尾加⼊上⾯的两⾏内 容,注意格式为:vendor-id device-id resetMethod fptShareable供应商ID 设备ID 重置⽅法 共享选项将其中的供应商ID、设备ID改成你⾃⼰的。
# intel dg1
8086 4908 d3d0 false
8086 490d d3d0 false
  1. Esc键退出编辑,输⼊:wq,保存并退出。
  2. 解除ESXi可能使用DG1的情况,ssh下执行esxcli system settings kernel set -s vga -v FALSE
  3. 重启ESXi后⽣效,所以需要重新引导,或者直接输⼊reboot回⻋。
  4. 重启后在管理→硬件→pci设备中将这两个pci设备设置为直通模式。
  5. 按需创建虚机,在创建界⾯将显卡那个pci设备添加进去,然后在点击虚拟机选项→ ⾼级→编辑配置→添加参数 添加pciPassthru.use64bitMMIO = "TRUE"pciPassthru.64bitMMIOSizeGB = 8参数即可开机测试,至于还有一个参数hypervisor.cpuid.v0 = FALSE是否添加,根据自己平台测试即可。 dg1_esxi.png

3.4 Linux驱动

20241031更新

已经上架飞牛商店,直接点击安装,重启即可使用,后续如有更新会直接提交到飞牛商店中。 fn_dg1_1 fn_dg1_2

20241013更新

第三版本更新

正常情况下,系统里面只能有一套intel gpu的驱动,启用了一个就无法启用另外一个,但dg1只能使用OOT驱动,但OOT驱动又不支持UHD630这种能力还行的老设备。那有没有办法两者兼得?在一个系统中同时支持DG1和其他的Intel核显

答案是:皮蛋熊给你做出来了,这就是第三版,原理就是魔改OOT驱动,使其可以和内核自带的i915驱动同时工作,UHD630就使用内核自带的驱动,DG1就使用皮蛋熊提供的驱动,两者共存,互不影响。

教程如下:

sudo -i # 输入密码
# 安装驱动
dpkg -r intel-i915 # 如果此前没有安装,这里会说找不到,这没有关系
wget https://blog.kkk.rs/upload/intel-i915-v3.deb
dpkg -i intel-i915-v3.deb
# 安装固件
wget https://blog.kkk.rs/upload/i915-firmware.zip
unzip -d /lib/firmware/i915 i915-firmware.zip
reboot

注意:目前该驱动除了DG1以外还开启了一些其他显卡的probe,如果你发现有共存问题,退回到上一个版本并告知我,我会继续深入研究。

20240917更新

祝各位小伙伴中秋快乐,花好月圆,日子甜甜。

第二版本更新

上一个版本DG1opencl映射有点问题,在映射杜比视界Dolby vision的时候,会导致DG1 hang,之前的补救版本在大部分情况可以恢复,但仍极大的影响了体验,这里皮蛋熊更新了第二版尝试处理了这个问题,安装/更新方法如下:

sudo -i # 输入密码
dpkg -r intel-i915 # 如果此前没有安装,这里会说找不到,这没有关系
wget https://blog.kkk.rs/upload/intel-i915-v2.deb
dpkg -i --force-all intel-i915-v2.deb
reboot

20240907更新

初版发布

简单流程

  1. 先不带DG1安装系统
  2. 开启SSH,从用户侧确定SSH已经开启。
  3. 安装驱动
  4. 关机
  5. 带上DG1开机
  6. 正常使用

详细流程:

1. 先不带DG1安装系统

这里是PVE做的演示,如果是实体机,建议这里先插上任意亮机卡。 1不带系统安装

2. 开启SSH

2开启ssh1 2开启ssh2

3. 安装驱动

sudo -i  # 切换root权限
wget https://blog.kkk.rs/upload/intel-i915.deb # 下载驱动
dpkg -i intel-i915.deb # 安装驱动

3安装驱动

4. 关机

4关机

5. 带上DG1开机

5带着DG1开机

6. 正常使用

正常使用

3.5 稳定性

能到这一步,说明前面的坑已经趟过了,如果你在使用中发现了比较异常的行为,比如莫名其妙死机了?

再次开机后,请打开飞牛的SSH,使用mobaxterm这款SSH软件连接飞牛。

输入下面命令检测PCIe是否有AER错误爆出或者i915驱动是否工作正常:

sudo -i  # 输入密码
dmesg | grep i915  # 这里看看有没有啥i915驱动报错
dmesg -w # 输入这个命令后,去转码几个视频,看看是否有AER报错

如果i915有相应的报错,请直接进群联系我,我可以帮忙看看是不是驱动哪里不太完善。如果是AER报错,请考虑更换平台,目前没有更好的办法。

四、常见问题

后续有人报问题,会更新到这一栏

4.1 网口变动

DG1带有一大堆pcie设备,插入和不插入会导致新版PVE的网口名称发生变化,比如从enp5s0变为enp9s0等。

按照下面教程修改后,网口固定为ethX,不会再因为插拔DG1导致网口名称变动进而无法进入PVE了。

这里引用恩山大佬 lovecrayfish的教程

原本Linux系统默认网卡名是ethX,后来改成了eno、enp、ens这种开头的了 我个人感觉是不如ethX那种看的顺眼,你要是也觉得别扭,可以改回默认的ethX这种

  1. 编辑文件/etc/default/grubvim还是nano随意,在里面找到以下内容 在GRUB_CMDLINE_LINUX中添加net.ifnames=0 biosdevname=0,仅修改此部分,记得保存。

  2. 重建grub

update-grub
  1. 修改/etc/network/interfaces 将其中的enp1s0...等等也修改成ethX 修改以后,应该是这个样子:
auto lo
iface lo inet loopback

iface eth0 inet manual

iface eth1 inet manual

iface eth2 inet manual

iface eth3 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.31.100/24
        gateway 192.168.31.1
        bridge-ports eth0
        bridge-stp off
        bridge-fd 0


auto vmbr1
iface vmbr1 inet manual
        bridge-ports eth1
        bridge-stp off
        bridge-fd 0


auto vmbr2
iface vmbr1 inet manual
        bridge-ports eth2
        bridge-stp off
        bridge-fd 0


auto vmbr3
iface vmbr1 inet manual
        bridge-ports eth3
        bridge-stp off
        bridge-fd 0

注意上图的中ethX部分,原本应该是enp1s0、enp2s0...等等 改成对应的eth1、eth2...就行了,其它勿动,勿动,勿动!!! 保存退出,然后重启PVE

4.2 安装驱动后无法解码

这个问题可能比较复杂,可以下面几个步骤排查:

  1. ssh登陆抓取如下信息:
sudo -i  # 输入密码切换到root账户
dmesg | grep i915 # 看看是否有报错等输出
ls /dev/dri # 看看是否有 card0 renderD128 这种节点
lspci -vd 8086:4908 # 看看是否所有的BAR都分配了地址,如果有BAR没有分配到地址,请回bios中开启Above4G选项。

如果无法判断,可以截取信息发送到群中,请教群友看看是否正常(请先过滤下一些敏感信息)。

  1. 安装商店中的jellyfin套件尝试正常设置编解码,查看是否失败,如果失败了查看日志中最近一个ffmpeg相关的日志,查找错误原因。

4.3 飞牛可以解码,docker版本的jellyfin不可解码

排查这个问题需要分为两步:

  1. 确定显卡已经分配给容器了,创建容器的时候一定要映射显卡设备目录/dev/dri或者给与privilege权限,如下面docker-compose.yml文件中。
services:
  jellyfin:
    image: nyanmisaka/jellyfin:latest
    container_name: jellyfin
#    network_mode: host # 设置与宿主机同一网络(若要使用DLNA请取消注释,并注释ports)
    restart: always # 在Dockers服务重启时,自动重启该容器
#    extra_hosts: #自定义hosts (请自行查找对应的IP,更改后请取消注释)
#      - "api.themoviedb.org:IP"
    environment:
      - UID=1000 # 设置权限
      - GID=1000 # 设置权限
      - GIDLIST=100 # 设置权限
    volumes:
      - /home/jet/docker/jellyfin/config:/config  # 映射配置目录
      - /mnt:/mnt:shared # 映射媒体库目录
    ports:
      - 8094:8096 # 映射HTTTP端口
    devices:
      - /dev/dri:/dev/dri # 映射显卡
  1. 检查jellyfin设置是否正确
  • 硬件加速选择Intel QuickSync(QSV)
  • 硬件编码选项中取消勾选允许以AV1格式编码,取消是因为DG1只有AV1解码器,没有编码器。

五、致谢

NAS圈终于迎来了飞牛,飞牛为大家带来如此惊艳的产品,期待他们能给大家带来更好的体验,更好的产品,更好的服务。感谢一路支持皮蛋熊的小伙伴,这次非常感谢大熊猫贡贡卡布达刕圐圙长凤大侠jim大佬不浮不躁佳芯南唐乖乖的角瓜小伙伴的大力支持。最后感谢朋友们关注,皮蛋熊的学习之路还很漫长,请期待下一段皮蛋熊的作品。

如果你想交流心得,欢迎来 新QQ群 或者 TG群 一起吹水~(老Q群因不明原因被封,所以只加Q群有概率迷路)

六、写在最后

非常感谢你能看到这里,皮蛋熊已经尽力把东西做的完善,如果你觉得皮蛋熊的努力值得肯定,皮蛋熊非常感谢你的支持。


如果皮蛋熊的努力解决了你的问题,不妨请皮蛋熊喝杯咖啡犒劳一下。

wechat-caffe.png

31
nas
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区