1. 设备驱动程序原理
1.1 I/O 设备的抽象
<aside>
💬 I/O 设备的主要功能:输入和输出
</aside>
- “能够读 (read) 写 (write) 的字节序列 (流或数组)”
- 常见的设备都满足这个模型
- 终端/串口 - 字节流 Byte Stream
- 打印机 - 字节流 (例如 PostScript 文件)
- 硬盘 - 字节数组 (按块访问) Byte Array
- GPU - 字节流 (控制) + 字节数组 (显存)
<aside>
💬 操作系统:设备 = 支持各类操作的对象 (文件)
</aside>
- read - 从设备某个指定的位置读出数据
- write - 向设备某个指定位置写入数据
- ioctl - 读取/设置设备的状态 - 控制
1.2 设备驱动程序
把系统调用 (read/write/ioctl/...) “翻译” 成与设备寄存器的交互
就是一段普通的内核代码
但可能会睡眠 (例如 P 信号量,等待中断中的 V 操作唤醒)
例子:/dev/
中的对象
- /dev/pts/[x] - pseudo terminal
- /dev/zero - “零” 设备
- /dev/null - “null” 设备
- /dev/random, /dev/urandom - 随机数生成器
1.3 字节流/字节序列抽象的缺点