为什么不在/ proc / interrupts中显示rtc中断?

时间:2014-11-03 18:58:21

标签: linux timer linux-kernel real-time

我写了一个简单的应用来启用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

仍然是被动的。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

答案是周期性中断(PIE)是使用定时器或hrtimer(取决于您的机器)而不是RTC实现的。你可以看看:

http://lxr.free-electrons.com/source/drivers/rtc/interface.c#L574http://lxr.free-electrons.com/source/drivers/char/rtc.c#L445

基本上,只有在设置闹钟时才会收到中断。