一、为什么要有设备模型?
Linux 内核需要一种通用的方式来识别和管理种类繁多的硬件设备。这就是设备模型(device model):
- 它是 Linux 内核中用来统一管理各种设备、总线和驱动关系的基础架构。
设备模型让设备、驱动与总线之间形成清晰的组织体系,并通过统一的方式出现在内核和 sysfs 下。
你可以理解为内核里的“管理标准” 。
说明
- 之前学习的“驱动框架”,比如字符设备驱动、块设备驱动等,是写驱动时遵循的接口规范和实现流程。它们最终都要基于设备模型来注册挂载到内核。
设备模型是内核的统一对象管理架构,驱动框架是具体类型驱动代码的编写规范。
二、设备模型的核心对象
在 Linux内核 中,有三个核心概念:
- bus:总线。比如 USB、PCI、I2C、SPI 等,负责连接 CPU 和外部设备、并在其下连接众多设备。
- device:设备。表示一个具体的硬件(如 /dev/sda、/dev/input/mice 等)。
- driver:驱动。负责控制某一类设备,让硬件能够被内核识别和工作起来。
三者的关系:
- bus 下面可以有许多 device(设备),一个 device 必须属于一个 bus;
- 每个 device 由一个 driver 驱动,driver 负责操作和管理 device;
- driver 需要和 device 匹配(通过名字、ID等信息)。
三、代码中的体现
- 每个 bus/device/driver 在内核中都有结构体,例如:
struct bus_typestruct devicestruct device_driver
- 这些结构和方法定义在
/include/linux/device.h头文件中。 - 注册 bus、注册 device、注册 driver 后,内核根据规则自动把 driver 绑定到 device 上(如果匹配)。
四、和用户空间的关系
Linux 利用设备模型为每个 device/driver 生成 sysfs 节点,在 /sys/bus/、/sys/devices/、/sys/class/ 等目录下呈现出来,方便内容可视化和调试。