Linux 文件系统与设备文件系统分析1(基于Linux6.6)---udev 设备文件系统介绍
一、Linux设备文件系统概述
1. 设备文件的概念
在 Linux 中,设备(硬件资源,如硬盘、键盘、鼠标、串口、打印机等)被表示为 设备文件。这些设备文件位于 /dev
目录下。设备文件分为两种类型:
-
字符设备文件(Character Devices):这种设备是按字符流的方式与设备进行交互的,数据按字节(或字符)顺序传输,常见的设备包括终端、串口、键盘、鼠标等。例如,
/dev/ttyS0
就是一个串口设备文件,/dev/tty1
代表一个终端设备。 -
块设备文件(Block Devices):这种设备是按块(通常是512字节或4096字节)与设备进行交互的,数据以块为单位传输,常见的设备包括硬盘、固态硬盘(SSD)、U盘等。例如,
/dev/sda
代表第一个硬盘,/dev/sdb1
代表第二个硬盘的第一个分区。
设备文件提供了一个接口,通过该接口,用户空间的程序可以通过标准的系统调用(如 open
、read
、write
等)与硬件设备进行通信。
2. 设备文件系统的作用
-
抽象硬件设备:设备文件系统为操作系统提供了一种统一的方式来访问各种硬件设备,而不需要用户关心硬件设备的具体细节。无论设备是磁盘、显示器还是网络接口,用户都可以通过文件接口来与这些设备进行交互。
-
设备管理和动态加载:Linux 通过设备文件系统管理设备的创建和销毁。使用动态设备文件系统(如 udev)时,设备文件会在设备被插入或移除时自动创建和删除。
-
用户空间与内核空间的交互:设备文件系统使得用户空间的应用程序可以通过文件操作(如读取、写入、控制)与内核的设备驱动进行交互,而不需要直接操作硬件。
3. devfs 与 udev
在早期的 Linux 版本中,devfs 是一种内核自带的设备文件系统,它用于自动创建设备文件,并将其挂载到 /dev
目录中。但 devfs 已经被更为强大的 udev 取代。
-
udev 是现代 Linux 系统中用于管理设备文件的守护进程。它会根据系统配置和规则在
/dev
目录下动态地创建和删除设备文件。当设备插入或移除时,udev
会自动检测并更新设备文件。udev
提供了更灵活的设备管理方式,允许根据硬件属性(如设备的序列号、厂商 ID、设备类型等)来命名设备文件,从而避免了 devfs 在命名设备时的混乱。
4. 设备文件系统的工作原理
-
设备文件的创建:当新设备被添加到系统时,
udev
会根据设备的硬件信息创建相应的设备文件。例如,插入一个 USB 存储设备时,udev
会为它创建设备文件(例如/dev/sdb
)。 -
设备文件的权限和访问:每个设备文件都有不同的权限,通常需要特定的用户或组权限才能访问。例如,只有 root 用户或者属于特定组的用户才能读写某些敏感设备(如硬盘、网络设备等)。
-
设备文件的命名:设备文件的命名规则通常与硬件的名称、类型和位置相关,
udev
提供了强大的命名规则,可以根据设备的特征生成符合需求的名称。 -
设备文件的挂载:与传统文件系统一样,设备文件系统可以挂载到文件系统树中(通常是
/dev
目录)。在这个目录下,所有设备文件都可以像普通文件一样进行访问。
5. 设备文件系统的示例
在 /dev
目录中,常见的一些设备文件包括:
-
字符设备文件:
/dev/ttyS0
:串口设备(通常为第一个串口设备)/dev/tty1
:第一个虚拟终端设备
-
块设备文件:
/dev/sda
:第一个硬盘/dev/sdb1
:第二个硬盘的第一个分区
-
网络设备文件:
/dev/eth0
:第一个以太网设备(旧版本的设备命名)
设备文件也可以用于访问各种硬件设备,例如打印机、音频卡、显卡、USB 设备等。
二、关于udev
udev(用户空间设备管理器)是现代 Linux 系统中用于管理设备文件的守护进程。它负责动态地创建和管理 /dev
目录中的设备文件,同时提供对设备的热插拔支持。udev 使得 Linux 系统可以根据硬件的特征(如设备类型、厂商信息、序列号等)动态生成设备文件,并且在设备插入或移除时做出响应。
udev 是 systemd
一部分,虽然它曾经作为独立的项目存在,但现在它通常作为 systemd
的一个子系统运行。udev 的作用是根据硬件事件(例如硬件设备的插入、移除或系统启动时的设备检测)来动态管理 /dev
中的设备节点。
1. udev 的工作原理
udev 的工作基于以下几个核心步骤:
-
设备事件监听:udev 监听内核事件(由
kernel
通过netlink
套接字通知)。这些事件通常是硬件的插入、移除、重命名等操作。 -
设备规则匹配:当检测到设备事件时,udev 会根据系统配置文件中的规则(
/etc/udev/rules.d/
和/lib/udev/rules.d/
目录中的规则)对事件进行匹配。规则文件定义了如何为设备分配名称、权限以及其他属性。 -
设备节点创建/删除:当设备插入时,udev 根据匹配到的规则为设备创建设备文件,并设置适当的权限;当设备移除时,它会自动删除设备文件。
-
设备属性管理:udev 还可以设置设备的权限、所属组、环境变量等,以便系统和用户能够方便地访问设备。
2. udev 配置文件和规则
udev 的行为由一组规则文件控制,这些规则文件包含设备匹配模式及其相应的动作。规则文件通常位于两个目录中:
/etc/udev/rules.d/
:这是用户自定义的规则文件目录,用户可以在此目录中添加自己的规则。/lib/udev/rules.d/
:这是系统默认的规则文件目录,包含了大多数标准设备规则,通常由系统包提供。
每个规则文件的规则格式如下:
# 规则格式示例
KERNEL=="sda", NAME="mydisk" # 按照设备的名称进行匹配,创建 /dev/mydisk
ATTR{vendor}=="ATA", SYMLINK+="mydisk1" # 基于属性匹配,创建符号链接
规则文件的常见字段
- KERNEL:基于设备的名称进行匹配(如
sda
,ttyS0
)。 - ATTR:基于设备的属性进行匹配(如
vendor
、serial
等)。 - NAME:指定设备文件的名称。
- SYMLINK:为设备创建符号链接。
- MODE:设置设备文件的权限。
- OWNER、GROUP:指定设备文件的拥有者和所属组。
3. udev 的特点
- 动态管理设备文件:udev 在设备插入或移除时动态地创建和删除设备节点,这样
/dev
目录中的设备文件始终反映系统当前的硬件状态。 - 支持热插拔:udev 支持硬件设备的热插拔。例如,当插入一个 USB 设备时,udev 会为其创建设备文件并执行相应的操作。
- 灵活的规则引擎:通过编写规则,udev 允许用户根据设备的硬件属性(如厂商 ID、产品 ID、序列号等)来命名设备文件、设置权限等。
- 权限和所有权控制:udev 允许用户在规则中设置设备文件的权限和所有权,从而为不同用户或用户组提供对设备的访问控制。
- 设备命名:udev 允许基于硬件特征(如设备的序列号、型号等)生成友好的设备文件名称,避免了传统的固定名称(如
sda
、sdb
)可能带来的问题。
4. udev 配置和使用示例
- 创建一个规则文件:假设你想为一个特定的 USB 设备创建一个符号链接,规则文件内容如下:
# 规则文件:/etc/udev/rules.d/10-usb.rules
SUBSYSTEM=="block", ATTRS{idVendor}=="0781", ATTRS{idProduct}=="5581", SYMLINK+="my_usb"
这条规则的意思是:对于所有类型为 block
的设备(即存储设备),当设备的 idVendor
为 0781
和 idProduct
为 5581
时,创建一个名为 /dev/my_usb
的符号链接。
- 重新加载规则:当修改完规则文件后,你可以通过以下命令重新加载
udev
规则:
udevadm control --reload
- 查看设备信息:使用
udevadm
工具,可以查询当前设备的详细信息:
udevadm info --name=/dev/sda --attribute-walk
该命令会列出与 /dev/sda
设备相关的所有属性信息。
5. udev 常用命令
-
udevadm monitor:实时监听系统的设备事件,输出有关设备插入和移除的详细信息。
udevadm monitor
-
udevadm info:获取设备的详细信息。
udevadm info --name=/dev/sda
-
udevadm trigger:触发设备事件,通常用于手动更新设备文件或规则。
udevadm trigger
-
udevadm control --reload:重新加载 udev 规则和配置。
udevadm control --reload
三、udev和devfs设备文件的对比
1. 基本概念
-
udev
:udev
是 Linux 的用户空间设备管理器,用于动态管理/dev
目录中的设备文件。它与内核事件通知机制结合工作,根据硬件的插拔、变化等动态地生成、修改和删除设备文件。udev
在用户空间运行,并通过规则文件来自定义设备的名称、权限和其他属性。 -
devfs
:devfs
(设备文件系统)是 Linux 的一个虚拟文件系统,提供了一个机制来管理/dev
目录中的设备文件。与udev
不同,devfs
是内核空间的文件系统,它动态创建和删除设备文件,无需额外的用户空间程序(如udev
)。但是,devfs
的设计较为简单,并且缺少灵活的设备管理功能。
2. 工作原理
-
udev
:udev
通过监听内核事件来动态管理设备文件。当硬件设备被插入或移除时,内核会通过netlink
套接字通知udev
。udev
根据硬件信息(如设备类型、厂商、序列号等)生成设备文件,并根据预定义的规则设置文件的权限、所有者等属性。udev
的设备文件管理是基于规则的,可以进行精细的定制化配置(如设备名称的生成、符号链接、权限管理等)。
-
devfs
:devfs
是一种内核空间的机制,它直接管理/dev
目录下的设备文件。设备文件在系统启动时由内核自动创建,并且在设备插入或移除时,devfs
会自动更新设备节点。devfs
的设备文件命名和管理比较简单,且没有像udev
那样的规则引擎,因此灵活性和可定制性较低。
3. 设备命名与规则
-
udev
:udev
允许用户定义规则,根据硬件的属性(如idVendor
、idProduct
、serial
等)来为设备创建文件。例如,你可以为某个特定 USB 设备创建一个符号链接,或者根据设备的序列号来创建具有更友好名称的设备文件。- 规则的灵活性使得
udev
可以支持更复杂的设备管理需求。例如,可以设置设备文件的权限、所有者、组等。
-
devfs
:devfs
在设备插拔时自动创建和删除设备文件,但它没有类似udev
那样的规则引擎来定制设备的名称或权限。设备文件的命名通常是固定的(例如sda
,ttyS0
等),没有对用户进行细粒度的控制。devfs
的设备文件管理较为简单,适合于小型系统或不需要复杂设备管理的场景。
4. 热插拔支持
-
udev
:udev
原生支持热插拔设备的管理。当设备插入或移除时,udev
会立即创建或删除相应的设备文件,并根据规则动态调整设备属性。udev
还可以触发一些额外的动作(如运行脚本、发送通知等),以便系统或管理员可以做进一步的处理。
-
devfs
:devfs
也支持设备的热插拔。当设备插入或移除时,devfs
会动态更新/dev
目录中的设备文件。但是,由于缺乏像udev
那样的规则系统,devfs
的热插拔管理没有那么灵活。- 在设备管理上,
devfs
主要关注基础的设备文件管理,不支持复杂的设备行为处理。
5. 灵活性与可定制性
-
udev
:udev
提供了极大的灵活性。系统管理员可以通过编写规则来定义设备文件的名称、权限、符号链接等,甚至可以基于多个属性来匹配设备。这使得udev
非常适合用于复杂的设备管理任务。- 例如,可以根据设备的型号、序列号、厂商信息等动态命名设备文件,甚至根据设备的插入顺序来设置不同的文件权限。
-
devfs
:devfs
的灵活性相对较差。它主要依赖内核进行设备文件的管理,没有提供像udev
那样的自定义规则引擎,用户不能轻松控制设备文件的命名或权限。设备管理相对简单,适用于设备数量较少的简单场景。
6. 性能与资源消耗
-
udev
:- 由于
udev
运行在用户空间,它需要更多的系统资源来管理设备文件。每次设备事件发生时,udev
会在用户空间进行处理,这可能会对系统性能产生一定的影响,尤其是在设备插拔非常频繁的情况下。 - 但是,现代 Linux 系统中,
udev
的性能足够高,可以满足大多数需求。
- 由于
-
devfs
:devfs
作为内核空间的设备管理机制,性能较高,因为它直接由内核管理,不需要用户空间的参与。对于设备插拔事件,devfs
的响应速度通常比udev
快。- 然而,
devfs
的功能较为简单,缺乏灵活性。
7. 历史与发展
-
udev
:udev
在 Linux 内核 2.6 版本开始引入,逐渐取代了早期的devfs
和mdev
。它的设计目标是提供一个更灵活、可定制的设备管理机制,以支持复杂的硬件环境和动态设备管理。- 目前,
udev
已经成为现代 Linux 系统中默认的设备管理机制,并与systemd
紧密集成。
-
devfs
:devfs
在早期的 Linux 内核版本中曾是设备文件的管理方式。它简化了设备管理,但缺乏灵活性和扩展性。- 随着
udev
的引入和发展,devfs
的使用逐渐减少,并且在许多 Linux 发行版中已经被废弃。
8. 总结
特性 | udev | devfs |
---|---|---|
工作空间 | 用户空间 | 内核空间 |
设备管理 | 动态、基于规则 | 静态、简单的自动管理 |
灵活性 | 高,支持自定义规则、命名、权限等 | 低,缺少规则引擎、定制化功能 |
热插拔支持 | 完全支持,并可执行脚本等动作 | 基本支持,缺乏高级管理功能 |
性能 | 较低(用户空间) | 较高(内核空间) |
设备命名 | 灵活,基于规则可以定制 | 固定命名,不支持自定义规则 |
历史 | 现代 Linux 系统默认设备管理方式 | 早期 Linux 系统的设备管理方式,已逐渐弃用 |
四、udev 的工作流程图
前面提到设备文件系统udev的工作过程依赖于sysfs文件系统。udev文件系统在用户空间工作,它可以根据sysfs文件系统导出的信息(设备号(dev)等),动态建立和删除设备文件。
sysfs文件系统特点:sysfs把连接在系统上的设备和总线组织成为一个分级的目录及文件,它们可以由用户空间存取,向用户空间导出内核数据结构以及它们的属性,这其中就包括设备的主次设备号。
那么udev 是如何建立设备文件的呢?
a -- 对于已经编入内核的驱动程序
当被内核检测到的时候,会直接在 sysfs 中注册其对象;对于编译成模块的驱动程序,当模块载入的时候才会这样做。一旦挂载了 sysfs 文件系统(挂载到 /sys),内建的驱动程序在 sysfs 注册的数据就可以被用户空间的进程使用,并提供给 udev 以创建设备节点。
udev 初始化脚本负责在 Linux 启动的时候创建设备节点,该脚本首先将 /sbin/udevsend 注册为热插拔事件处理程序。热插拔事件本不应该在这个阶段发生,注册 udev 只是为了以防万一。
然后 udevstart 遍历 /sys 文件系统(其属性文件dev中记录这设备的主设备号,与次设备号),并在 /dev 目录下创建符合描述的设备文件。
例如,/sys/class/tty/vcs/dev 里含有"7:0"字符串,udevstart 就根据这个字符串创建主设备号为 7 、次设备号为 0 的 /dev/vcs 设备。udevstart 创建的每个设备的名字和权限由 /etc/udev/rules.d/ 目录下的文件指定的规则来设置。如果 udev 找不到所创建设备的权限文件,就将其权限设置为缺省的 660 ,所有者为 root:root 。
b -- 编译成模块的驱动程序
前面我们提到了"热插拔事件处理程序"的概念,当内核检测到一个新设备连接时,内核会产生一个热插拔事件,并在 /proc/sys/kernel/hotplug 文件里查找处理设备连接的用户空间程序。udev 初始化脚本将 udevsend 注册为该处理程序。当产生热插拔事件的时候,内核让 udev 在 /sys 文件系统里检测与新设备的有关信息,并为新设备在 /dev 里创建项目。
大多数 Linux 发行版通过 /etc/modules.conf 配置文件来处理模块加载,对某个设备节点的访问导致相应的内核模块被加载。对 udev 这个方法就行不通了,因为在模块加载前,设备节点根本不存在。为了解决这个问题,在 LFS-Bootscripts 软件包里加入了 modules 启动脚本,以及 /etc/sysconfig/modules 文件。通过在 modules 文件里添加模块名,就可以在系统启动的时候加载这些模块,这样 udev 就可以检测到设备,并创建相应的设备节点了。如果插入的设备有一个驱动程序模块但是尚未加载,Hotplug 软件包就有用了,它就会响应上述的内核总线驱动热插拔事件并加载相应的模块,为其创建设备节点,这样设备就可以使用了。
以下是 udev
如何建立设备文件的详细步骤:
1. 内核事件通知(udev 与内核交互)
当硬件设备插入或移除时,Linux 内核会通过 netlink
套接字发送设备事件通知。这个通知包含有关硬件设备的详细信息,比如设备的类型、ID、连接方式等。
- 设备插入时,内核会通过
udevadm
向udev
发送设备事件,通知设备驱动和系统有新的硬件设备被插入。 - 设备移除时,内核也会发送类似的事件,通知
udev
删除相关的设备文件。
2. udev 监听设备事件
udev
在后台运行,监听来自内核的设备事件。当一个设备事件(如插拔)发生时,udev
会收到该事件,并开始处理。事件的内容通常包括设备的类型、标识符、序列号等信息。
3. 设备规则匹配
udev
使用 规则文件 来处理不同的设备事件。规则文件位于 /etc/udev/rules.d/
和 /lib/udev/rules.d/
目录中(按优先级加载)。这些规则指定了如何根据设备的属性来命名和配置设备文件。
规则文件是由一系列的条件和动作组成的。常见的规则格式如下:
KERNEL=="sda", NAME="mydisk"
规则解释:
KERNEL=="sda"
:匹配设备的内核名称为sda
的设备(通常是硬盘)。NAME="mydisk"
:如果匹配成功,udev
会为该设备创建一个名为mydisk
的设备文件。
此外,udev
还可以使用设备的其他属性(如设备的厂商ID、产品ID、序列号等)进行更细粒度的匹配。例如,USB 设备的规则可能是:
SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", NAME="usb_device"
这条规则表示,当一个 USB 设备被插入,并且其厂商ID为 1234
,产品ID为 5678
时,udev
会为其创建名为 usb_device
的设备文件。
4. 创建设备文件
当 udev
根据规则确定如何命名设备文件后,它会在 /dev/
目录下创建对应的设备文件。设备文件是对硬件设备的访问接口,通常会有一个与硬件对应的设备节点(如 /dev/sda
, /dev/ttyS0
等)。
- 节点类型:设备文件可以是字符设备(例如
/dev/ttyS0
)或块设备(例如/dev/sda
)。 - 权限设置:
udev
会根据规则文件中指定的权限来设置新设备文件的访问权限。如果规则没有明确指定权限,udev
会根据默认设置来设置设备文件的权限。
设备文件的创建过程会通过 mknod()
系统调用在 /dev/
目录下生成相应的设备节点。
5. 设置设备文件的属性
除了设备文件的名称,udev
还可以设置设备文件的其他属性,例如:
- 权限:设置设备文件的读写权限(例如
0666
)。 - 所有者和组:为设备文件设置特定的用户和组(例如
root:disk
)。 - 符号链接:
udev
还可以为设备创建符号链接,例如将/dev/sda
链接到/dev/mydisk
,使用户可以使用更友好的名字访问设备。 - 运行脚本:
udev
可以根据规则执行特定的脚本或程序,例如在设备插入时自动挂载一个 USB 驱动器。
6. 设备文件生命周期管理
- 设备插入:当硬件设备插入时,
udev
会动态生成设备文件,并按规则设置权限、创建符号链接等。 - 设备移除:当设备被移除时,
udev
会监听到内核发出的设备移除事件,自动删除对应的设备文件。
7. udev 工作流程总结
- 内核发送设备事件:设备插拔等事件触发内核向
udev
发送通知。 - udev 接收事件:
udev
从内核收到设备事件,并解析事件的设备属性。 - 规则匹配:
udev
根据设备属性与规则文件中的规则进行匹配,决定如何创建设备文件。 - 设备文件创建:
udev
根据匹配的规则生成设备文件,设置权限、所有者等属性。 - 设备文件生命周期:设备插入时创建设备文件,设备移除时删除设备文件。
8. 实际示例
假设你插入了一块硬盘,udev
可能会执行以下操作:
- 内核事件:内核检测到一块新的磁盘设备(如
/dev/sda
)。 - 规则匹配:
udev
匹配规则并根据设备的属性生成/dev/sda
。 - 设备文件创建:
udev
创建/dev/sda
,并根据规则设置权限和所有者(如root:disk
)。 - 符号链接创建:如果规则中指定,
udev
可能会为该设备创建一个符号链接(如/dev/mydisk
)。
9. udev 配置文件
udev
的行为由配置文件控制,常见的配置文件路径有:
/etc/udev/rules.d/
:用于存放用户自定义的规则文件。/lib/udev/rules.d/
:用于存放系统默认的规则文件。/etc/udev/udev.conf
:配置udev
的全局行为,例如日志记录、权限管理等。
五、创建和配置mdev
mdev
是一个轻量级的设备管理工具,通常用于嵌入式 Linux 系统,作为 udev
的替代品。mdev
通过解析 /sys
文件系统中的设备信息来创建和管理设备文件,它比 udev
更加简洁、资源占用少,适合资源有限的环境。
1. mdev
介绍
mdev
是 BusyBox 提供的工具,用于在设备插入和移除时动态创建和删除设备文件。mdev
与 udev
类似,也会在设备事件发生时根据预定义的规则自动创建设备文件。
mdev
适合嵌入式系统,尤其是在没有完全系统支持 udev
的情况下,它作为一个简化版的设备管理程序,处理设备文件的创建、删除和属性设置等任务。
2. 安装 mdev
在大多数基于 BusyBox 的嵌入式 Linux 系统中,mdev
已经包含在其中。如果没有安装,可以通过以下步骤手动启用:
-
安装 BusyBox: 如果系统中没有安装 BusyBox,可以通过源码安装或包管理器进行安装。例如:
apt-get install busybox
-
启用
mdev
功能: 在编译 BusyBox 时,确保启用了mdev
。可以通过make menuconfig
进入配置界面,启用mdev
相关选项。
3. mdev
配置和使用
mdev
的配置文件通常为 /etc/mdev.conf
,该文件用于定义如何处理设备及其相关规则。
1. 启用 mdev
在嵌入式系统中,mdev
通常需要通过 init
进程启动。编辑 /etc/inittab
或相似的文件,确保 mdev
在启动时运行。
例如,在 /etc/inittab
文件中,添加如下内容来启用 mdev
:
::sysinit:/sbin/mdev
或者,如果系统使用 systemd
,可以创建一个 systemd
单元文件来启动 mdev
。
2. 配置 /etc/mdev.conf
mdev.conf
文件用于定义设备文件的规则。每一行代表一个规则,格式通常如下:
<device_name> <mode> <owner> <group> <action>
<device_name>
:设备名称或匹配规则<mode>
:设备文件权限<owner>
:设备文件的拥有者(通常是用户)<group>
:设备文件的所属组<action>
:定义对设备执行的操作(如运行脚本)
示例配置
# /etc/mdev.conf
# 匹配所有 /dev/ttyS* 设备,设置权限为 0666
ttyS* 0666 root tty
# 匹配所有 /dev/sd* 设备,设置权限为 0660
sd* 0660 root disk
# 如果插入一个 USB 设备,则执行脚本 /etc/mdev/usb_insert.sh
usb* 0777 root usb /etc/mdev/usb_insert.sh
3. 设置设备文件的权限
mdev
会为设备文件创建适当的权限和所有者。例如,如果 mdev.conf
中定义了如下规则:
ttyS* 0666 root tty
则所有匹配 ttyS*
的设备(如 /dev/ttyS0
, /dev/ttyS1
)都会被创建,并且权限会设置为 0666
,拥有者为 root
,组为 tty
。
4. 定义设备操作(可选)
你还可以在 mdev.conf
中定义某些操作,当设备被插入时会触发。例如,你可以定义一个脚本,当一个 USB 设备插入时自动执行:
usb* 0777 root usb /etc/mdev/usb_insert.sh
其中 /etc/mdev/usb_insert.sh
是一个脚本,可能用于挂载 USB 设备或执行其他操作。
5. 使用 mdev
进行设备管理
当系统启动时,mdev
会自动扫描 /sys/class
和 /sys/block
等目录,检测到新的设备后会根据 /etc/mdev.conf
文件的规则创建对应的设备文件。
可以通过以下命令手动触发 mdev
扫描设备:
mdev -s
此命令会强制 mdev
扫描设备并根据规则生成设备文件。
4. 设备事件的管理
- 设备插入:当设备插入时,
mdev
会在/dev/
目录下创建相应的设备文件并根据规则设置权限、拥有者等属性。 - 设备移除:当设备被移除时,
mdev
会自动删除设备文件。
mdev
通过监听 /sys
文件系统中的设备事件来管理设备,通常使用 inotify
或类似机制监听设备变化。