PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

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

在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
PVE虚拟黑群晖实现硬盘休眠避坑指南教程3

在里面找到:

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"
PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

其中“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 
PVE虚拟黑群晖实现硬盘休眠避坑指南教程5

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、准备工作

⑴ 一台X86物理机,已经完成PVE虚拟环境的安装配置

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

2、虚拟机环境

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

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

创建过程不赘述,如果有不明白可以参考:PVE安装Openwrt软路由的详细步骤

3、安装LibreELEC系统

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

PVE怎么上传IMG镜像文件

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

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

⑵ 把镜像转成虚拟磁盘并导入到虚拟机在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”,点击添加。

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

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

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

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

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

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

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

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

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出
PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

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

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

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

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

但这时只有虚拟显卡还不能进入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虚拟机最终设置如下:

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

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

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

PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出

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

PVE直通核显搭建LibreELEC KODI HTPC实现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”引用即可。

五、总结

本教程首先在华擎J3455-ITX平台上完成试验,这块主板做虚拟机All-in-one需要扩展一块PCIE-X1网卡,我把PVE装在闪迪CZ430酷豆U盘上,SATA控制器直通给黑群晖实现硬盘休眠

另外在双网口的华擎(ASRock)Z390M-ITX/ac主板 也搭建成功,不过因为IOMMU分组问题需要外置声卡,这块主板有m2接口,还有一条PCI-EX 16接口将来可以扩展万兆网卡

本教程详细介绍了PVE核显直通的详细步骤,并用搭载KODI最精简LibreELEC系统在PVE虚拟环境下搭建HTPC成功,LibreELEC是除了PVE系统直接安装KODI外资源消耗最小的HTPC方案,推荐性能较弱的家庭All in one媒体服务器选用。

原创文章,作者:10bests,禁止任何形式转载:https://www.10bests.com/pve-libreelec-kodi-htpc/

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

评论列表(11条)

  • 8203
    8203 2020年11月5日 上午10:38

    和UBUNTU一样,我的H310M+G5620参照这个您这个教程,LibreELEC 也无法直通核显到电视上,期待您的回复

    • 10bests
      10bests 2020年11月5日 下午5:49

      @8203在控制台上能看到核显驱动正常吗?能否提供更多信息?

  • zyh888168
    zyh888168 2021年3月3日 上午8:28

    第四步其实可以精简掉,第二步安装LibreELEC的时候记得改BIOS的启动方式,要选UEFI BIOS方式安装LibreELEC,安装完之后把显示器改成无,用shell改虚拟机的配置nano /etc/pve/qemu-server/101.conf 添加args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1。添加USB设备和直通pci声卡,启动一次成功,不会黑屏。

  • edz
    edz 2021年3月28日 下午11:13

    请教一下,我直通安装完之后,一切正常运行,除了hdmi无法输出声音,请问这个怎么解决,同j3455

    • 10bests
      10bests 2021年3月29日 下午3:19

      @edzLibreELEC 里能看到声音输出设备吗?试着切换看看?

  • 5566
    5566 2021年5月19日 下午8:17

    只有鼠标黑屏其他啥也没是怎么回事

  • 666
    666 2021年5月19日 下午9:12

    我是i5 3475cpu为啥安装以后总是黑屏但是有鼠标

  • J4205
    J4205 2021年7月25日 下午10:04

    安装LibreELEC时,无法进入安装界面,显示:
    *** Error in mount_flash: mount_common: could not mount UUID=2510-0331 ***

  • 晴天
    晴天 2021年10月26日 下午11:04

    我是联想小主机 i5-4690T PVE下直通核心显卡给LIBREELEC 可以输出到电视 系统也能正确识别我和核心显卡型号 HD4600 但是一播放视频 CPU就100% 感觉并没有用GPU解码 不知道怎么回事

  • cesor
    cesor 2022年4月27日 下午4:53

    echo 1 > rom的时候报错permission denied,而且那个文件夹下面没有rom这个文件,是不是我用efi启动的原因。而且这个提取bios的方法是啥意思,echo 1 > rom是把1写到rom,cat rom > vbios那不就是把1写到了vbios里吗大哭,望指教。