如何找到触发加载内核模块88XXau.ko的默认udev规则?
解决Edimax EW-7811UTC仅按需加载88XXau驱动模块的问题
步骤1:获取Edimax EW-7811UTC的USB设备ID
插入适配器后执行以下命令,找到对应设备的idVendor和idProduct:
lsusb
输出示例(以Edimax设备为例):
Bus 001 Device 005: ID 0846:9052 Edimax Technology Co., Ltd EW-7811UTC 802.11ac Wireless Adapter [Realtek RTL8812AU]
这里的0846是厂商ID,9052是产品ID,记下来备用。
步骤2:定位自动加载模块的规则来源
udev自动加载模块的规则通常存放在以下路径,执行命令查找包含88XXau的规则文件:
grep -r "88XXau" /lib/udev/rules.d/ /etc/udev/rules.d/
- 如果找到对应的规则文件(比如
/lib/udev/rules.d/90-rtl8812au.rules),可以将其重命名禁用:sudo mv /lib/udev/rules.d/90-rtl8812au.rules /lib/udev/rules.d/90-rtl8812au.rules.disabled - 如果未找到任何udev规则,说明是内核的modalias机制自动匹配加载模块,这种情况需要通过黑名单禁止自动加载。
步骤3:配置自定义udev规则与模块黑名单
3.1 禁止内核自动加载88XXau模块
创建模块黑名单文件:
sudo touch /etc/modprobe.d/blacklist-88XXau.conf
写入以下内容:
blacklist 88XXau
3.2 创建仅匹配Edimax EW-7811UTC的udev规则
创建自定义规则文件:
sudo touch /etc/udev/rules.d/99-edimax-ew7811utc.rules
写入规则(替换YOUR_VENDOR_ID和YOUR_PRODUCT_ID为步骤1获取的ID):
# 仅当插入Edimax EW-7811UTC时加载88XXau模块 SUBSYSTEM=="usb", ATTRS{idVendor}=="0846", ATTRS{idProduct}=="9052", RUN+="/sbin/modprobe 88XXau"
步骤4:应用规则并测试
- 重新加载udev规则:
sudo udevadm control --reload-rules && sudo udevadm trigger - 卸载当前加载的模块(如果已加载):
sudo rmmod 88XXau - 测试场景:
- 插入其他同驱动支持的适配器,执行
lsmod | grep 88XXau,模块应未加载; - 插入Edimax EW-7811UTC,再次执行
lsmod | grep 88XXau,模块应自动加载,同时无线设备正常识别。
- 插入其他同驱动支持的适配器,执行
内容的提问来源于stack exchange,提问作者User051209
相关产品推荐
相关产品推荐

