有什么方法可以通过 USB 查询系统的日期/时间而无需在主机上安装任何东西(也许只是驱动程序)?
原问题的背景
避免the XY problem ,让我稍微解释一下我想做什么。
为了能够计算 2FA 的 TOTP token (例如像 Google Authenticator 应用那样),您需要一个实时时钟来获取日期和时间。
有 this USB device called SC4-HSM我想用它来计算 token ,但是它没有时钟,而且根据设计师的说法,添加一个会太贵(需要电池等)。
原始问题的可能解决方案
当然,此设备将与已经具有 RTC 的计算机一起使用。因此,我想到了查询系统的日期/时间来解决问题。
(注意:我知道 USB 设备可以连接到各种主机,并不是所有主机都有 RTC,但由于这只需要与计算机配合使用,我认为这不应该是一个问题)
我的第一个想法是可能有一些 USB 设备类需要日期/时间,所以我可以将设备注册为该类型,然后我就可以查询值。
通过 device class codes list (Internet Archive) 之后没有什么让我觉得需要日期/时间。我能想到的最接近的是:
我浏览了 device class documents in the USB Implementers Forum但其中没有任何内容与日期或时间有丝毫关联。
当前问题
由于 USB 规范似乎是一个死胡同,我认为也许有一种方法可以编写一个非常简单的 USB 驱动程序,当设备插入计算机时可以自动加载,然后我们可以使用该驱动程序在设备要求时返回日期/时间(除非我误解了什么)。
我现在正在查看 USB 开发文档,例如 Michael Opdenacker's Linux USB drivers course , 我试过 Linux USB Project这似乎死了。浏览 Driver Development for Windows NT只是想知道一个主意,但是我仍然无法弄清楚这是否可能,以及它有多难。
在这方面我是一个完全的初学者,也许这超出了我的技能水平,但我想弄清楚我是否需要奇怪的技巧和解决方法,或者是否有更直接的方法来做到这一点?
关于它的信息似乎很少,或者我只是在搜索错误的地方。
关于解决原始问题或当前问题的任何想法/指示?
最佳答案
系统时间不一定是一般时间,即您从 NTP 服务器获得的“原子”时间
最明显的解决方案是使用autorun,这在 linux 上也是可行的,但通常 autorun 被阻止,因此用户必须明确地激活它
获取时间的 linux 命令是 date
或 hwclock
或者如果计算机连接到网络,则可以联系 NTP 服务器(如果防火墙不阻止这个)
然后您的自动运行程序必须将数据发送到 SC4-HSM。如果 SC4-HSM 实现了 CDC ACM(虚拟 COM 端口),我不知道它实现了哪些 USB 类,这很简单: Unable to sync computer time to Arduino via USB
(类似于 echo "T$(($(date +%s)+60*60*$TZ_adjust))">/dev/tty.usbmodemfa131
)
也许可以通过 USB 驱动程序访问系统时间,我现在还不知道
关于c - 通过 USB 获取系统日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40819579/