驱动开发入门之中断处理

驱动程序开发过程中对中断的处理是很重要的一部分,直接关系程序的运行结果与效率,所以需要对其给予足够的重视.

中断处理包含两个方面,与CE系统相关的部分及与硬件相关的部分.  CE系统特定的处理流程(与其它系统有所区别的,或者说这部分代码在其它系统上是无法运行的)一般为:

1.用CreateEvent创建一个自动事件(即不需要使用ResetEvent去重置事件.

2.用InterruptInitialize将些事件与硬件所需要的中断关联起来.

3.创建一个线程,在此线程中用WaitForSingleObject等待事件,当等到这个事件之后,开始相应的处理,完成之后调用InterruptDone去重新激活中断. 

硬件相关部分,  一般的,OAL层的中断处理程序(OEMInterruptHandler),在监测到某个中断后,会将CPU相应的中断标志位清除,同时禁用该中断,以保证系统调度不会被该中断再次打断,而后返回一个中断号给系统,从而使系统开始调度其IST,驱动程序的IST被激活,完成相应的处理之后应该清除硬件级的中断标志,从而使硬件知道中断服务已经完成,而不再产生该中断。当然有些硬件,例如ATA/ATAPI不需要这个动作,这些设备在最后一个字节被读出/写入之后会将其DRQ标志清除,自然,只要还有一个字节没有被读出/写入,DRQ就一直存在。

注意: 5。0以后引入PQOAL的概念,在PQOAL格式的BSP中,有一个SYSINTR与IRQ的概念,SYSINTR是系统使用的中断,IRQ为硬件中断,即CPU使用的中断线,一般的BSP中,将其CPU的中断标志寄存器的各位一一对应,即,IRQ0对应于该寄存器的第0位,IRQ2为第2位。所以,做为驱动程序,必须知道它所驱动的硬件所使用的IRQ,即硬件中断线。然后调用KernelIoControl的IOCTL_HAL_REQUEST_SYSINTR功能得到一个SYSINTR,然后再进入上面描述的流程。这样,驱动程序 以后就只使用申请到的SYSINTR,而不关心其IRQ了。 OAL层会将IRQ与SYSINTR做相互转换。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
想要入门Windows驱动开发,可以采用以下步骤和资源: 1. 阅读微软官方文档:微软提供了详细的Windows驱动程序入门指南,其中包括了驱动程序的基本概念、开发环境的设置和开发流程等。可以参考微软官方文档进行学习和实践。 2. 学习驱动开发模型:在刚接触驱动开发的新手中,不建议采用WDM(Windows驱动程序模型)进行开发。推荐学习并使用WDF(Windows驱动框架)进行开发,因为WDF提供了更高层次的抽象和更简化的开发流程。可以参考《竹林溪径——深入浅出Windows驱动开发》和《Developing Drivers with the Windows Driver Foundation》这两本基于WDF开发驱动的中文和英文书籍。 3. 掌握驱动开发的基本知识和技能:对于新手来说,了解驱动开发的基本概念和原理是非常重要的。可以学习如何编写驱动程序、设备管理、内存管理和处理中断等。可以参考《竹林溪径——深入浅出Windows驱动开发》一书中的内容和微软官方文档提供的实践指南。 4. 实践和调试:驱动开发是一个需要不断实践和调试的过程。建议使用虚拟机或者物理设备进行测试和调试,以确保驱动程序的正确性和稳定性。 总之,入门Windows驱动开发需要学习官方文档、选择合适的开发模型、掌握驱动开发的基本知识和技能,并进行实践和调试。通过不断的学习和实践,可以逐渐掌握Windows驱动开发的技术和能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Windows驱动开发入门指引](https://blog.csdn.net/fuhanghang/article/details/123333156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Windows驱动开发入门篇(一)](https://blog.csdn.net/Sagittarius_Warrior/article/details/51000241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值