linux 设备模型

 

设备种类

graph LR;
    X(模型)
    X-->A(设备 device)-->A1(挂载在某个总线的物理设备)
    X-->B(驱动 driver)-->B1(与特定设备相关软件, 负责初始化设备及提供操作方式)
    X-->C(总线 bus)-->C1(负责管理挂载对应总线的设备及驱动, 如platform 总线、SPI总线、I2C总线)
    X-->D(类 class)-->D1(具有相同功能的设备)

字符设备

字符设备只能逐字节读写, 面向流, 不能随机读取设备内存中某一数据, 读取数据需要按照先后数据

常见字符设备有鼠标、键盘、串口、控制台、LED设备等

块设备

块设备可从设备任意位置读取一定长度数据, 常见块设备包括电脑硬盘、SD卡、U盘、光盘等

网络设备

网络事务都经过一个网络接口形成, 即一个能够和其他主机交换数据的设备

访问网络接口方法仍然是给它们分配一个唯一名字(如eth0), 但这个名字在文件系统中不存在对应节点

常见网络设备包括网卡设备、蓝牙设备等

设备管理

linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备和块设备

linux下各种硬件设备以文件形式存放于/dev目录下, 可用ls /dev 查看

linux把对硬件操作全部抽象成对文件操作

在设备管理中, 除了设备类型外, 内核还需要一对被称为主从设备号参数, 才能唯一标识一个设备

主设备号

用于标识驱动程序, 相同主设备号使用相同驱动程序, 例如: S3C2440 有串口、LCD、触摸屏三种设备, 其主设备号各不相同

从设备号

用于标识同一驱动程序下不同硬件

例IDE设备, 主设备号用于标识该硬盘, 从设备号用于标识每个分区, 2440有三个串口, 每个串口主设备号相同, 从设备号用于区分具体属于那一个串口

/dev

  • /dev/null

空设备, 也称为位桶($bit bucket$)、回收站、无底洞, 向它输出任何数据都会被抛弃

若不想让消息以标准输出显示或写入文件, 那么可以将消息重定向到位桶

  • /dev/zero

输入设备, 可用于向设备或文件无限写入字符串0, 初始化文件