我是一个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中打印当前时间。有人能帮助我吗?
2条答案
按热度按时间iugsix8n1#
是的,因为y2038问题,
do_gettimeofday
已经被移除。取而代之的是内核提供了时间接口,你可以根据自己的需要来使用。请查看https://www.kernel.org/doc/html/latest/core-api/timekeeping.html文档。例如,您有
ktime_get_ts64(struct timespec64 *ts)
,它将以秒和纳秒为单位提供时间。如果您只想以纳秒为单位,您可以使用
u64 ktime_get_ns(void)
。请查看上面的文档以了解适合您的用途。您也可以查看timekeeping.h和ktime.h以了解更多信息。如果你想找到一个例子,只需在内核源代码中使用
grep -rni <func name>
或cscope
搜索函数名即可。5vf7fwbs2#
还有一个获取rtc时间的单行程序,如下所示:
ktime_get_real
的文档可以在这里找到。我没有找到任何关于rtc_ktime_to_tm
的文档,甚至在代码中也没有,但它可以将Unix纪元的时间以纳秒为单位作为struct rtc_time
的输入和输出。如何打印struct rtc_time
可以在这里找到。