# udev系统

udev是一个用于管理设备节点的守护进程，它会根据设备的属性来创建设备节点，udev的配置文件位于/etc/udev/目录下

从 Linux 内核 2.6 版开始，udev 系统 提供了自动硬件发现和初始化机制。(参见 udev(7)).在内核发现每个设备的基础上，udev 系统使用从 sysfs 文件系统 (参见 第 1.2.12 节 “procfs 和 sysfs”)的信息启动一个用户进程，使用 modprobe(8) 程序 (参见 第 3.8.1 节 “内核模块初始化”)加载支持它所要求的内核模块, 创建相应的设备节点。

::: tip
由于某些理由，"/lib/modules/kernel-version/modules.dep"没有被 depmod(8) 正常生成，模块可能不会被 udev 系统按期望的方式加载。执行"depmod -a" 来修复它。

"/etc/fstab"里面的挂载规则,设备节点不必需是静态的。你能够使用 UUID 来挂载设备，来代替"/dev/sda"之类的设备名. 参见 第 9.6.3 节 “使用 UUID 访问分区”.
:::

由于 udev 系统是一个正在变化的事物，我在其它文档进行了详细描述，在这里只提供了最少的信息。

## 内核模块初始化

通过 modprobe(8) 程序添加和删除内核模块，使我们能够从用户进程来配置正在运行的 Linux 内核。udev 系统(参见 第 3.8 节 “udev 系统”)自动化它的调用来帮助内核模块初始化。

下面的非硬件模块和特殊的硬件驱动模块，需要被预先加载，把它们在"/etc/modules"文件里列出 (参见 modules(5)).

- TUN/TAP 模块提供虚拟的 Point-to-Point 网络设备 (TUN) 和虚拟的 Ethernet 以太网网络设备 (TAP),
- netfilter 模块提供 netfilter 防火墙能力(iptables(8), 第 5.6 节 “Netfilter 网络过滤框架”),
- watchdog timer 驱动模块。

modprobe(8) 程序的配置文件是按 modprobe.conf(5)的说明放在"/etc/modprobes.d/" 目录下，(如果你想避免自动加载某些内核模块，考虑把它们作为黑名单放在"/etc/modprobes.d/blacklist" 文件里.)

"/lib/modules/version/modules.dep" 文件由 depmod(8) 程序生成，它描述了 modprobe(8) 程序使用的模块依赖性.

::: warning 注意
如果你在启动时出现模块加载问题，或者 modprobe(8)时出现模块加载问题, "depmod -a" 可以通过重构"modules.dep"来解决这些问题。
:::

modinfo(8) 程序显示 Linux 内核模块信息。

lsmod(8) 程序以好看的格式展示"/proc/modules"的内容,显示当前内核加载了哪些模块。

::: tip
你能够精确识别你系统上的硬件。 参见第 9.5.3 节 “硬件识别”.

你可以在启动时配置硬件来激活期望的硬件特征。参见 第 9.5.4 节 “硬件配置”.

你可以重新编译内核来增加你的特殊设备的支持。参见 第 9.10 节 “内核”.
:::
