如何在内核空间中设置rtc时间?

时间:2016-10-18 10:05:38

标签: time linux-kernel kernel

我尝试从内核空间设置RTC。但rtc_set_time()正在阻止而且不会返回。 "111"已打印,"222"未打印。

如何在Linux(2.6.32)内核空间中设置RTC时间?

struct device *dev = NULL;
struct rtc_device *rtc_dev = NULL;
struct rtc_time rtc_tm;

/* set rtc_tm */
/* ... */

dev = bus_find_device_by_name(&platform_bus_type, NULL, "at91_rtt.0");
if (!dev) {
    printk(KERN_INFO "%s: NOT FIND DEVICE\n", __FUNCTION__);
    return -1;
}

rtc_dev = to_rtc_device(dev);

printk(KERN_INFO "%s: 111\n", __FUNCTION__);
ret = rtc_set_time(rtc_dev, &rtc_tm);
printk(KERN_INFO "%s: 222\n", __FUNCTION__);

1 个答案:

答案 0 :(得分:0)

systohc.c文件中的

rtc_set_ntp_time()类似。它调用rtc_class_open()来获取调用rtc_dev的{​​{1}},以确保该模块尚未被删除。

不确定try_module_get()是否解决了问题,但这肯定是件好事。