如何获取linux内核空间中的当前小时(时间)

Tom*_*ald 21 c linux kernel-module linux-kernel

我正在编写一个内核模块,用于检查时间是否在两个指定的小时之间,如果是,则禁用输入.这与我想要确保我早点睡觉有关.(我知道我也可以使用任何数量的不同技术,包括cron等,但我想学习内核编程......)

因此,作为第一个版本,我检查当前小时是否在开始和结束之间,这是通过模块的参数设置的.

因此,我的问题是:如何获得当前时间?我无法访问标准库中的常用时间函数,因为我在内核空间中.我猜我应该使用do_gettimeofday()来实现这一点,但这只能给我几秒和几纳秒,而且我在当天需要几个小时.

谢谢.

Zim*_*bao 15

time_to_tm函数可以是你的帮助,它返回结构tm.变量sys_tz中有时区,它可以帮助您正确设置偏移量以获得当地时间.


小智 6

要在内核中获取本地时间,请在下面的代码片段中添加内核驱动程序:

struct timeval time;
unsigned long local_time;

do_gettimeofday(&time);
local_time = (u32)(time.tv_sec - (sys_tz.tz_minuteswest * 60));
rtc_time_to_tm(local_time, &tm);

printk(" @ (%04d-%02d-%02d %02d:%02d:%02d)\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
Run Code Online (Sandbox Code Playgroud)

  • 根据https://elixir.bootlin.com/linux/latest/ident/do_gettimeofday,此功能似乎已被弃用,获取当前时间的现代方法是什么?我认为这与最近迁移到64位时间有关吗? (2认同)