输入输出设备
输入输出设备
输入输出设备
Everything is a File
文件:有 “名字” 的数据对象
字节流 (终端,random)
字节序列 (普通文件)
文件描述符
指向操作系统对象的 “指针”
Everything is a file
通过指针可以访问 “一切”
对象的访问都需要指针
open, close, read/write (解引用), lseek (指针内赋值/运算), dup (指针间赋值)
输入输出设备
没那么简单!
让我们插个优盘试试……
优盘的文件系统会自动 “出现”
但你是专业人士
看看 /dev/ 是不是发生了一些什么变化
水面下的冰山
/dev/ 下的对象不会凭空创建
udev
- /lib/udev/rules.d
udisks2 - 这才是真正执行 mount 的程序
输入输出设备
今天的主角:输入输出设备
你实际上 “看到” 的计算机
输入输出设备
“计算” 和 “物理世界” 之间的桥梁
I/O 设备 =
一个能与 CPU 交换数据的接口/控制器
就是 “几组约定好功能的线” (寄存器)
通过握手信号从线上读出/写入数据
给寄存器 “赋予” 一个内存地址 (Address Decoder)
CPU 可以直接使用指令 (in/out/MMIO) 和设备交换数据
是的,就这么简单
输入输出设备
实现输入/输出
例子:发射核弹
使计算机能
感知外部状态
(眼睛、耳朵)、
对外实施动作
(手)
输入输出设备
答案:一根线、一条指令 (树莓派上就有)
GPIO (General Purpose Input/Output)
极简的模型:Memory-mapped I/O 直接读取/写入电平信号
输入输出设备
GPIO: 一根可以读写数据的线
led = LED(
2
) led.on(); time.sleep(
0.03
); led.off()
真正的核弹发射器也是类似的原理……