最近小弟爱上了驱动程序,就自己啃了一段时间,有一个问题希望得到各位的解答,问题如下:
我阅读了一下一本驱动(windows驱动)开发书籍,知道了在内核模式下开发驱动程序的一般流程和思想。
但是,几乎很多实例都是操作一个虚拟设备,不是一个真正的设备,没有涉及与具体设备通信命令
交互的过程。下面是我画的一个简单的应用程序操作设备的经过的组件。
其中设备驱动到硬件(1)是怎么一个过程?在这一个步骤必须具备硬件知识吗?
提前感谢各位的回复!
------解决方案--------------------
无图。
操作虚拟设备,不涉及到具体的特殊硬件,从而可以将注意力集中到驱动本身上来。
理解驱动,并不一定需要具体的通信命令或交互。例如,访问一块物理内存或一个物理地址,并无什么交互。
------解决方案--------------------
驱动与硬件之间有一层BSP,是用来操作设备的寄存器,从而达到操作设备的目的。比如驱动中的read函数,你只知道它会去操作设备,其实还有很多的时序问题都是在BSP中实现的。有人也把BSP归纳为驱动的一部分,不过独立出来看好理解点吧。
------解决方案--------------------
其实我觉得你可以先从裸机跑跑.大致了解一些硬件接口的操作,然后再转向带操作系统的驱动开发.这样,我觉得你可能不会觉得特别迷茫了..其实操作外围的一些接口.本着就是操作相对应的寄存器,你可以想着是指定的变量吧..比如ARM上面操作GPA这个gpio管脚.就有GPACON GPADAT GPAUP这些寄存器,写入相应的数值,那么外围的gpio上就有不同的电平了...希望能帮到你...谢谢