当前位置: 技术问答>linux和unix
rtc.c好像不是rtc驱动程序
来源: 互联网 发布时间:2016-12-29
本文导语: 我想读一读x86平台上的rtc驱动代码,而且想把自己的中断处理程序挂在IRQ 8上。选择rtc支持后重新编译内核,IRQ 8可以工作起来。但是不能将自己的驱动程序挂在IRQ 8上。我检查了drivers/char/rtc.c,发现x86平台上IRQ 8的...
我想读一读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来实现(只是我了解的情况),能不能再内核中直接调用某个内核函数来启动周期中断?
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的驱动代码的。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。