通过USB获取系统日期/时间

时间:2016-11-26 14:50:45

标签: c date datetime usb hsm

有没有办法通过USB查询系统的日期/时间而无需在主机上安装任何东西(可能只是驱动程序)?

原始问题的背景

为了避免the XY problem,让我解释一下我尝试做的事情。

为了能够为2FA计算TOTP令牌(例如Google Authenticator应用程序),您需要一个实时时钟来获取日期和时间。

我想用this USB device called SC4-HSM来计算代币,但它没有时钟,根据设计师的说法,添加一个会太贵(需要电池)等等。)

原始问题的可能解决方案

该设备将与已经具有RTC的计算机一起使用。因此,我有了查询系统的日期/时间的想法,这将解决问题。

注意:我知道USB设备可以连接到各种主机,并不是所有主机都有RTC,但由于这只需要与计算机一起工作,我认为这不应该'是一个问题

我的第一个想法是可能有一些USB设备类需要日期/时间,因此我可以将设备注册为该类型,然后我就可以查询这些值。

在经过device class codes list (Internet Archive)后,没有任何东西像我需要的日期/时间一样跳到我身边。我能想到的最接近的是:

我浏览了device class documents in the USB Implementers Forum,但其中没有任何东西甚至与日期或时间有很大关系。

当前问题

由于USB规格似乎是一个死胡同我认为可能有一种方法可以编写一个非常简单的USB驱动程序,当设备插入计算机时可以自动加载,然后我们可以使用驱动程序返回设备要求的日期/时间(除非我误解了某些内容)。

我现在正在查看像Michael Opdenacker's Linux USB drivers course这样的USB开发文档,我尝试了似乎已经死亡的Linux USB Project。掠过Driver Development for Windows NT只是为了得到一个想法,但是我仍然无法弄清楚这是否可能,以及它有多难。

我是一个完全的初学者,也许这是我的技能水平之外的东西,但我想弄清楚我是否需​​要奇怪的黑客和变通办法,还是有更简单的方法来做到这一点?

关于它的信息似乎很少,或者我只是在错误的地方搜索。

有关解决原始问题或当前问题的任何想法/指示吗?

1 个答案:

答案 0 :(得分:1)

系统时间不一定是一般时间,即从NTP服务器获得的“原子”时间

最明显的解决方案是使用 autorun ,这在Linux上也是可能的,但通常自动运行被阻止,因此用户明确地必须激活它

https://askubuntu.com/questions/642511/how-to-autorun-files-and-scripts-in-ubuntu-when-inserting-a-usb-stick-like-autor

用于获取时间的linux命令是datehwclock,或者如果计算机连接到网络,则可以联系NTP服务器(如果防火墙不阻止此操作)< / p>

然后您的自动运行程序必须将数据发送到 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驱动程序访问系统时间,我现在不知道