Written by: algebnaly
Date: 2025-11-22T03:52:20.000Z
我有一块USB以太网卡使用的芯片是AX88179,我在这个网卡上运行了一个DHCP服务器用来给下面的机器分配ip地址,然而这张网卡经常会出现无法通信的问题,需要在nmcli里关闭连接并重新启用连接才能再次工作。经过检查我发现它目前使用的是通用的cdc_ncm驱动,而非为该芯片定制的ax88179_178a驱动。因此我希望切换成ax88179_178a驱动来看看能否解决上面的问题。
我在/etc/udev/rules.d/70-usbeth-driver-select.rules文件中写入了如下内容:
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0b95", ATTR{idProduct}=="1790", \
ATTR{bConfigurationValue}!="1", ATTR{bConfigurationValue}="1"
然后运行
sudo udevadm control --reload-rules
sudo udevadm trigger
再重新插拔一下USB网卡就能让该网卡使用ax88179_178a驱动了。
上面的udev规则的第一行比较好理解,解释匹配设备插入的动作,匹配usb子系统,以及VID和PID,关键是下面的一行
ATTR{bConfigurationValue}!="1", ATTR{bConfigurationValue}="1",这是在说如果ATTR{bConfigurationValue}的值不等于1, 就给它设置为1。为什么这样就能让它使用设备特定的ax88179_178a驱动了呢,这里面并没有显式写出这个驱动的名字啊。
这是因为USB设备的配置机制, bConfigurationValue等于0通常表示设备的未配置状态,bConfigurationValue等于1、2表示不同的操作模式, 对于这张网卡, 配置1就是告诉内核使用应该选择ax88179_178a驱动。