ACPI是主板供应商的低级接口,用于提供有关无法(可靠地)自动检测到操作系统的内置设备的信息。它还为内核提供了电源管理和硬件监控的方法。ACPI 提供的一件有趣的事情就是所谓的 ACPI 事件。为了创建这些,当内置硬件发生某些事情时,硬件会发出一个特殊的中断(通用事件中断),然后内核调用 ACPI 代码,以确定在哪个内置设备上发生了什么。如果您想详细了解整个过程是如何工作的,请参阅规范。
acpid是一个守护进程,它监听内核中 ACPI 子系统生成的事件,并允许在特定事件发生时运行命令。例如,如果硬件通过 ACPI 发出电源按钮被按下的信号,您会在“按钮/电源”类中的设备上收到一个事件。守护进程只能对这些通过 ACPI 生成的事件作出反应,而不能对 USB 总线等事件作出反应。
udev是一个 Linux 特定的守护进程,它允许对内核管理的设备树中的更改做出反应。例如,如果您插入 USB 记忆棒,USB 控制器会通知内核,并将新设备添加到 Linux 设备树中。然后usb_storage驱动程序检测到新设备是一个存储设备并在树中创建子设备节点,允许用户空间像处理任何其他硬盘驱动器一样处理 USB 记忆棒。如果您将其拔出,这些设备将从树中移除。udev 会收到有关这些添加和删除中的每一个的通知。udev 还可以对某些不是设备添加/删除的事件做出反应,例如打开/关闭 CD 托盘,但仅此而已。您可以运行udevadm monitor --kernel以查看 udev 实时获取哪些事件。
可以说acpid和udev是相辅相成的。udev可用于对操作系统已知的任何设备的重大更改做出反应,而acpid可用于对发生在某些内置设备上的更具体的事件做出反应。