如何在linux用户空间应用程序中获得最精确的时钟?

0x9*_*x90 1 c linux arm clock linux-kernel

我有一个嵌入式系统,我想在内核模块/驱动程序中共享最准确的时钟,其中一个用户空间应用程序对时钟非常敏感,应该是最准确的.

  1. 这些功能需要上下文切换和巨大的开销,因为系统调用,时钟将不准确.

  2. 我认为增加共享整数每一个瞬间从内核模块,假设用户空间应用程序可以直接访问它,问题是,我不能共享一个integer/long未对齐到页面大小,并宣布了一个全新的页面只有一个long变量是一个巨大的开销.

我该怎么办?

sca*_*cai 5

你想用clock_gettime()用或者用于获取当前时间(自启动以来)CLOCK_MONOTONIC(单调的,但不是稳定的,因为它是由NTP影响)或CLOCK_MONOTONIC_RAW(单调和稳定的,但是Linux特有的,并且需要一个内核> = 2.6.28).

要以准确的间隔醒来,请使用clock_nanosleep()并指定TIMER_ABSTIME.不幸的是clock_nanosleep()只支持CLOCK_MONOTONIC而不支持CLOCK_MONOTONIC_RAW,所以你不能通过获得的唤醒时间CLOCK_MONOTONIC_RAW因为这些时钟可能不同.不要忘记检查返回代码EINTR.