Linux 下安装 ASIX 网卡驱动
安装驱动
先在 USB 网卡厂商网站下载对应的网卡驱动。以绿联 USB 网卡为例,下载地址为:
解压后进入对应的安装目录,依次执行以下命令(其实安装目录里面的 Readme 文件中也有说明):
make
sudo make install
sudo modprobe ax_usb_nic
绑定驱动
执行以下命令,其中 enx207bd2afd867 需替换为实际网卡名,先看一下驱动:
ethtool -i enx207bd2afd867
一般没绑定驱动的时候,用的是系统默认的 cdc_ncm,虽然可以通信但是效率比较低。
检查网卡的接口名称:
basename $(readlink -f /sys/class/net/enx207bd2afd867/device)
输出结果通常为 2-9:2.0 这种格式。执行如下命令,其中 2-9:2.0 替换为上一条命令的实际输出:
echo "2-9:2.0" | sudo tee /sys/bus/usb/drivers/cdc_ncm/unbind
等待一段时间后,执行如下命令检查网卡是否存在:
sudo ip link show
之所以解绑之后要等一段时间,不能立刻绑定,是因为 ASIX 系统里有 2 个逻辑接口,如果没绑定,一开始默认用的是辅助接口,即 2-9:2.0;解绑之后才会切换到另一个接口。
如果超过两分钟后,执行上面的命令仍未看到之前的网卡名(如 enx207bd2afd867),则重新插拔 USB 网卡,跳到第三步(说明没有自动切换)。
如果可以看到网卡,执行下面的命令(这一步一定要执行):
basename $(readlink -f /sys/class/net/enx207bd2afd867/device)
输出结果通常为 2-9:1.0 这种格式。执行如下命令,其中 2-9:1.0 替换为上一条命令的实际输出:
echo "2-9:1.0" | sudo tee /sys/bus/usb/drivers/ax_usb_nic/bind
检查驱动:
ethtool -i enx207bd2afd867
强行绑定
到这一步,是因为上面解绑的时候,ASIX 一直没有自动切回到主接口,所以我们选择上电时候就强制使用。
选择 ASIX 网卡,并检查网卡名
lsusb | grep ASIX
一般都是:0b95:1790,创建 udev 规则,这个是 USB 设备查找的一个规则:
sudo tee /etc/udev/rules.d/99-asix-ax88179.rules <<'EOF'
# ASIX AX88179 强制使用 Config 1 + ax_usb_nic
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0b95", ATTRS{idProduct}=="1790", \
RUN+="/bin/sh -c 'echo 1 > /sys/$devpath/bConfigurationValue'"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0b95", ATTRS{idProduct}=="1790", \
ENV{USB_DRIVER_OVERRIDE}="ax_usb_nic"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0b95", ATTRS{idProduct}=="1790", \
RUN+="/bin/sh -c 'echo $kernel > /sys/bus/usb/drivers/ax_usb_nic/bind'"
EOF
上面命令很关键的是第一句话,这个是强制让 ASIX 使用著接口,或许使用这个指令在上一步就可以了,但是我没尝试。
RUN+="/bin/sh -c 'echo 1 > /sys/$devpath/bConfigurationValue'"
使用如下命令加载:
sudo udevadm control --reload-rules
sudo update-initramfs -u
sudo reboot
启动后,重启使用 ethtool -i 来查看驱动,顺利的话,应该就是 asix_usb_nic 了。
切回 cdc_ncm
这个是我当时为了给客户写自动脚本,所以想重新切回 cdc_ncm 然后执行上面操作看看稳定性的,结果一直切不回去。
经过对各个 AI 的反复鞭打,终于找到了最终生效的命令,经过测试,百分百可以:
# 删除 udev 规则
rm /etc/udev/rules.d/99-asix-ax88179.rules
# 强行卸载专用驱动
rm -f $(modinfo -n ax_usb_nic)
depmod -a
# 更新开机默认的驱动包
update-initramfs -u -k all
# 重载 udev 规则
udevadm control --reload-rules
# 强制 USB 重新上电
udevadm trigger --subsystem-match=usb --action=add
不需要重启,直接重新插拔即可。