解决j3455直通iommu分组问题,PVE内核编译教程
创作立场声明:刚开始玩proxmox虚拟机的时候,有部分教程是从张大妈这里看到的,所以也写一篇回馈各位值友
更新:
2020.02.22更新内核pve-kernel-5.3.18-2,常规更新,今后不会一有新版本就更新了,估计大版本更新再编译新内核了,每一次都挺折腾的,而且编译出的内核有bug恢复起来挺麻烦链接 提取码: 6cfx
12.13更新内核pve-kernel-5.3.13.1,常规更新。链接 提取码: wc6n
12月6日更新内核pve-kernel-5.3.10.1
基于5.3版本内核的promox-ve6.1-2已经release了,5.3版本内核可以摆脱5.0版本内核独立使用了。链接 提取码: 7ngi
11月14日更新
内核5.3.7-1,一不小心跟着官方源码跑到比正式版前面很多了,而5.0版本的Ubuntu源码被我删了,懒得再下,所以干脆编译了这个版本,大家可以先行尝试,或者等待官方更新到5.3内核版本后再使用链接 提取码: nn91
9月4日更新pve内核 5.0.21-2链接 提取码: zcyv
本文教程内容是解决华擎J3455主板在PVE下开启IOMMU不能分组的问题,解决办法是编译PVE内核,打上特制的ACS_override补丁并安装。
提醒:安装内核有宿主系统崩溃的风险,请务必先进行备份。
详情我将写一篇LVM下安装的PVE利用snapshot创建快照实现宿主机备份与还原的帖子教程。
首先是常规的pve操作内容,请用root用户,包括编译部分也要用root用户编译,老外的建议,不清楚为什么。
1.开启IOMMU分组功能。
编辑 /etc/default/grub,将以下部分修改如下:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream"
amd的cpu请将intel_iommu=on 改为 amd_iommu=on
然后是修改/etc/modules文件, 添加如下内容:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
然后执行
update-initramfs -u -k all
再执行
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
查看是否开启了IOMMU,如果有 IOMMU, Directed I/O or Interrupt Remapping is enabled之类的字样那么说明IOMMU开启了,这部分网上教程很多,我就不赘述了。
2.编译内核
当然由于编译过程较漫长,如有必要我可以提供pve6.0的5.0.18-1版本的已修改内核。废话不多说,开始进入教程:
1).首先需要编译环境,建议宿主机就老老实实宿主机,不要在pve系统里直接编译,用其他机器或者开个虚拟机。Ubuntu和Debian都行,我用的是Debian buster。至少需要100G的空间,用以存放编译PVE内核的源码和编译过程文件。
2) .安装编译所需软件,由于摸索过程中安装的软件太多了,下面列的不一定全,请尝试的小伙伴如果在编译过程报错,请回帖反馈给我,我来查查看是什么软件忘记写上来了
apt install 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 libperl-dev asciidoc xmlto gnupg gnupg2 rsync lintian debhelper libdw-dev libnuma-dev libiberty-dev libslang2-dev debhelper git-core lintian build-essential automake autoconf libtool sphinx-common dh-python
3) .获取pve-kernel源码,因为我本人网络不好,我花了几天时间从pve的git站拖到了国内的gitee,如果同志们的网络好的话,可用尝试用pve自己的源码git
git clone git://git.proxmox.com/git/pve-kernel.git
或者用下面的我转到gitee的(国内的代码托管网站,不过可能有bug,我自己pull内核源码有时候拉不下来)
git clone git://gitee.com/hahach/pve-kernel.git
以上两个2选1 clone即可
4).这一步最关键 进入pve-kernel目录,进入patches/kernel目录,修改“0003-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch”这个patch文件,未来其他版本的可能不是这个名字,但是一定会包含ACS 这个关键词
将以下部分进行修改
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -194,6 +194,106 @@ static int __init pci_apply_final_quirks(void)
改为
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -194,6 +194,105 @@ static int __init pci_apply_final_quirks(void)
如果熟悉patch格式的应该看得明白,我可以解释下,这里是把106改为105了,因为下面具体的补丁内容会删减一行
接下来是关键的部分,作如下修改:
+ if (!pci_is_pcie(dev) ||
+ pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))
改为
+ if (!pci_is_pcie(dev))
注意别漏了加上的小括号
5).可以开始编译了
cd pev-kernel
make
这里需要下载linux内核源码,大约2g,需要很长时间,请耐心等待,另外编译过程很智能,不需要make命令加线程,过程中会自动多线程。我j3455主板,debian虚拟机给了3核,下载加编译用了6小时,仅供参考。
6).如果顺利那么会在pve-kernel目录得到4个deb文件
root@debian:~/pve-kernel# ll *.deb
-rw-r--r-- 1 root root 1286948 8月 2 22:31 linux-tools-5.0_5.0.18-1_amd64.deb
-rw-r--r-- 1 root root 4907164 8月 2 22:31 linux-tools-5.0-dbgsym_5.0.18-1_amd64.deb
-rw-r--r-- 1 root root 9576432 8月 2 22:31 pve-headers-5.0.18-1-pve_5.0.18-1_amd64.deb
-rw-r--r-- 1 root root 54006332 8月 2 22:34 pve-kernel-5.0.18-1-pve_5.0.18-1_amd64.deb
将以上4个deb文件一同传到pve的root目录下。
7).以防万一,做好系统备份或者快照,zfs文件系统我不会,请自行查询资料,我会写一篇lvm文件系统下的pve系统备份攻略,详见我的另外一个帖子,因为等级低没法发帖子链接,凑合看吧:PVE在LVM文件系统下利用snapshot进行备份与还原
8).弄完系统备份后可以开始安装型内核了。
运行
dpkg -i *.deb
安装内核,等待安装结束,重启即可。
重启后即可发现如下图,IOMMU分组全都打断了,每一个硬件一个分组,不过直通的时候有个问题需要注意
每一个PCIE id 只能一同直通,不能分别直通。例如我的82576网卡是 04:00.01和04:00.02,都是04:00,只能一起直通
12.13更新内核pve-kernel-5.3.13.1,常规更新。链接,提取码: wc6n
12月6日更新内核pve-kernel-5.3.10.1 基于5.3版本内核的promox-ve6.1-2已经release了,5.3版本内核可以摆脱5.0版本内核独立使用了。链接,提取码: 7ngi
11月14日更新 内核5.3.7-1,一不小心跟着官方源码跑到比正式版前面很多了,而5.0版本的Ubuntu源码被我删了,懒得再下,所以干脆编译了这个版本,大家可以先行尝试,或者等待官方更新到5.3内核版本后再使用链接, 提取码: nn91
9月4日更新pve内核 5.0.21-2链接,提取码: zcyv


