如何在内核中打印当前时间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在内核中打印当前时间?相关的知识,希望对你有一定的参考价值。

我是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)
", 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中打印当前时间..任何人都可以帮助我吗?

答案

是的,由于do_gettimeofday问题,y2038已被删除。相反,内核提供了时间界面,您可以根据需要使用它们。查看文档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

以上是关于如何在内核中打印当前时间?的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]

如何在内核中获取当前时间(UTC

如何获取嵌入式设备的内核版本信息

如何获取当前显示的片段?

在 Eclipse 中如何在评论中自动打印当前日期/时间?