如何檢查給定的驅動核心模組是否支持給定的設備?
我正在嘗試為報告為的 USB WiFi 適配器找到合適的驅動
lsusb
程序0bda:a811 Realtek Semiconductor Corp.
在WikiDevi上,它被描述為“Realtek RTL8811AU Wireless 802.11ac 1x1 USB 2.0”。
似乎有多個儲存庫為 RTL8811AU 提供驅動程序,例如這個(它基於這個聲稱支持 rtl8811AU)。但是,我想在嘗試將其安裝到核心之前檢查編譯的模組是否支持該設備(這是我試圖弄亂的其他人的系統)。
modinfo
通過線上搜尋,我得出結論,驅動模組的命令輸出返回這樣的一行就足夠了alias: usb:v0BDApA811d*dc*dsc*dp*ic*isc*ip*in*
其中將包含正確的供應商 ID (
0BDA
) 和正確的產品 ID (A811
)。這種檢查驅動程序與設備兼容性的方法有多可靠?這是核心選擇驅動程序的方式嗎?
供應商 ID 和設備 ID 是否必須完全匹配?例如,我首先嘗試使用(在 Ubuntu 上)安裝
rtl8812au-dkms
軟體包。apt-get
但是,輸出modinfo 8812au | grep A811
是alias: usb:v7392pA811d*dc*dsc*dp*ic*isc*ip*in*
– 設備 ID 沒問題,但供應商 ID 不匹配。這是否意味著該驅動程序不適用於該設備?
這種方法是可靠的,這就是核心(或
udev
andkmod
)選擇要載入的模組的方式:當出現新設備時(包括在啟動時,當探測到所有設備時),它會查找與modalias
設備描述符匹配的模組。如果
modinfo
列出與您的設備匹配的模組的別名,則表示該模組聲稱支持該設備。在您的情況下,該模組支持與 7392:A811 匹配的設備(可能還有其他與您的不匹配的grep
設備),但不支持您的設備,因此它似乎rtl8812au-dkms
沒有太大幫助(至少在目前狀態下)…… Linux USB 系統資料庫目前處於離線狀態,因此我無法進一步檢查。請注意,別名是第一級過濾,並不絕對保證支持——模組在初始化時使用它們自己的探測函式,並且可以使用其他資訊。有關更多詳細資訊,請參閱此問題,有關別名中可以包含的所有內容的資訊,請參閱核心文件。(標識符的相似性確實表明驅動程序也可以支持您的設備,因此您可以嘗試將 id 添加到模組中以查看會發生什麼。)