|
引用 6 楼 daybing 的回复:
很感谢5楼,看了你的解释明白许多,不知道这样理解驱动对不对:驱动主要完成对外设的操作,这里面肯定少不了对寄存器的访问,对OS而言驱动就应该有一些固定格式,比如通过read,write,open,close函数就能够找到驱动进而访问外设;驱动通过API向OS申请中断这个好像很抽象,是不是驱动把入口地址传告诉OS然后OS就把这个入口地址写到中断向量表里?
关于驱动程序申请中断资源,其实OS中间加了一层,也就是说OS做了物理中断到逻辑中断的映射,驱动不需要去中断向量表中添加什么东西,中断向量表中设置的是OS的中断处理代码,就ARM而言,对于中断IRQ类,是在IRQ中断向量处理函数中来判断外部是什么物理中断的,然后会把物理中断映射成逻辑中断,然后通知驱动程序的线程,驱动程序从而运行;
这里不是想单片机里的某个中断必须对应某个处理函数,要处理哪个设备的中断必须有那个中断的函数,中断一来函数执行;OS在中间有处理了,要做驱动,只是在等待对应中断的事件,事件没来,驱动程序(线程)挂起,中断来了,OS就会通知驱动程序(线程),驱动程序就开始处理了,就这样~
说的其实也比较粗,大体上就是这样,具体要看相应的OS的机制,Vxworks有自己的处理方法,你找本书看看吧~ |
|