proxmox折腾 篇一:解决j3455直通iommu分组问题,PVE内核编译教程

2019-08-03 18:02:12 7点赞 41收藏 10评论

小编注:此篇文章来自#原创新人#活动,成功参与活动将获得额外100金币奖励。详细活动规则,请猛戳此链接

创作立场声明:刚开始玩proxmox虚拟机的时候,有部分教程是从张大妈这里看到的,所以也写一篇回馈各位值友


本文教程内容是解决华擎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,只能一起直通


 

解决j3455直通iommu分组问题,PVE内核编译教程


展开 收起

Day One(日记+笔记)

Day One(日记+笔记)

暂无报价

《Nebo》触屏笔记类软件 Windows版

《Nebo》触屏笔记类软件 Windows版

暂无报价

《Cardiograph(心电图仪)》iOS应用软件

《Cardiograph(心电图仪)》iOS应用软件

暂无报价

《CanOpener(耳机音质调试)》iOS应用软件

《CanOpener(耳机音质调试)》iOS应用软件

暂无报价
10评论

发表评论请 登录
  • 最新
  • 最热
评论举报

请选择举报理由

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
41
扫一下,分享更方便,购买更轻松