1. 概念
控制硬件设备能够实现特定功能的软件代码称为硬件
2. 驱动的分类以及区别
更具驱动代码是否依赖于操作系统实现硬件的控制将驱动分为裸机驱动和系统驱动
2.1 裸机驱动
不依赖于操作系统的内核,来实现硬件控制的裸机软件,这种驱动结构比较简单,通常由开发者独立(不依赖其他库)完成,但是实现的功能也比较单一
2.2 系统驱动
系统驱动的代码需要依赖操作系统内核提供的各种接口来实现硬件的控制工作,如果基于系统驱动实现硬件的控制工作,在用户进程中我们可以通过某种方法同时进行多个硬件的控制,实现的功能也更复杂一些。但是系统驱动需要依赖操作系统内核实现,无法由驱动开发工作者独立完成
3. Linux 设备驱动在 Linux 操作系统中的层次
3.1 操作系统的功能
向上提供接口,向下管理硬件
操作系统提供的接口有哪几类?
文件管理,进程管理,网络管理,设备管理
3.2 框图
│ app/shell命令 --> 系统调用 用户层 ─────────┼────────────────────────────────────── │ ┌─────┼────────────────────────────┐ │ │ 文件管理 进程管理 │ │ │ 网络管理 内存管理 │ 内核空间 │ │ 设备管理 │ └─────┼─────────────────────────────┘ │ 驱动属于设备管理功能范畴 ─────────┼────────────────────────────────────── │ 鼠标,键盘,eMMC,网卡 硬件层 │ ▼
4. Linux 系统驱动的类型
Linux 系统驱动的类型要根据驱动的设备类型不同进行区分:
- c(字符设备):以字节流的形式进行访问而且只能顺序访问的设备叫做字符设备
- 例如:鼠标,键盘,摄像头
- b(块设备):以块(512字节)为单位进行随机访问的设备
- 例如:eMMC,U盘,硬盘
- 网络设备:对于网络设备,Linux 内部没有对应的设备文件,想要通过网卡驱动来驱动网卡设备,用户空间需要套接字来帮助实现