目录简述
一、设备驱动的角色
①充当硬件和应用软件之间的桥梁
②具体任务:读写设备寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射。
③应用软件调用驱动,驱使硬件完成要求的任务。
二、有无操作系统时的设备驱动
(1)无操作系统时
一般是以.h和.c来定义一个软件模块,这里应用软件直接访问设备驱动的接口。
(2)有操作系统时
①无操作系统时的硬件操作还是必需的
②将驱动融入内核,设计面向操作系统内核的接口,对外呈现为操作系统的API,不再提供接口。
注:应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。在实际工作中内核抽象了相关细节。驱动为连接硬件和内核的桥梁。
③操作系统的作用:处理多并发的任务以及存储管理方面的问题。
内核和设备系统之间关系详解图如下:
三、Linux设备分类
计算机系统的硬件主要由CPU、存储器和外设组成。Linux将存储器和外设分为三个基础大类,字符设备、块设备以及网络设备。
(1)字符设备
①串行顺序依次进行访问的设备。
②块设备不经过系统的快速缓冲
③触摸屏、磁带驱动器、鼠标等
(2)块设备
①可以按照任意顺序进行访问,以块为单位进行操作
②硬盘、eMMC等块设备上可以构建文件系统
③块设备经过系统的快速缓冲
(3)网络设备
①面向数据包的接收和发送而设计
②内核与网络设备的通信,主要还是用套接字接口。
四、Linux设备驱动在整个系统的关系
(1)除网络设备外,字符设备与块设备都被映射到Linux文件系统的文件和目录,可以通过文件系统的系统调用接口(open/close/read/write)
(2)访问块设备有两种方式,如图一种原始方式,一种构建文件系统(FAT/EXT4/BTRFS)后通过文件访问。
(3)Linux块子系统 & MTD系统
①Linux块子系统面向磁盘 & MMC/SD工作,在其上可建立FAT/EXT等文件系统
②MTD系统面向Nor & Nand Flash工作,在其上可建立YAFFS2等文件系统