如何在内核中显示当前时间?

时间:2019-04-08 03:57:24

标签: linux time kernel

我是linux的初学者。 (对不起我英语不好) 我应该打印当前时间,并通过linux中的系统调用执行某些操作。 我做了其他事情,但无法显示当前时间。 我写得像

#include<linux/kernel.h>
#include<linux/time.h>
...
asmlinkage long sys_printtime(void) {
     ...
     struct timeval time;
     struct tm tm1;
     ...

     do_gettimeofday(&time);
     local_time=(u32)(time.tv_sec -(sys_tz.tz_minuteswest * 60));
     time_to_tm(local_time,(3600*9),&tm1);
     printk(KERN_DEBUG "time @(%04d-%02d-%02d %02d:%02d:%02d)\n", tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour,tm1.tm_min,tm1.tm_sec);
    ...
    return 0;
}

但它不起作用。

错误消息说我不能使用do_gettimeofday,我终于知道我不能再使用do_gettimeofday,因为kernel5不支持。 我在Google和stackoverflow上搜索, 但我不知道如何在kernel5中打印当前时间。 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

是的,由于y2038问题,do_gettimeofday已被删除。相反,内核提供了时间接口,您可以根据需要使用它们。查看文档https://www.kernel.org/doc/html/latest/core-api/timekeeping.html

例如,您有ktime_get_ts64(struct timespec64 *ts),它将以秒和纳秒为单位提供时间。

struct timespec64 {
    time64_t    tv_sec;         /* seconds */
    long        tv_nsec;        /* nanoseconds */
};

如果只需要几纳秒,则可以使用u64 ktime_get_ns(void)。请检查上面的文档以适合您的目的。 您也可以检查timekeeping.hktime.h以获得更多信息。

如果要查找示例,请使用grep -rni <func name>cscope在内核源代码中搜索函数名称。您也可以在线搜索here