如何获取中断的内核时间戳?

时间:2014-11-26 06:21:21

标签: linux-kernel

我有一个来自实时世界的事件,它会产生一个中断。我需要将此事件注册到Linux内核时间片之一,如CLOCK_MONOTONIC或CLOCK_REALTIME,目的是确定事件何时在实际日历时间内发生。目前推荐的方法是什么?我的谷歌搜索发现了2011年提交的一些补丁以支持它,但是从那时起中断处理代码已经过大量修改,我再也看不到对时间戳的引用了。

对于我的预期应用,精度要求很低(1 ms)。不过,我想知道如何正确地做到这一点。如果可以排除更高优先级中断的可能性,我认为可以进入微秒范围。

3 个答案:

答案 0 :(得分:2)

如果您只需要低精度,那么您可以阅读jiffies。 但是,如果CONFIG_HZ小于1000,您甚至不会获得1 ms的分辨率。

要获得高分辨率时间戳,请参阅firewire-cdev.c如何执行此操作:

    case CLOCK_REALTIME:      getnstimeofday(&ts);  break;
    case CLOCK_MONOTONIC:     ktime_get_ts(&ts);    break;
    case CLOCK_MONOTONIC_RAW: getrawmonotonic(&ts); break;

答案 1 :(得分:0)

如果我理解你的需要 - 你可以使用getnstimeofday()函数。

答案 2 :(得分:0)

如果您需要高精度单调时钟值(这通常是一个好主意),您应该查看ktime_get_ts()函数(在linux/ktime.h中定义)。在另一个答案中建议的getnstimeofday()返回“墙”时间,这可能实际上似乎在某个时候倒退,导致某些应用程序出现意外行为。