devtmpfs in linux
devtmpfs in Linux
sysfs 和 /dev
linux kernel 在启动阶段后期,分析设备树匹配相应的driver在用sysfs构建系统的设备和驱动的连接和分类信息。在sysfs devices下会有设备major 和minor信息。
/dev目录下是系统中所有的设备节点,设备节点就是设备文件,操作设备文件就是操作具体的设备。设备文件分为字符设备和块设备文件。创建这些文件的方式在古早时期就是mknod 命令,它参数就是设备文件名称和major minor号。
简单来说,sysfs是系统驱动和设备信息管理和展示的虚拟文件系统。/dev 是所有设备文件存放的目录。他们之间的关系是,设备文件的major minor 号可以从sysfs中找到。
/dev 下设备文件是何时创建的?
在没有devtmpfs时,系统的启动必须的设备文件在制作文件系统时用mknod 或者makedevs创建,设备的major 和minor 信息只有通过以下方式获得
获取方式:
- 查 内核官方文档 Documentation/admin-guide/devices.txt
- 查 现有 /dev 节点 (ls -l /dev)
- 查 驱动源码
- 或使用老系统的 MAKEDEV 脚本
其他设备节点在系统启动后由udev/mdev 这个用户程序扫描sysfs 挂载目录自动在/dev下创建。
系统支持的热插拔设备,如SDCARD, usb 设备也是由udev支持设备文件节点自动创建。
devtmpfs
devtmpfs 的出现解决了在系统启动前必须手动创建设备节点的问题。系统启动必须的设备和其他设备只要设备和驱动匹配成功,在启动阶段就在devtmpfs中创建好了相应的节点。在启动之后也不需要udev这样的用户程序去自动创建节点。
下边是devtmpfs 和sysfs的对比
sysfs:设备和内核对象的“信息树”
- 挂载点:通常挂载在 /sys
本质:虚拟文件系统(VFS),由内核提供,用来暴露内核内部数据结构给用户空间。 - 作用:
展示 设备、驱动、总线、模块 等内核对象的层次结构。
提供 只读或可写属性文件,用户空间程序可以读取设备状态或写入配置。 - 特点:
只提供信息,不直接提供设备节点。
例如:
ls /sys/class/net/
ls /sys/block/
cat /sys/class/net/eth0/address
这些都是 内核对象属性,而不是 /dev 下的设备文件。
devtmpfs:自动生成设备节点的文件系统
- 挂载点:通常挂载在 /dev
- 本质:虚拟文件系统,由内核自动创建 设备节点(character/block devices)。
- 作用:
在内核探测到硬件设备时,自动创建对应的 /dev 节点。
解决了以前用户空间工具(如 mdev 或 udev)手动创建设备节点的需求。 - 特点:
设备节点的 主次设备号 和 类型 从内核获取。
可以配合 udev 动态设置权限、符号链接等。
两者的关系
| 特性 | sysfs | devtmpfs |
|---|---|---|
| 类型 | 虚拟文件系统(信息树) | 虚拟文件系统(设备节点树) |
| 挂载点 | /sys | /dev |
| 内容 | 内核对象信息(只读或可写属性) | 真实设备节点(字符/块设备) |
| 自动生成 | 内核创建对象信息 | 内核创建节点 |
| 用户空间依赖 | 用户可以读取/写入配置 | 用户空间通常用 udev 进一步管理 |
关键点:
devtmpfs 的生成依赖 内核已经探测到的设备对象。
这些设备对象信息本身就是在 sysfs 中体现的:
例如,内核探测到的 tty 设备:
/sys/class/tty/tty0 → 内核对象信息
/dev/tty0 → devtmpfs 创建的字符设备节点
可以理解为:
sysfs 提供“设备对象信息”,
devtmpfs 基于这些信息自动生成“对应的 /dev 节点”
devtmpfs 的内核支持需要开启
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
这两个选项。
更多推荐




所有评论(0)