dirvt char / platform / module / drm

Linux 设备驱动模型:从 kobject 到 udev

2026-06-16 · model

很多人写驱动是从 file_operations 开始的,但要真正理解一个设备如何从硬件出现到 /dev 下的节点,需要先看懂内核的统一设备模型:用一套树状结构把总线、设备、驱动组织起来,并暴露给用户态。

kobject 与 sysfs

kobject 是这套模型的原子。每个 kobject 在 /sys 下对应一个目录,属性对应目录里的文件。例如 cat /sys/class/graphics/fb0/name 读到的就是某个属性的 show 回调。kset 是 kobject 的集合,构成 sysfs 层级。

调试驱动时 /sys 往往比散落的 /proc 节点更清晰:它直接映射内核对象之间的从属关系。

bus / device / driver

device 注册到 bus 后,bus 的 match() 遍历 driver;匹配成功调用 probe()。PCI 靠 vendor/device ID,platform 靠名字或设备树 compatible

uevent 到 udev

device 注册时内核通过 netlink 发 uevent;udevd 按规则创建 /dev 节点、设权限、改名。所以多数节点是用户态根据事件建的,不是驱动里直接 mknod

lsmod
modinfo <module>
udevadm monitor
udevadm info -a /dev/sda

把这条链路理顺,写驱动时就能清楚:注册到哪条总线、匹配什么、用户态怎样看到设备。

← index