驱动

一、什么是驱动
驱动,即驱使硬件设备行动。驱动程序,英文名为“Device Driver”,全称为“设备驱动程序”, 是一种可以使计算机和设备通信的特殊程序,相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被誉为“硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。
举个最简单的例子,一个LED灯的亮或灭,就需要与之相对应的driver来驱使LED灯或亮或灭。
如下框图, 驱动程序位于底层硬件之上,用于隔离上层应用软件,

无操作系统驱动结构

二、无操作系统的驱动

首先我们需要明白,并不是所有的系统都一定运行操作系统。例如,电话机、微波炉、电冰箱等比较简单的系统不需要复杂的存储管理、文件系统、多任务调度等功能。一个无限循环中夹杂中断处理、轮询等功能就可以满足简单系统的应用。在这样的系统中,虽然没有操作系统,但是驱动程序还是需要有的。一般情况,对应一种硬件设备,我们会定义一个软件模块,包括.h头文件和.c文件。在.h文件中定义该硬件设备的数据结构和声明外部函数;而.c文件则实现该设备的各个功能,即设备驱动的具体实现。另外,在这种code架构中,driver驱动硬件,而driver中的API直接被AP层调用,中间并没有任何其他的中间层。说到这里,回过头来看,上面的框图就是无操作系统的driver框图。

注:比较容易出现的不规范的两种code架构:
a. 没有AP应用层,即在driver层中直接开发AP应用层;
b. 没有driver层,或者说将driver写在AP应用层。

三、基于操作系统的驱动开发

看看如下的框图,与前文中无操作系统的驱动开发相比,有以下特点:
1.与硬件沟通的driver程序还是必须要有,此时说的程序便是无操作系统的driver程序。
2.我们还需要将设备driver融入内核。正是为此,在设计driver时,还必须在设备driver中设计面向操作系统内核的接口,而这样的接口不是随便写的,是由操作系统已经规定好的。这也是基于
操作系统的driver开发的难点所在。
3.由以上两点可见,设备driver的功能不再是无操作系统时连接AP和硬件的桥梁,反而变成了连接底层硬件和操作系统内核的纽带。而AP应用层则也不再直接调用设备驱动API了,而是调用操作系统向外提供的API接口。

 有操作系统驱动结构

四、说驱动一定不是说CPU
计算机系统的硬件主要由CPU、存储器和外设组成。随着IC制造工艺的发展,芯片的集成度越来越高,往往在CPU内部就集成了存储器和外设适配器。例如,集成了UART、I2C控制器、USB控制器、SDRAM控制器、RAM、Flash等。驱动针对的对象是存储器和外设(包括CPU内部集成的存储器和外设),而不是针对CPU核。

五、Linux设备分类
Linux将存储器和外设分为3个基础大类:

字符设备

块设备

网络设备

这些设备在linux操作系统中的管理模式图如下:

linux设备驱动与整个软硬件系统的关系 

原文地址:https://www.cnblogs.com/debruyne/p/9318161.html