我写了一个简单的应用来启用rtc中断。
#include <stdio.h>
#include <fcntl.h>
#include <linux/rtc.h>
#include <sys/ioctl.h>
int main() {
int fd = open("/dev/rtc0",O_RDONLY);
int hz = 64;
if (ioctl(fd, RTC_IRQP_SET, hz) == -1){
printf("ioctl(RTC_IRQP_SET) failed");
return 1;
}
if (ioctl(fd, RTC_PIE_ON) == -1){
printf("ioctl(RTC_PIE_ON) failed");
return 1;
}
}
运行之后,我期待在IRQ8下{1}}中显示中断。
来自https://www.kernel.org/doc/Documentation/rtc.txt:
然而,它也可以用于从慢2Hz到a生成信号 相对较快的8192Hz,以2的幂为增量。这些信号 由中断号8报告。(哦!所以 是IRQ 8 对于...)它也可以作为24小时报警,当提高IRQ 8时 警报响起。
但没有变化。在
/proc/interrupts
仍然是被动的。我在这里缺少什么?
答案 0 :(得分:1)
答案是周期性中断(PIE)是使用定时器或hrtimer(取决于您的机器)而不是RTC实现的。你可以看看:
http://lxr.free-electrons.com/source/drivers/rtc/interface.c#L574和 http://lxr.free-electrons.com/source/drivers/char/rtc.c#L445
基本上,只有在设置闹钟时才会收到中断。