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

Linux 如何在内核中打印当前时间?,linux,time,kernel,Linux,Time,Kernel,我是linux的初学者。(很抱歉我的英语不好) 我应该打印当前时间,并在linux中通过系统调用执行某些操作。 我做了其他事情,但无法打印当前时间。。 我写得像 #include<linux/kernel.h> #include<linux/time.h> ... asmlinkage long sys_printtime(void) { ... struct timeval time; struct tm tm1; ...

我是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;
}
#包括
#包括
...
ASM链接长系统打印时间(无效){
...
结构时间值时间;
struct-tm1;
...
do_gettimeofday(和time);
本地时间=(u32)(time.tv_sec-(sys_tz.tz_minuteswest*60));
当地时间(3600*9)和tm1;
printk(内核调试“时间@(%04d-%02d-%02d%02d:%02d:%02d:%02d)\n”、tm1.tm_年+1900、tm1.tm_月+1、tm1.tm_日、tm1.tm_小时、tm1.tm_分钟、tm1.tm_秒);
...
返回0;
}
但它不起作用

错误说我不能使用do_gettimeofday,我终于知道我不能再使用do_gettimeofday了,因为kernel5不支持。 我在谷歌和stackoverflow上搜索, 但是我不知道如何用内核5打印当前时间。。
有人能帮我吗?

是的,
do\u gettimeofday
因问题已被删除。相反,内核提供了可以根据需要使用的时间接口。检查文档

例如,您有
ktime\u get\u ts64(struct timespec64*ts)
,它将以秒和纳秒为单位提供时间

struct timespec64 {
    time64_t    tv_sec;         /* seconds */
    long        tv_nsec;        /* nanoseconds */
};
如果只需要纳秒,可以使用
u64 ktime\u get\n ns(void)
。请检查上面的文档以了解适合您的目的。 您还可以查看和以了解更多信息


如果要查找示例,只需使用
grep-rni
或使用
cscope
在内核源代码中搜索函数名。您也可以在线搜索

非常感谢!我已经用uu-ktime\u-get\u-real\u-seconds()解决了它:)我会像你说的那样用ktime\u-get\u-ts64再试一次。再次感谢(x)