数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 709|回复: 12

PVE直通拆iommu分组编译内核

[复制链接]
发表于 2025-5-20 10:13:00 | 显示全部楼层 |阅读模式
近期捡漏了一块华擎的J3455ITX,机器支持硬件直通,但是硬件直通的时候发现一直通pcie网卡机器就会失联,经过多方了解PCIE分组都是同一个分组,一直通网卡就将所有网卡都直通过去造成失联,要解决这个问题最好是编译内核


以下是编译的操作方法
目前PVE最新的版本是8.4.1,内核是6.8,编译内核最新的版本是6.14
# 准备工作:一台debian12或者pve8.4.1的系统机器# 创建pve用户并创建pve-kernel文件夹并添加权限useradd pve -d /home/pve/pve-kernelchown -R pve /home/pve/pve-kernel# 下载源码, 记得挂梯子git clone --recursive https://git.proxmox.com/git/pve-kernel.git# 修改补丁vim /home/pve/pve-kernel/patches/kernel//0004-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch## 搜索pci_is_pcie找到+                pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))并删除, 由于删除了一行, 你需要加多一行, 另外注意括号## 原代码,第二行删除,第三行添加+        if (!pci_is_pcie(dev) ||+                pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))+                        return -ENOTTY;
## 修改后,注意行数是三行带+号+       if (!pci_is_pcie(dev))+               return -ENOTTY;+# 更新软件包列表并安装编译工具(本次编译工具以及依赖包都是在debian12或者pve8.4系统下运行,)apt updateapt-get install -y wgetwget http://download.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpgchmod +r /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpgecho "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" >>/etc/apt/sources.listapt-get updateapt-get install -y git nano screen patch fakeroot build-essential devscripts libncurses5 libncurses5-dev libssl-dev bc flex bison libelf-dev libaudit-dev libgtk2.0-dev libperl-dev asciidoc xmlto gnupg gnupg2 rsync lintian debhelper libdw-dev libnuma-dev libslang2-dev sphinx-common asciidoc-base automake cpio dh-python file gcc kmod libiberty-dev libtool python3-minimal sed tar zlib1g-dev liblz4-tool idn zstd libpve-common-perl systemtap-sdt-dev libcap-dev libzstd-dev libbabeltrace-dev libunwind-dev python3-dev binutils-dev libtraceevent-dev dwarves python3-setuptools libpfm4-dev openjdk-17-jdk gawk# 编译前确认好存储空间是否足够df -h# 准备工作完成就对源码进行编译su - pve -c "make -C /home/pve/pve-kernel"# 编译完成创建文件夹并将编译好的deb文件复制到指定路径存放mkdir /home/pve/pve-kernelkernelcp *deb /home/pve/pve-kernel/kernel/# 此时可以将编译好的程序复制到需要拆分的系统上安装# 进入文件夹安装内核cd /home/pve/pve-kernel/kerneldpkg -i *.deb# 安装完成重启机器reboot# 重启完成查看内核版本uname -a
此时进去PVE直通硬件就可以发现IOMMU分组已经发生改变,不再是同一个分组了
以上是本次编译的操作内容,编译过程中大概耗时6小时,硬件使用j3455、16G内存、128G-SSD,使用上目前没发现什么问题
以下是编译好的内核下载地址(一个月有效,有需要的赶紧收藏):
通过网盘分享的文件:PVE编译内核链接: https://pan.baidu.com/s/1J02YYgv-vtyXpRbH4KSGgg?pwd=fyud 提取码: fyud

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1家元 +30 收起 理由
不长叶子的树 + 30

查看全部打赏

发表于 2025-6-17 09:59:26 来自手机浏览器 | 显示全部楼层
dpkg -i *.deb
reboot
之后还需要做什么吗?暂时还在一个组里没分开

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2025-6-20 15:19:21 | 显示全部楼层
网盘失效,可否再分享一下啊,谢谢
回复 支持 反对

使用道具 举报

发表于 2025-6-20 22:47:49 | 显示全部楼层
yaojangel 发表于 2025-6-17 09:59
dpkg -i *.deb
reboot
之后还需要做什么吗?暂时还在一个组里没分开

请问您下载的补丁还有么,分享一份可否,原网盘失效了
回复 支持 反对

使用道具 举报

发表于 2025-6-24 17:04:39 | 显示全部楼层
分组问题,可以在引导上设置参数“pcie_acs_override=downstream,multifunction”。
回复 支持 反对

使用道具 举报

发表于 2025-6-26 15:09:39 来自手机浏览器 | 显示全部楼层
pingace 发表于 2025-6-20 22:47
请问您下载的补丁还有么,分享一份可否,原网盘失效了

我没有效果,编译以后的内核,可以正常启动了,但是iommu分组没有变化
回复 支持 反对

使用道具 举报

发表于 2025-6-26 15:16:19 来自手机浏览器 | 显示全部楼层
pingace 发表于 2025-6-20 22:47
请问您下载的补丁还有么,分享一份可否,原网盘失效了

通过百度网盘分享的文件:PVE编译内核
链接:https://pan.baidu.com/s/1dEiKi9f6ucLtsHforOVl5g
提取码:6445
你试试吧,我8.4.1无效果,如果有解决办法请分享!
回复 支持 反对

使用道具 举报

发表于 2025-6-26 15:16:46 来自手机浏览器 | 显示全部楼层
jie200879 发表于 2025-6-24 17:04
分组问题,可以在引导上设置参数“pcie_acs_override=downstream,multifunction”。

