udev和acpi(d)有什麼區別
它們似乎都在接收和處理核心事件,那麼為什麼它們都存在呢?據我所知,ACPI 似乎比 udev 更高級,但除此之外無法真正分辨。
ACPI是主機板供應商的低級介面,用於提供有關無法(可靠)自動檢測到作業系統的內置設備的資訊。它還為核心提供了電源管理和硬體監控的方法。ACPI 提供的一件有趣的事情是所謂的 ACPI 事件。為了創建這些,當內置硬體發生某些事情時,硬體會發出一個特殊的中斷(通用事件中斷),然後核心呼叫 ACPI 程式碼來確定在哪個內置設備上發生了什麼。如果您想詳細了解整個事情的工作原理,請參閱規範。
acpid是一個守護程序,它監聽核心中 ACPI 子系統生成的事件,並允許在特定事件發生時執行命令。例如,如果硬體通過 ACPI 發出按下電源按鈕的信號,您會在“按鈕/電源”類中的設備上獲得一個事件。守護程序只能對通過 ACPI 生成的這些事件做出反應,而不能對 USB 匯流排上的事件做出反應。
udev是一個特定於 Linux 的守護程序,它允許對核心管理的設備樹中的更改做出反應。例如,如果您插入 USB 記憶棒,則 USB 控制器會通知核心,並將新設備添加到 Linux 設備樹中。然後
usb_storage
驅動程序檢測到新設備是儲存設備,並在樹中創建子設備節點,允許使用者空間像處理任何其他硬碟驅動器一樣處理 U 盤。如果您將其拔出,這些設備將從樹中移除。udev 會收到關於這些添加和刪除中的每一個的通知。udev 還可以對一些不是設備添加/刪除的事件做出反應,例如打開/關閉 CD 托盤,但僅此而已。您可以執行udevadm monitor --kernel
以查看 udev 實時獲取的事件。可以說acpid和udev相得益彰。udev可用於對作業系統知道的任何設備的重大更改做出反應,而acpid可用於對某些內置設備發生的更具體的事件做出反應。