You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Udev为RTL8153 USB网卡加载两个内核模块及解决方法咨询

关于RTL8153 USB网卡驱动冲突的问题解答

我来逐个拆解你的问题,这是RTL8153适配器很常见的驱动冲突场景,解决方案都很明确:

1. 为什么cdc_ether与r8152模块会同时被加载?

RTL8153这款USB网卡的设计比较特殊——它原生兼容USB CDC-Ethernet标准协议,内核自带的cdc_ether是通用USB网络设备驱动,会匹配所有符合CDC-ETH类规范的USB设备;而r8152是Realtek为自家RTL8153定制的专用驱动,通过设备的idVendor(2357)和idProduct(0601)精准匹配。

当你插入适配器时,内核会同时触发两个匹配逻辑:

  • 检测到设备属于USB网络设备类,触发cdc_ether的modalias自动匹配
  • 设备的vendor/product ID命中r8152的驱动匹配列表
    所以两个模块都会被加载,这是内核驱动匹配机制的正常表现。

2. 如何找到负责加载cdc_ether的udev规则?

其实cdc_ether的加载大多不是由udev规则直接触发的,而是内核的modalias机制(通过硬件信息自动匹配驱动模块)。不过如果要排查相关udev规则,可以按以下步骤操作:

  • 先获取网卡的udev属性链:运行udevadm info -a /sys/class/net/<你的网卡接口名>,替换<你的网卡接口名>为实际名称(比如enxabcdef123456),在输出中查找和cdc_ether相关的匹配项
  • 搜索系统中的udev规则文件,主要集中在两个目录:
    • /lib/udev/rules.d/:系统默认的规则集合
    • /etc/udev/rules.d/:用户自定义规则
      用命令快速搜索:grep -r "cdc_ether" /lib/udev/rules.d/ /etc/udev/rules.d/
  • 另外,部分通用网络设备规则(比如80-net-setup-link.rules)可能间接触发驱动加载,也可以检查这些文件的匹配逻辑。

如果想确认modalias的触发源,运行modinfo cdc_ether,输出里的alias字段就是它匹配的硬件标识,你的RTL8153肯定在这个列表中。

3. 如何停止加载cdc_ether,只保留r8152?

这里提供三种可靠方法,你可以根据自身场景选择:

方法1:通过udev规则强制绑定r8152,自动卸载cdc_ether

基于你提供的udev规则优化,让设备优先使用专用驱动:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="2357", ATTR{idProduct}=="0601", RUN+="/sbin/rmmod cdc_ether", RUN+="/sbin/modprobe r8152"

将这条规则保存到/etc/udev/rules.d/99-rtl8153.rules(文件名开头数字越大,规则优先级越高),然后重新加载udev规则:

udevadm control --reload-rules && udevadm trigger

方法2:局部黑名单cdc_ether(仅针对RTL8153,不影响其他设备)

如果你还需要用cdc_ether驱动其他USB网卡,可以创建局部黑名单逻辑:

  1. 创建文件/etc/modprobe.d/blacklist-rtl8153.conf
  2. 写入以下内容:
install cdc_ether /bin/sh -c 'if echo "$(cat /sys/class/net/%k/device/modalias)" | grep -q "$(modinfo -F alias r8152 | grep 2357:0601)"; then /sbin/modprobe r8152; else /sbin/modprobe --ignore-install cdc_ether; fi'

这个脚本会判断触发cdc_ether加载的设备是否是你的RTL8153,如果是,就加载r8152而非cdc_ether;否则正常加载通用驱动。

方法3:全局黑名单cdc_ether(仅当你不需要其他CDC-ETH设备时使用)

如果你的系统里没有其他依赖cdc_ether的USB网卡,可以直接全局禁用:
在/etc/modprobe.d/blacklist.conf中添加:

blacklist cdc_ether

然后更新initramfs(不同发行版命令略有区别):

  • Debian/Ubuntu系:sudo update-initramfs -u
  • RHEL/CentOS/Fedora系:sudo dracut -f

另外补充:你提供的那条udev规则里的DRIVER=="r8152"确实不是必需的,因为规则是在设备刚添加、还未绑定驱动时触发的,去掉它不会影响规则功能。

内容的提问来源于stack exchange,提问作者Arnab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:23:55