第12章 Linux设备驱动的软件架构思想之Linux驱动的软件架构

本章重点

    在实际的Linux驱动中,Linux内核尽量做得更多,以便底层的驱动可以做得更少。而且,也特别强调驱动的跨平台特性。因此,Linux内核会为不同的驱动子系统设计不同的框架

1、Linux驱动的软件架构设计的出发点。

2、platform设备和驱动,以及platform的意义。Linux内核中驱动和设备分离的优点。

3、以RTC、Framebuffer、input、tty、混杂设备驱动等为例,介绍驱动分层、核心层(core)与底层交互的一般方法。

4、Linux设备驱动中主机控制器与外设驱动分离的设计思想,以SPI主机控制器和外设驱动为例进行佐证。

12.1 Linux驱动的软件架构

   Linux不是为了某单一电路板而设计的操作系统,Linux可以支持约30种体系结构下一定数量的硬件。Linux设备驱动非常重视软件的可重用和跨平台能力

    Linux总线、设备和驱动模型,驱动只管驱动,设备只管设备,总线则负责匹配设备和驱动,而驱动则以标准途径拿到板级信息,这样,驱动就是标准了,如图12.1所示。


图12.1 Linux设备和驱动的分离

Linux的字符设备驱动需要编写file_operations成员函数,并负责处理阻塞、非组塞、多路复用、SIGIO等复杂事物。软件分层的思想,将软件进行分层设计应该是软件工程最基本的一个思想,比如提炼一个input的核心层出来,把跟Linux接口以及整个一套input事件的汇报机制都在这里面实现,如图12.2所示,是非常好的。


图12.2 Linux驱动的分层

在Linux设备驱动框架的设计中,除了有分层设计以外,还有分隔的思想。例如,假设要通过SPI总线访问某外设,需要通过操作CPU上的SPI控制器的寄存器才能达到访问SPI外设的目的。

软件工程“高内聚、低耦合”和“信息隐蔽”的基本原则。可以用如图12.4所示的思想对主机控制器驱动和外设驱动进行分离。这样的结果:外设的驱动与主机控制器的驱动不相关,主机控制器驱动不关心外设,而外设驱动也不关心主机,外设只是访问核心层的通用API进行数据传输,主机和外设之间可以进行任意组合。

图12.4 Linux设备驱动的主机、外设驱动分离


猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/80459690