在PVE上很容易配置软路由、NAS等虚拟系统,如果能搭建一台虚拟HTPC解决多媒体播放问题就完美了,PVE虚拟环境具备这种潜力,通过适当配置,核显直通和HDMI输出都能完美。

LibreELEC是一个精简的Just enough OS for KODI,几乎是你能找到最轻量的KODI平台,本文将详细介绍PVE虚拟环境下LibreELEC系统的安装配置过程,并直通核显给LibreELEC实现HDMI视频和声音输出,达成HTPC与软路由、NAS等虚拟系统的All in one。

一、开启PVE硬件直通

1、启动内核IOMMU支持

打开PVE节点的shell,输入命令:

nano /etc/default/grub

在里面找到:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

intel CPU修改为:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off,vesafb:off"

amd CPU修改为:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=efifb:off,vesafb:off"

其中“iommu=pt”不是必须的,PT模式只在必要的时候开启设备的IOMMU转换,可以提高未直通设备PCIe的性能,建议添加。

编辑完文件后按“Ctrl + X” > “Y” > “回车”,确认保存并退出,然后更新一下引导配置:

update-grub

2、加载硬件直通相关模块

在PVE的shell中输入:

nano /etc/modules

查看modules中是否有这些PVE硬件直通相关的模块,如果没有就添加到文件末尾。

vfio

vfio_iommu_type1

vfio_pci

vfio_virqfd

3、添加驱动黑名单

编辑PVE系统的驱动黑名单配置文件:

nano /etc/modprobe.d/blacklist.conf

这个文件原来不存在,打开里面是空白的,添加以下内容:

blacklist snd_hda_intel

blacklist snd_soc_skl

blacklist snd_hda_codec_hdmi

blacklist i915

这些是核显相关的驱动,添加到“blacklist.conf”文件后,PVE系统将不加载核显的驱动,留给虚拟机用。

更新配置信息:

update-initramfs -u

4、绑定核显到vfio模块

查看核显以及声卡的供应商和设备ID:

lspci -n | grep -E "0300|0403"

显示如下:

00:02.0 0300: 8086:5a85 (rev 0b)

00:0e.0 0403: 8086:5a98 (rev 0b)

或者列出所以PCI设备的IOMMU分组信息和设备名称或分组信息和硬件ID,然后肉眼查找:

lspci

lspci -n

“8086:5a85”和“8086:5a98”分别就是核显和声卡的供应商ID和设备ID,把它们绑定到vifo模块:

echo "options vfio-pci ids=8086:5a85,8086:5a98" > /etc/modprobe.d/vfio.conf

注意,这里是华擎J3455-ITX主板的数据,其他主板或CPU核显和声卡的硬件ID会不一样,请根据实际情况添加。

二、PVE安装LibreELEC

1、准备工作

⑵ 下载LibreELEC X86镜像,解压得到"LibreELEC.img"镜像文件。

2、虚拟机环境

⑴ 在PVE的管理界面创建一台双核4G的虚拟机,取名“LibreELEC”,创建完删除不用的光驱,虚拟机硬件面板如下图:

3、安装LibreELEC系统

⑴ 上传安装镜像:点击 “pve"节点 > “local”存储空间 > 内容 > 上传 > 选中刚刚下载的“LibreELEC.img”镜像 > 最后点“上传”确认上传。

双击PVE日志里面的上传记录可以看到镜像上传的完整目录,复制备用:

⑵ 把镜像转成虚拟磁盘并导入到虚拟机在PVE的SHELL输入以下命令并回车:

qm importdisk 101 /var/lib/vz/template/iso/LibreELEC.img local-lvm

其中“101”LibreELEC虚拟机的编号,“/var/lib/vz/template/iso/LibreELEC.img”为安装镜像的完整目录,shell会显示vm-101-disk-0虚拟磁盘创建的进度,最后有‘Successfully imported disk as 'unused0:local-lvm:vm-101-disk-0'就是添加成功了。

⑶ 导入成功后在‘LibreELEC’虚拟机的“硬件”选项卡就能看到一个“未使用的磁盘0”,双击弹出配置窗口,设备选“sata1”,点击添加。

⑷ 切换到虚拟机的“选项”选项卡,双击“引导顺序”,第一引导项选“Disk ‘sata1’”。

⑸ 启动虚拟机,等待片刻进入LibreELEC的安装界面,按“Tab”键切换到“”,回车进入下一步。

⑹ 选择安装的目标硬盘,我们只加了一个“sata0”虚拟磁盘,直接按“Tab”键切换到“”,回车进入下一步。

⑺ 安装程序两次提示硬盘将被格式化,请确认硬盘内没有重要数据,按“Tab”键切换到“”,回车进入下一步。

⑻ 安装完成,对话框提示移除安装介质然后重启。

⑼ 关闭虚拟机,移除安装盘“sata1”,把引导顺序改回“sata0”,启动虚拟机稍等片刻就能看到美丽的LibreELEC图标。

但这时只有虚拟显卡还不能进入KODI界面,系统提示“is your GPU supported”,再次关闭虚拟机以便直通核显和声卡。

三、直通核显声卡

⑴ 用“args”方式添加核显直通:

打开虚拟机配置文件:

nano /etc/pve/qemu-server/101.conf

添加这两行:

args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1

vga:none

其中“101”为虚拟机ID,“00:02.0”为核显的IOMMU分组信息(“lspci”命令可以查看),请根据实际情况更改。

⑵ 在虚拟机的硬件面板添加直通声卡键盘鼠标或者遥控器,LibreELEC虚拟机最终设置如下:

⑶ 接上显示器,启动虚拟机稍等片刻就能进入KODI,版本为最新的KODI 18.6。

可以看到核显HD500被正确识别,通过HDMI能输出4K@60HZ画面,播放过程中CPU占用不高说明核显被正常调用做硬解,4K原盘流畅播放。

直通的声卡也被正常识别,能正常切换声音输出设备,HDMI声音输出正常。

四、romfile选项

根据PVE官方的说法,某些主板无法直通第一个PCI(e)插槽上的GPU显卡, 您需要在显卡“正常”工作时(即安装在其他插槽中)捕获主板vBIOS,然后才能将显卡移至插槽1并使用转储的vBIOS启动虚拟机,既在直通的时候加上romfile参数:

args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=vbios.bin

看这描述应该是说独显,但是我也不能确定跟IOMMU分组有没有关系;所以如果你的核显IOMMU分组刚好在“00:01.0”,核显直通又出现异常不妨尝试一下“romfile”参数。

这里给出dump转存vBIOS的方法,直接在PVE的shell内操作就行:

先更新源:

apt-get update

安装git和build工具:

apt-get install -y git build-essential

安装rom-parser工具:

git clone https://github.com/awilliam/rom-parser && cd rom-parser && make

转存vBIOS:

cd /sys/bus/pci/devices/0000:01:00.0/

echo 1 > rom

cat rom > /usr/share/kvm/vbios.bin

echo 0 > rom

生成的vbios文件在“/usr/share/kvm/”目录下,直通显卡的时候直接“romfile=vbios.bin”引用即可。

分类: Linux