How to get current hour (time of day) in linux kernel space

前端 未结 5 697
我在风中等你
我在风中等你 2020-12-14 08:14

I\'m writing a kernel module that checks to see if the time is between two specified hours, and disables input if it is. This has to do with me wanting to make sure I go to

相关标签:
5条回答
  • 2020-12-14 08:45

    We can use clock_gettime function with CLOCK_REALTIME as the type of clock.

    Reference http://linux.die.net/man/3/clock_gettime

    Just doing a strace on date executable gives us an idea to get the current date in the kernel mode.

    0 讨论(0)
  • 2020-12-14 08:47

    time_to_tm function can be of your help, which returns the structure tm. Timezone available in variable sys_tz, it can help you to set your offset properly to get local time.

    0 讨论(0)
  • 2020-12-14 08:50

    This works well for me:

    #include <linux/time.h>
    ...
    /* getnstimeofday - Returns the time of day in a timespec */
    void getnstimeofday(struct timespec *ts)
    

    For getting usual time format you can use:

    printk("TIME: %.2lu:%.2lu:%.2lu:%.6lu \r\n",
                       (curr_tm.tv_sec / 3600) % (24),
                       (curr_tm.tv_sec / 60) % (60),
                       curr_tm.tv_sec % 60,
                       curr_tm.tv_nsec / 1000);
    
    0 讨论(0)
  • 2020-12-14 08:57

    Converting the do_gettimeofday result to an hour is pretty simple, since it starts at midnight GMT.

    time_t t = time(0);
    time_t SecondsOfDay = t % (24*60*60);
    time_t HourGMT = SecondsOfDay / (60*60);
    

    Then adjust for your local timezone

    0 讨论(0)
  • 2020-12-14 09:06

    To get the local time in kernel, add the below code snippet your kernel driver:

    struct timeval time;
    unsigned long local_time;
    
    do_gettimeofday(&time);
    local_time = (u32)(time.tv_sec - (sys_tz.tz_minuteswest * 60));
    rtc_time_to_tm(local_time, &tm);
    
    printk(" @ (%04d-%02d-%02d %02d:%02d:%02d)\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
    
    0 讨论(0)
提交回复
热议问题