【问题标题】:How can i print current time in kernel?如何在内核中打印当前时间?
【发布时间】:2019-08-29 04:00:02
【问题描述】:

我是 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不支持。 我在谷歌和stackoverflow上搜索, 但我不知道如何在 kernel5 中打印当前时间 .. 有人可以帮帮我吗?

【问题讨论】:

    标签: linux time kernel


    【解决方案1】:

    是的,由于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 &lt;func name&gt;cscope 在内核源代码中搜索函数名称。也可以在线搜索here

    【讨论】:

    • 非常感谢!我已经使用 __ktime_get_real_seconds() 解决了它:) 我会按照你所说的使用 ktime_get_ts64 再试一次。再次感谢 x)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2019-07-08
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多