我正在尝试为报告为的 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 添加到模块中以查看会发生什么。)