飞牛NAS使用DG1教程
by 皮蛋熊和众多热心的群友
零、注意
注意放在最前面:
飞牛商店DG1驱动不能用的,请直接安装本站提供的V2版本驱动!!!
一、简介
DG1
作为Intel
真正意义上独立核显,拥有令人艳羡的低功耗(待机3~5W
、编解码12W
),强悍的编解码能力,一度作为NAS佬心目中的神器。可直通崩主机、拉胯的驱动,曾让无数英雄折戟沉沙。皮蛋熊最开始于2023年11月
开始探索,好在众人拾材火焰高,在随后的一个多月的时间里,经过众多小伙伴的帮忙,我们成功探索到了DG1
的一些使用方案。
注意!!!总的来说DG1
折腾还是比较麻烦,思路上大家已经达成了共识,需要分为四步进行攻克:
- 点亮:正所谓万事开头难,点亮
DG1
正是最难的一步,DG1
对于主板的兼容性非常不好,虽然在4~9代IntelCPU上都有小伙伴成功使用,但并不意味着你的主板也可以,这需要你操作主板进入BIOS
中,并开启UEFI引导
、Above4G
、ResizebleBAR(开启后可锁UEFI)
选项,关闭PCIe ASPM
功能。【众多勇士分享案例 DG1折腾英雄榜】 - 直通:很多小伙伴底层是
PVE
系统,想要把DG1
直通给虚拟机中使用,往往会出现启动虚拟机的时候,宿主机死机。【皮蛋熊已攻克】 - Linux驱动:当一部分小伙伴翻山越岭走过了前两关,发现
DG1
的windows驱动体验还将就,但到了Linux
系统后,却发现这玩意驱动不好使,编解码不工作。【皮蛋熊提供了魔改版的驱动】 - 稳定性:偶尔会有一部分小伙伴到到达这一步的时候发现机器偶尔会出现莫名死机等情况,同时通过
dmesg
看到了很多的AER
报错,那基本上要使用DG1
只能换平台或者换主板。
恭喜你迈过了所有的关卡,DG1
那强大编解码性能、超低的功耗和极难折腾的路,必定让你印象深刻,也让你对玩机有了新的认识。
二、关联教程
如果你通篇看完后仍然在某一步卡着了,建议可以翻阅下下面这几个教程,找找有没有什么是没注意到的。
关联文字教程:
关联视频教程
- 全网首发!NAS独显转码新王晋级, Intel DG1驱动适配计划第一阶段完成!
- NAS独显转码新王晋级, Intel DG1驱动第二阶段,PVE内核+群晖SA6400驱动分享!
- 群晖喂屎,飞牛出世,DG1有新去处了?
三、通关之路
如果你成功通关,希望能留言本站、留言B站、进群告知等方式告知皮蛋熊你具体的硬件配置,皮蛋熊代广大的NAS玩家非常感谢你做出的贡献!!
开始之前,请先翻阅DG1折腾英雄榜,感谢众多勇士的尝试,如果你和他一个主板,那么大概率他的成功是可以被你复制的。
3.1 点亮
点亮是最难的一个环节,不是所有4~9
代intel
的主板都可以点亮,也有一部分AMD
主板可以成功按照下面的方法点亮。4~9
代的主板,有些主板带有下面点亮需要的选项的很多都可以成功,不带的也有魔改BIOS
开启的案例,需要找寻对应的魔改BIOS
,其中难度想必不会低,只有交给有动手能力手刷bios
的玩家探索。
注意:
- 版本:
DG1
分为80EU
和96EU
两个版本,对于编解码来说,两个版本差距小,多出的16EU
虽然可以让opencl
等跑的快点,但对于编解码来说意义并不大。但96EU
的兼容性最差,我i5-10400 + MSI B460M 迫击炮
无法点亮,换到i5-12400 + ASUS B660M
可以点亮,而80EU
的版本在两个平台都可点亮,群友尝试4~9代可以点亮的也均是80EU
版本。 - 兼容性:不同厂家的板子,布线不同,对于主板的兼容性也略有不同,比如
蓝戟半高DG1
就比华硕的全高被动散热版
兼容性差,更容易出现PCIe链路AER错误导致主机死机。
点亮这一步我们建议最好是在windows环境下尝试。
注意:不管你的机器是否带有核显,玩DG1最好是有一个亮机卡(独显),插入亮机卡进入BIOS中设置下面几个选项:开启UEFI引导
、Above4G
、ResizebleBAR(开启后可锁UEFI)
选项,关闭PCIe ASPM
功能。
注意1:不同主板的具体位置有所不同,建议仔细寻找,找不到可以进群问问看看有没有相同主板的群友。
注意2:有的主板在核显状态下设置了UEFI引导
后,再插上DG1
会出现从UEFI
跳回到Legacy
的情况。
3.1.1 UEFI引导
这里图上指向的是Legacy
,请选择下面的UEFI
选项
3.1.2 Above4G
3.1.3 ResizebleBAR
3.1.4 PCIe ASPM
这时候所有设置项全部设置完毕后,请关机,拔掉亮机卡,插入DG1
,测试是否可以正常点亮系统(有可能不会出现BIOS界面,这都没关系)。
3.2 PVE直通(如果是直接安装飞牛的可以忽略这一步)
PVE环境下DG1
直通不是很稳定,容易出现机器死机等情况,建议更换皮蛋熊定制的PVE
内核,皮蛋熊修改过两款内核,一个针对PVE7.4
,一个针对于PVE8.2
:
- PVE7.4:https://blog.kkk.rs/upload/5.15.131-pve-pdbear.tar.gz
- PVE8.2:https://blog.kkk.rs/upload/pve_8.2_kernel_6.8.4_dg1_dg2.zip
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.131
和6.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"
上面的选项解释如下:
intel_iommu=on
开启intel的iommu,这里如果是amd的处理需要修改为:amd_iommu=on
spectre_v2=off spectre_v1=off
两个CPU BUG的修补,是侧信道攻击,安全类BUG,但修复会导致CPU性能下降,这里我选择不修补,可根据自己情况进行选择。pcie_acs_override=downstream
IOMMU分组补丁,用于将设备分组分的更开一点,如果使用这段代码仍然无法分开iommu组,可以尝试使用这段:pcie_acs_override=downstream,multifunction
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英雄榜,更多的案例能为折腾的网友提供指引,感谢你为各位朋友做出的贡献。
- 先在
操作 → 服务
中打开ssh
。 ssh
连接后执⾏命令后查看dg1
的vendor-id
和device-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
- 输⼊
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
- 按
Esc
键退出编辑,输⼊:wq
,保存并退出。 - 解除ESXi可能使用DG1的情况,ssh下执行
esxcli system settings kernel set -s vga -v FALSE
。 - 重启
ESXi
后⽣效,所以需要重新引导,或者直接输⼊reboot
回⻋。 - 重启后在
管理→硬件→pci设备
中将这两个pci设备
设置为直通模式。 - 按需创建虚机,在创建界⾯将
显卡那个pci设备
添加进去,然后在点击虚拟机选项→ ⾼级→编辑配置→添加参数
添加pciPassthru.use64bitMMIO = "TRUE"
和pciPassthru.64bitMMIOSizeGB = 8
参数即可开机测试,至于还有一个参数hypervisor.cpuid.v0 = FALSE
是否添加,根据自己平台测试即可。
3.4 Linux驱动
20241031更新
已经上架飞牛商店,直接点击安装,重启即可使用,后续如有更新会直接提交到飞牛商店中。
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更新
祝各位小伙伴中秋快乐,花好月圆,日子甜甜。
第二版本更新:
上一个版本DG1
的opencl
映射有点问题,在映射杜比视界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更新
初版发布
简单流程:
- 先不带DG1安装系统
- 开启SSH,从用户侧确定SSH已经开启。
- 安装驱动
- 关机
- 带上DG1开机
- 正常使用
详细流程:
1. 先不带DG1安装系统
这里是PVE
做的演示,如果是实体机,建议这里先插上任意亮机卡。
2. 开启SSH
3. 安装驱动
sudo -i # 切换root权限
wget https://blog.kkk.rs/upload/intel-i915.deb # 下载驱动
dpkg -i intel-i915.deb # 安装驱动
4. 关机
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
这种
-
编辑文件
/etc/default/grub
,vim
还是nano
随意,在里面找到以下内容 在GRUB_CMDLINE_LINUX
中添加net.ifnames=0 biosdevname=0
,仅修改此部分,记得保存。 -
重建
grub
update-grub
- 修改
/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 安装驱动后无法解码
这个问题可能比较复杂,可以下面几个步骤排查:
- ssh登陆抓取如下信息:
sudo -i # 输入密码切换到root账户
dmesg | grep i915 # 看看是否有报错等输出
ls /dev/dri # 看看是否有 card0 renderD128 这种节点
lspci -vd 8086:4908 # 看看是否所有的BAR都分配了地址,如果有BAR没有分配到地址,请回bios中开启Above4G选项。
如果无法判断,可以截取信息发送到群中,请教群友看看是否正常(请先过滤下一些敏感信息)。
- 安装商店中的jellyfin套件尝试正常设置编解码,查看是否失败,如果失败了查看日志中最近一个
ffmpeg
相关的日志,查找错误原因。
4.3 飞牛可以解码,docker版本的jellyfin不可解码
排查这个问题需要分为两步:
- 确定显卡已经分配给容器了,创建容器的时候一定要映射显卡设备目录
/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 # 映射显卡
- 检查
jellyfin
设置是否正确
- 硬件加速选择
Intel QuickSync(QSV)
- 硬件编码选项中取消勾选
允许以AV1格式编码
,取消是因为DG1
只有AV1解码器,没有编码器。
五、致谢
NAS圈终于迎来了飞牛,飞牛为大家带来如此惊艳的产品,期待他们能给大家带来更好的体验,更好的产品,更好的服务。感谢一路支持皮蛋熊的小伙伴,这次非常感谢大熊猫贡贡
、卡布达
、刕圐圙
、长凤大侠
、jim大佬
、不浮不躁
、佳芯
、南唐乖乖的角瓜
小伙伴的大力支持。最后感谢朋友们关注,皮蛋熊的学习之路还很漫长,请期待下一段皮蛋熊的作品。
如果你想交流心得,欢迎来 新QQ群 或者 TG群 一起吹水~(老Q群因不明原因被封,所以只加Q群有概率迷路)
六、写在最后
非常感谢你能看到这里,皮蛋熊已经尽力把东西做的完善,如果你觉得皮蛋熊的努力值得肯定,皮蛋熊非常感谢你的支持。
如果皮蛋熊的努力解决了你的问题,不妨请皮蛋熊喝杯咖啡犒劳一下。
评论区