如何在Linux内核模块中使用CLOCK_MONOTONIC_RAW时钟源作为定时器?

时间:2014-11-11 14:18:48

标签: c linux time kernel-module

我有带有实时补丁的linux 3.14.12。

我正在为我的硬件编写linux驱动程序,在这个驱动程序中,我需要在一个精确的时间间隔内定期运行一些代码。此外,我需要在我的系统中使用NTP进行时间更新。问题是我目前正在使用hrtimer在单独的线程中创建时间间隔,如下所示:

static int time_interval_update_thread(void *arg)
{
    int ret = 0;
    __set_current_state(TASK_UNINTERRUPTIBLE);
    while(!kthread_should_stop())
    {
        ret = schedule_hrtimeout_range(&next_time_int, 0, HRTIMER_MODE_ABS);
        if (ret == -EINTR && !kthread_should_stop())
        {
        }
        else if (ret == 0)
        {
            run_some_code();
            next_time_int = ktime_add_ms(next_time_int, PERIODICAL_INTERVAL_MS);
        }
        __set_current_state(TASK_UNINTERRUPTIBLE);
    }
    return 0;
}

但问题是hrtimer不能使用CLOCK_MONOTONIC_RAW时钟源,但CLOCK_MONOTONIC不适合我的任务,因为CLOCK_MONOTONIC时钟源会受到NTP更新的影响。

那么有没有办法使用CLOCK_MONOTONIC_RAW时钟源来创建时间间隔?

0 个答案:

没有答案