之前没有接触过驱动开发的人,看到“设备框架”这个名词可能会感到迷茫。大家不妨先思考这样一个问题:“为什么不同厂家、不同价格、不同形状的鼠标,插到电脑上之后都能正常工作?“这是因为各家生产的鼠标者遵循同一套标准,操作系统只要按照这个标准去操作鼠标就可以得到它想要的效果。
“设备框架”就是针对某一类外设,抽象出来一套统一的操作方法以及接入标准。有了这一层抽象,框架上层的应用要访问外设(比如摄像头)是,就不用关具体的厂家或者产地了。只要按照框架提供的操作方法,就可以控制摄像头拍照、摄像了。这套设备框架也为生产厂家提供了方便,他们不需要关心应用具体会怎么使用,只要按照设备框架提供的接入标准设计产品,生产出来就可以在市面上销售了。
在嵌入式领域,RT- Thread了提供了这样的一层抽象,用于屏蔽嵌入式上的硬件差异,为应用层提供统一的操作方法,也为底层提供统一的接入标准。
应用程序通过I/O设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层I/O硬件设备进行数据(或控制)交互。
I/O设备管理层实现了对设备驱动的封装。应用程序通过I/O设备层提供的标准接口访问底层设备,因此设备驱动程序的升级、更替不会对上层就用产生影响。这种方式使得设备的硬件操作相关的代码能够独立于应用程序而存在,双方只需要关注各自的功能实现,从而降低了代码的耦合性、复杂性,提高了系统的可靠性。I/O设备管理层所饮食的I/O设备管理接口有rt_thread_find\open\read\write\close\register等。
设备驱动框架层是对同类硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出来,将不同部分留出接口,由驱动程序实现。
设备驱动层是一组驱使硬件设备工作的程序,实现了访问硬件设备的功能,它负责创建和注册I/O设备。设备驱动层注册设备有以下两种方式。
第一种方式,使用I/O设备管理层接口直接注册,在设备驱动文件中通过rt_device_register()接口注册到I/O设备管理器中。这种方式是针对操作逻辑简单的设备,可以不经过设备驱动框架层,直接将设备注册到I/O设备管理器中。
1)设备驱动根据设备模型定义,创建出具体硬件访问能力的设备实例,将该设备通过rt_device_register接口注册到I/O设备管理器中。
2)应用程序通过rt_device_find()找到设备,然后使用I/O设备管理接口来该问硬件。
第二种方式 通过设备驱动框架层提供的注册函数进行注册,注册函数一般命名为rt_hw_xx_register(),设备驱动框架层的注册函数又调用了I/O设备管理接口的注册函数rt_device_register(),从而进行设备注册。此种注册方式是针对一些不能使用I/O设备管理接口完成操作的设备,如看门狗等。看门狗设备注册的主要步骤如下。
1)看门狗设备驱动程序根据看门狗设备模型定义,创建出具备硬件访问能力的看门狗设备实例,并将该看门狗设备通过rt_hw_watchdog_register()接口注册到看门狗设备驱动框架中。
2)看门狗设备驱动框架通过rt_device_register()接口将看门狗设备注册到I/O设备管理器中。
3)应用程序通过rt_device_find()接口查找到设备,然后使用I/O设备管理接口来该问看门狗硬件。
看门狗设备注册与使用序.
原作者:Lu_盼盼
|