Linux-Kernel
modprobe 在哪裡載入 udev 請求的驅動程序?
讓我們假設一個 Linux 系統已啟動並正常執行的場景。使用者出現並熱插拔USB 儲存設備。
發生的事件順序如下圖所示:
modprobe 將其驅動程序載入到哪裡?請求設備的驅動程序是
/sys/bus/drivers
在 modprobe 載入之後還是之前找到的?我在這裡試圖建立的是條目
/sys/
與上圖中發生的事件之間的關係。
uevent 消息包含有關設備的資訊(範例)。此資訊包含連接到匯流排(如 PCI 和 USB)的設備的註冊供應商和型號標識。Udev 解析這些事件並構造一個固定格式的模組名稱,並將其傳遞給
modprobe
.modprobe
查找在安裝核心時生成/lib/modules/VERSION
的文件,該文件depmod.alias
將固定格式的模組名稱映射到實際的驅動程序模組文件名稱。請參閱是否自動載入和解除安裝驅動程序模組?有關該過程的更多詳細資訊-該答案描述了核心直接呼叫的早期日子modprobe
,但工作方式modprobe
和模組別名的工作方式沒有改變。另請參閱Michael Opdenacker 的展示文稿“使用 udev 進行熱插拔”,其中包含更多範例並描述了使用 udev 進行設備管理的其他方面,以及Linux 從頭開始指南,其中有一節介紹瞭如何定義固定形式的模組名稱。
modprobe
init_module
通過呼叫系統呼叫載入模組。它不以任何方式與 sysfs 互動。載入模組時,核心會在/sys/module
. sysfs 中其他地方出現的任何條目都取決於模組中的程式碼(例如,帶有用於一種 USB 設備類型的驅動程序的模組將呼叫一些通用 USB 支持程式碼,在 下添加一個條目/sys/bus/usb/drivers
)。