Linux mdev -s 设备节点初始化
Linux mdev -s介绍
mdev
是 BusyBox 套件中提供的一个轻量级的 设备管理工具,主要用于嵌入式 Linux 系统或其他资源受限的环境。它的作用类似于标准的 udev
,负责在 /dev
目录下动态创建和删除设备节点文件(device nodes),以反映系统中实际存在的硬件设备。
mdev -s
是 mdev
命令的一个特定用法,通常在系统启动过程中执行,用于初始化 /dev
目录。
mdev -s
的作用详解
扫描
/sys
文件系统:-s
选项告诉mdev
扫描整个/sys
文件系统(通常挂载在/sys
目录下)。/sys
是一个虚拟文件系统,由内核提供,它以结构化的方式暴露了系统中所有设备、总线、驱动程序和内核模块的信息。每个设备在/sys
下都有一个对应的目录,包含其属性(如设备号、厂商ID、产品ID等)。
创建初始设备节点:
- 在扫描过程中,
mdev -s
会遍历/sys
目录树。 - 对于
/sys
中发现的每一个具有dev
属性的设备(dev
属性包含了设备的主设备号和次设备号,格式如254:0
),mdev
会:- 在
/dev
目录下创建对应的设备节点文件(例如/dev/sda
,/dev/ttyS0
,/dev/input/event0
等)。 - 根据
/sys
中的信息(如设备类、子系统)和/etc/mdev.conf
配置文件(如果存在),设置设备节点的权限(用户、组、读写权限)和所有权。 - 根据
/etc/mdev.conf
中的规则,执行可能关联的命令(例如在设备出现时加载特定固件、创建符号链接等)。
- 在
- 在扫描过程中,
解决启动依赖:
- 在系统启动的早期阶段(通常在挂载根文件系统之后、执行初始化脚本之前),
/dev
目录通常是空的或者只包含一些最基本的静态设备节点(如/dev/console
,/dev/null
)。 - 许多关键的守护进程和初始化脚本需要访问特定的设备节点(如磁盘分区
/dev/sda1
、串口/dev/ttyS0
、随机数生成器/dev/urandom
等)才能正常启动。 mdev -s
在这个关键时刻运行,确保所有内核已经检测到的硬件设备在/dev
下都有对应的、权限正确的设备节点可用,为后续启动步骤提供必要的设备访问能力。
- 在系统启动的早期阶段(通常在挂载根文件系统之后、执行初始化脚本之前),
典型使用场景
系统启动脚本: 这是
mdev -s
最常见的地方。通常在/etc/inittab
或者/etc/init.d/rcS
这样的早期初始化脚本中调用。例如,在 BusyBox 的inittab
中你可能会看到这样一行:1
::sysinit:/bin/mdev -s
这确保了在系统进入多用户模式或运行其他初始化脚本之前,
/dev
目录已经被正确填充。手动初始化
/dev
: 如果你怀疑/dev
目录下的设备节点不完整或损坏(例如在动态添加了许多设备之后),或者在一个非常规启动的环境中,可以手动以 root 身份运行mdev -s
来重建/dev
。
与 udev
的区别
- 轻量级:
mdev
是 BusyBox 的一部分,设计目标是小巧、快速、占用资源少,非常适合嵌入式系统。 - 依赖 BusyBox: 需要 BusyBox 环境支持。
- 配置 (
/etc/mdev.conf
): 规则语法比udev
的规则文件简单,但功能也相对有限。 - 热插拔支持:
mdev
也可以配置为响应内核的uevent
(通常在/proc/sys/kernel/hotplug
设置为/sbin/mdev
),实现设备热插拔时动态创建设备节点(这是mdev
不加-s
时的默认行为)。mdev -s
则专注于启动时的静态初始化。 - 功能:
udev
功能更强大、更复杂(持久化命名、更丰富的规则、集成 D-Bus 等),是现代桌面和服务器发行版的标准。
总结
mdev -s
是嵌入式 Linux 系统中(特别是使用 BusyBox 的)一个关键的启动时命令。它的核心任务是:在系统启动早期,通过扫描 /sys
文件系统,在 /dev
目录下自动创建所有内核已识别设备的设备节点文件,并设置正确的权限和所有权。 这为后续的系统服务和应用程序访问硬件设备奠定了必要的基础。理解它在启动流程中的作用对于管理和调试嵌入式系统非常重要。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Helloeuler!