LDD学习笔记 -- Linux设备驱动概述
概述
设备驱动:配置和管理设备的一段代码。
负责与硬件设备进行交互,并导出应用程序和其他内核模块可以用来访问设备的接口。
- 该代码能够通过向设备发送数据来配置设备,能够处理设备的请求。
- 为用户空间提供了正确访问设备的接口,用户空间的应用程序可以和设备通信,让OS或应用程序知道如何处理设备。
用户应用程序通过write
open
read
系统调用与设备对话。
系统调用被驱动代码处理,以接触设备的各种寄存器。
内核的作用是将用户空间的系统调用 链接到 驱动的系统调用处理程序(实现)方法上。
分类
- character device drivers :字符设备,RTC、keyboard、sensors等 串行/并行Port
- block device drivers:sdmmc、eeprom、flash、harddisk
- etwork device drivers:ethernet、wifi、bluetooth
字符设备驱动
字符设备驱动顺序地从设备访问数据,一个字节一个字节,类似一串串字符。
不是一块的数据,字符驱动程序不涉及复杂的缓冲策略。当写一个字节,将会立即到设备,不会有任何中间缓冲或延迟回写。
块设备驱动
以块或块的形式处理数据。
块驱动程序应用高级的缓冲策略来读写块设备,还涉及磁盘缓存。
设备:大容量存储设备,硬盘、SDMMC、NandFlash、USB相机
设备文件
linux中使用文件技术访问设备。大多数设备都是以文件形式访问的。
设备文件是在内核启动时或设备热拔插事件期间填在/dev
目录下的一个特殊文件或一个节点,是由内核的各种驱动程序生成的。通过设备文件,用户应用和驱动之间通信。