要是这么简单 早解决了
回复 支持 反对

使用道具 举报

发表于 2025-6-26 15:17:44 来自手机浏览器 | 显示全部楼层
jie200879 发表于 2025-6-24 17:04
分组问题,可以在引导上设置参数“pcie_acs_override=downstream,multifunction”。

你说的grub内容,只针对支持ACS的设备有效
回复 支持 反对

使用道具 举报

发表于 2025-6-27 23:22:52 | 显示全部楼层
yaojangel 发表于 2025-6-26 15:16
通过百度网盘分享的文件:PVE编译内核
链接:https://pan.baidu.com/s/1dEiKi9f6ucLtsHforOVl5g
提取码 ...

多谢,我下载试试,我有安装老一点的版本和你一样装完后没强制分组,尝试从官网下载源码编译,各种编译一半报错,所以试试别人编译好的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-28 11:23:37 | 显示全部楼层
yaojangel 发表于 2025-6-17 09:59
dpkg -i *.deb
reboot
之后还需要做什么吗?暂时还在一个组里没分开

拆分才能直通,不直通无所谓
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-28 11:25:43 | 显示全部楼层
本帖最后由 星s银 于 2025-6-28 11:29 编辑
pingace 发表于 2025-6-20 15:19
网盘失效,可否再分享一下啊,谢谢
3天有效期

通过百度网盘分享的文件:PVE编译内核
链接:https://pan.baidu.com/s/1pRJNY7eRVEGHMZhmtozl_A?pwd=9yuq
复制这段内容打开「百度网盘APP 即可获取」
回复 支持 反对

使用道具 举报

发表于 2025-7-2 03:07:39 | 显示全部楼层
安装后还是无法强制分组,自行编译每次这里报错:



  1. <div>sent 25,786,524 bytes  received 191,454 bytes  10,391,191.20 bytes/sec
  2. total size is 25,123,960  speedup is 0.97
  3. rm -rf /home/pve/pve-kernel/proxmox-kernel-6.14.6/ubuntu-kernel_tmp
  4. touch .headers_compile_mark
  5. cp ubuntu-kernel/include/generated/compile.h debian/proxmox-headers-6.14.6-1-pve/usr/src/linux-headers-6.14.6-1-pve/include/generated/compile.h
  6. install -m 0644 ubuntu-kernel/Module.symvers debian/proxmox-headers-6.14.6-1-pve/usr/src/linux-headers-6.14.6-1-pve
  7. mkdir -p debian/proxmox-headers-6.14.6-1-pve/usr/lib/modules/6.14.6-1-pve
  8. ln -sf /usr/src/linux-headers-6.14.6-1-pve debian/proxmox-headers-6.14.6-1-pve/usr/lib/modules/6.14.6-1-pve/build
  9. touch .headers_install_mark
  10. # sign modules using ephemeral, embedded key
  11. if grep -q CONFIG_MODULE_SIG=y ubuntu-kernel/.config ; then \
  12.         find debian/proxmox-kernel-6.14.6-1-pve/usr/lib/modules -name \*.ko -print | while read f ; do \
  13.                 ./ubuntu-kernel/scripts/sign-file sha512 ./ubuntu-kernel/certs/signing_key.pem ubuntu-kernel/certs/signing_key.x509 "$f" ; \
  14.         done; \
  15. fi
  16. # finalize
  17. /sbin/depmod -b debian/proxmox-kernel-6.14.6-1-pve/usr/ 6.14.6-1-pve
  18. depmod: WARNING: could not open modules.order at /home/pve/pve-kernel/proxmox-kernel-6.14.6/debian/proxmox-kernel-6.14.6-1-pve/usr//lib/modules/6.14.6-1-pve: No such file or directory
  19. depmod: WARNING: could not open modules.builtin at /home/pve/pve-kernel/proxmox-kernel-6.14.6/debian/proxmox-kernel-6.14.6-1-pve/usr//lib/modules/6.14.6-1-pve: No such file or directory
  20. depmod: WARNING: could not open modules.builtin.modinfo at /home/pve/pve-kernel/proxmox-kernel-6.14.6/debian/proxmox-kernel-6.14.6-1-pve/usr//lib/modules/6.14.6-1-pve: No such file or directory
  21. # Autogenerate blacklist for watchdog devices (see README)
  22. install -m 0755 -d debian/proxmox-kernel-6.14.6-1-pve/usr/lib/modprobe.d
  23. ls debian/proxmox-kernel-6.14.6-1-pve/usr/lib/modules/6.14.6-1-pve/kernel/drivers/watchdog/ > watchdog-blacklist.tmp
  24. ls: cannot access 'debian/proxmox-kernel-6.14.6-1-pve/usr/lib/modules/6.14.6-1-pve/kernel/drivers/watchdog/': No such file or directory
  25. make[1]: *** [debian/rules:189: .install_mark] Error 2
  26. make[1]: Leaving directory '/home/pve/pve-kernel/proxmox-kernel-6.14.6'
  27. dpkg-buildpackage: error: fakeroot debian/rules binary subprocess returned exit status 2
  28. make: *** [Makefile:70: proxmox-kernel-6.14.6-1-pve_6.14.6-1_amd64.deb] Error 2
  29. pve@hpve:~/pve-kernel$</div>
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-23 16:14 , Processed in 0.140401 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表