我有一个 RTL8125B-CG NIC,根据我从他们的产品页面收集到的信息,它具有 PTP 的硬件支持。但是,sudo ethtool -T
不会检测到任何硬件时间戳功能。
我已经尝试过使用r8169
驱动程序和r8125
来自 Realtek 的驱动程序(这个来自 Github和这个来自 Realtek 的下载页面),但没有成功。在源代码的 Makefile 中,似乎有一个标志表明默认情况下未启用 PTP 支持,但是当我启用此标志时,我无法编译(我得到了这个问题中出现的错误)。
任何人都有任何经验或知道我可以做些什么来启用 PTP 支持?
我正在运行 Ubuntu 20.04 和5.11.0-36-generic
内核。
请参阅 Github 上的问题以获取答案:https ://github.com/awesometic/realtek-r8125-dkms/issues/9
简而言之,编译的问题在于,在最新版本的驱动程序 (9.006.04) 中,Realtek 已从 中删除了
spinlock_t lock
成员变量struct rtl8125_private
,但并未相应地更新 PTP 文件。因此,所有的spin_lock_irqsave
和spin_lock_irqrestore
例程都不会编译。有两种方法可以解决此问题:spin_lock_irqsave
和例程,或spin_lock_irqrestore
spinlock_t lock
将成员添加回struct rtl8125_private
.后者可能更安全,因为我们不知道 IRQ 是否对驱动程序的功能至关重要。话虽如此,我确实尝试了这两种解决方案,并且都使驱动程序编译并报告了 PTP 硬件功能,所以我不知道哪个最好。
但是,我仍然认为驱动程序有很多错误,因为我仍然不能使用硬件时间戳是从属模式,而且我很难获得可靠的结果。我经常遇到尝试从驱动程序获取时间戳的超时
ptp4l
问题。linuxptp
我有两台带r8125
NIC 的不同计算机,它有时在一台计算机上工作,而很少在另一台计算机上工作。我怀疑 PTP 功能尚未经过 Realtek 的良好测试,尽管这只是我的猜测。