软件与硬件互补
硬件是底层基础,是所有软件得以运行的平台,代码最终会落实为硬件上的组合逻辑与时序逻辑;
软件则实现了具体应用,它按照各种不同的业务需求而设计,满足了用户的需求。
硬件较固定,软件则很灵活
设备驱动
硬件和软件之间的纽带
设备驱动与底层硬件直接打交道,按照硬件设备的具体工作方式读写设备寄存器,完成设备的轮询、中断处理、DMA 通信,进行物理内存向虚拟内存的映射,最终使通信设备能够收发数据,使显示设备能够显示文字和画面,使存储设备能够记录文件和数据。
通过设备驱动应用软件只需要调用系统软件的应用编程接口(API)就可让硬件去完成要求的工作
没有操作系统
设备驱动的接口被直接提交给了应用软件工程师,应用软件直接访问了设备驱动的接口
存在操作系统
设备驱动变成了连接硬件和内核的桥梁,操作系统通过给设备驱动制造麻烦来给上层应用提供便利
操作系统作用
多任务并发、、、内存管理机制
驱动针对的对象
是存储器和外设,Linux 将存储器和外设分为3 个基础大类,
字符设备-----必须以串行顺序依次进行访问的设备,如触摸屏、磁带驱动器、鼠标;
块设备--------任意顺序进行访问,以块为单位进行操作,如硬盘、软驱;
网络设备------面向数据包的接收和发送。
设备驱动与整个软硬件系统的关系
字符设备与块设备都被映射到Linux 文件系统的文件和目录,通过文件系统的系统调用接口open()、write()、read()、close()等函数即可访问字符设备和块设备,C库函数中的fopen()、fwrite()、fread()、fclose()分别会调用操作系统API的open()、write()、read()、close()函数。
应用程序、linux内核、驱动程序、硬件的关系
linux内核分为5大部分:多任务(进程)管理、内存管理、文件系统管理、设备管理、网络管理;
每一部分都有承上下的作用,对上提供API接口,提供给应用开发工程师使用;
对下通过驱动程序屏蔽不同的硬件构成,完成硬件的具体操作。