日期:2014-05-16  浏览次数:20673 次

rtc.c好像不是rtc驱动程序
我想读一读x86平台上的rtc驱动代码,而且想把自己的中断处理程序挂在IRQ 8上。选择rtc支持后重新编译内核,IRQ 8可以工作起来。但是不能将自己的驱动程序挂在IRQ 8上。我检查了drivers/char/rtc.c,发现x86平台上IRQ 8的中断处理程序的注册:
  request_irq(RTC_IRQ, rtc_int_handler_ptr, IRQF_DISABLED,"rtc", NULL)
只用了IRQF_DISABLED,没有用IRQF_SHARED,所以我的中断处理无法注册。但是修改代码改为IRQF_SHARED后任然不能注册。我猜想可能rtc.c不是rtc的驱动程序。然后查找代码,发现真正的驱动程序应该是drivers/rtc/rtc-cmos.c,其中:
  retval = request_irq(rtc_irq, rtc_cmos_int_handler,
  IRQF_DISABLED, dev_name(&cmos_rtc.rtc->dev),
  cmos_rtc.rtc);
将IRQF_DISABLED修改为IRQF_SHARED后,我的中断处理程序就可以注册了。我有两个问题想问一下:

1. 是不是drivers/rtc.c已经被废弃?如果废弃,为什么还出现在内核代码中?
2. 默认情况下rtc的中断好像是屏蔽的,如果要触发rtc的周期中断就要通过写入/dev/rtc0来实现(只是我了解的情况),能不能再内核中直接调用某个内核函数来启动周期中断?

------解决方案--------------------
driver下面的rtc.c是驱动吧。我记得我以前就是在这个目录下找到rtc的驱动代码的。