如何检查给定的驱动程序内核模块是否支持给定的设备?

如何检查给定的驱动程序内核模块是否支持给定的设备?

我正在尝试为 USB WiFi 适配器找到合适的驱动程序,该适配器的报告lsusb

0bda:a811 Realtek Semiconductor Corp.

维基百科这是描述作为“Realtek RTL8811AU 无线 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 不匹配。这是否意味着该驱动程序不适用于该设备?

答案1

这种方法是可靠的,这就是内核(或udevkmod)选择要加载的模块的方式:当新设备出现时(包括在引导时,当探测所有设备时),它会查找与modalias设备描述符匹配的模块。

如果modinfo列出与您的设备匹配的模块的别名,则意味着该模块声称支持该设备。在您的情况下,该模块支持与 7392:A811 匹配的设备(也许还有其他与您不匹配的grep设备),但不支持您的设备,因此它看起来rtl8812au-dkms不会有太大帮助(至少在当前状态下)...Linux USB 注册表目前处于离线状态,所以我无法进一步检查。请注意,别名是第一级过滤,并不能绝对保证支持——模块在初始化时使用自己的探测函数,并且这些函数可以使用其他信息。看这个问题了解更多详情,以及内核文档有关可以在别名中出现的所有内容的信息。

(标识符的相似性确实表明驱动程序也可以支持您的设备,因此您可以尝试将 id 添加到模块中,看看会发生什么。)

相关内容