如何在运行Linux的虚拟机上获取/dev/ptp0 PTP硬件时钟?

7

我正在尝试运行需要使用ptp获取硬件时间戳的软件。因此,我需要有/dev/ptp0可用。我在VMWare上运行Linux/Ubuntu。

是否有办法让这个在虚拟机上工作?

谢谢!

3个回答

9
简而言之: ptp_kvm.ko
# modprobe ptp_kvm
# ls /dev/ptp*
/dev/ptp0  /dev/ptp_kvm

简述:

Red Hat Enterprise Linux 7.5 及以上版本提供了虚拟 PTP 硬件时钟 (PHC),可使客户机与主机同步,精度高达亚微秒级。

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/chap-kvm_guest_timing_management#sect-KVM_guest_timing_management-Host-guest-time-sync (需订阅?)

要启用 PHC 设备,请在 虚拟机内部 执行以下操作:

设置 ptp_kvm 模块在重启后自动加载。

# echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf

将/dev/ptp0时钟添加为chrony配置的参考:

# echo "refclock PHC /dev/ptp0 poll 2" >> /etc/chrony.conf

重新启动chrony守护进程:

# systemctl restart chronyd

为了验证主机和客户机的时间同步已经正确配置,请在客户机上使用chronyc sources命令。
# chronyc sources
#* PHC0                          0   2   377     4     -6ns[   -6ns] +/-  726ns

4
简单来说,VMware不支持使用linuxptp模拟PTP设备。最接近的解决方案是在qemu-kvm上运行linuxptp。您需要运行两个虚拟机,一个作为GM(Grand Master),另一个作为Slave,并使用最新的Fedora、RHEL 6.5或7.0版本。使用虚拟NIC模拟e10000(支持软件时间戳),并定义适当的防火墙规则以允许组播。但请注意,不能期望高精度和准确性。更多信息请参考此网站

谢谢您的回答。有没有模拟PTP硬件时钟的方法?我只需要用它来测试我的应用程序。或者还有其他获取硬件时间戳的方法吗? - Alessandro Giusa
从未尝试过,但你可以尝试这个: this。它是一个模拟时钟的Git仓库,可能有所帮助。让我知道它是否有效。 - Devidas
所以谢谢!我还在努力理解它的作用...它是模拟PTP硬件时钟吗?因为这正是我需要的... - Alessandro Giusa

2

现在是2021年,如果你能够编译自己的Linux内核,就会发现已经有一个内置驱动程序了。使用make menuconfig启用它:

Device Drivers --> PTP clock support --> KVM virtual PTP clock

在KVM客户机中,将会出现一个新的/dev/ptp0设备,以及以下内核引导日志:
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
PTP clock support registered

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接