Emile-A239
校验提示文案
Emile-A239
校验提示文案
值友5818352137
校验提示文案
Pxly2k
TASK OK
改用UEFI启动也是一样这个错误!不知道你们有没有遇到这样的问题??
校验提示文案
margrop
ps:zdm排版太差,还是在koolshare的帖子排版清楚许多
校验提示文案
凡蜀黍
校验提示文案
qiuyanqing2001
校验提示文案
lswymxk
校验提示文案
itwone
校验提示文案
小华在线
校验提示文案
Elliont
校验提示文案
Burukku
校验提示文案
sanzuwu
校验提示文案
值友5989772237
校验提示文案
东___哥
校验提示文案
风之流
校验提示文案
江枫雨
校验提示文案
yfdoor
校验提示文案
zxfandyy
校验提示文案
zxfandyy
校验提示文案
值友4248669766
校验提示文案
Emile-A239
校验提示文案
值友4236471368
校验提示文案
疯奔的蜗牛
链接: 去看看 提取码: 6688
校验提示文案
张弛有度186
校验提示文案
值友7802365510
校验提示文案
二十九画生
校验提示文案
wainyang
校验提示文案
nnkn
校验提示文案
nnkn
***
校验提示文案
Emile-A239
校验提示文案
Emile-A239
校验提示文案
值友5021230897
报错信息:
dpkg-source --before-build .
dpkg-checkbuilddeps: error: Unmet build dependencies: dwarves libpve-common-perl lz4 zstd
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
校验提示文案
柯伟锋
校验提示文案
vsam
校验提示文案
nvny
-----------------------------------
pve-kernel-5.13.19-4-pve_5.13.19-9
pve-kernel-5.13.19-5-pve_5.13.19-12
pve-kernel-5.13.19-5-pve_5.13.19-13
-----------------------------------
pve-kernel-5.15.19-2-pve_5.15.19-3
后续...
链接:去看看
提取码:thjf
校验提示文案
嘤嘤怪
去看看
校验提示文案
值友3136710379
校验提示文案
柯伟锋
校验提示文案
Emile-A239
去看看
校验提示文案