Linux-Kernel

modprobe 在哪裡載入 udev 請求的驅動程序?

  • September 13, 2017

讓我們假設一個 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 從頭開始指南,其中有一節介紹瞭如何定義固定形式的模組名稱。

modprobeinit_module通過呼叫系統呼叫載入模組。它不以任何方式與 sysfs 互動。載入模組時,核心會在/sys/module. sysfs 中其他地方出現的任何條目都取決於模組中的程式碼(例如,帶有用於一種 USB 設備類型的驅動程序的模組將呼叫一些通用 USB 支持程式碼,在 下添加一個條目/sys/bus/usb/drivers)。

引用自:https://unix.stackexchange.com/questions/330186