直通输出设备 android kodi,PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出
2 min read在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”引用即可。