我有一个嵌入式系统,我想在内核模块/驱动程序中与对时钟非常敏感的用户空间应用程序共享最准确的时钟,并且应该是最准确的。
这些功能需要上下文切换和巨大的开销,并且自系统调用以来时钟将不准确。
我想从内核模块中增加一个共享整数,假设用户空间应用程序可以直接访问它,问题是我不能共享一个
integer/long
不与页面大小对齐的页面,并且只为一个声明一个全新的页面long
变量是一个巨大的开销。
我该怎么办?
您想使用(单调但不稳定,因为它受 NTP 影响)或(单调且稳定,但 Linux 特定且需要内核 >= 2.6.28)clock_gettime()
来获取当前时间(自启动以来)。CLOCK_MONOTONIC
CLOCK_MONOTONIC_RAW
要以准确的时间间隔醒来,请使用clock_nanosleep()
并指定TIMER_ABSTIME
. 不幸的是,clock_nanosleep()
只支持CLOCK_MONOTONIC
而不支持CLOCK_MONOTONIC_RAW
,所以你不能传递一个获得的唤醒时间,CLOCK_MONOTONIC_RAW
因为这些时钟可能不同。不要忘记检查EINTR
.