成功在群晖 NAS 用上 USB 千兆网卡,完整使用教程

温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。

问题背景

为了在群晖 NAS 上使用 USB 网卡也是操碎了心,前面已经通过两篇文章记录了历程:

错误日志大致如下
......
[   68.546720] mii: module verification failed: signature and/or required key missing - tainting kernel
......
[   70.753670] ax88179_178a: probe of 2-1:2.1 failed with error -32
[   70.767864] ax88179_178a 2-2:2.0 (unnamed net_device) (uninitialized): Failed to write reg index 0x0000: -32
[   70.784893] ax88179_178a 2-2:2.0 (unnamed net_device) (uninitialized): Failed to write reg index 0x0002: -32
[   71.026628] ax88179_178a 2-2:2.0 (unnamed net_device) (uninitialized): Failed to write reg index 0x0001: -32
[   71.144133] ax88179_178a 2-2:2.0 (unnamed net_device) (uninitialized): Failed to read reg index 0x0001: -32
......
[   73.389635] Found invalid EEPROM MAC address value FF-FF-FF-FF-FF-FF
[   73.435191] ax88179_178a 2-3:2.1 (unnamed net_device) (uninitialized): Failed to read reg index 0x0001: -32
[   73.446180] ax88179_178a: probe of 2-3:2.1 failed with error -32
[   73.897598] ax88179_178a 2-1:1.0 (unnamed net_device) (uninitialized): Found invalid EEPROM part or non-EEPROM
[   74.165743] ax88179_178a 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read reg index 0x0040: -32
......
[   74.453671] ASIX USB Ethernet Adapter:v1.20.0        http://www.asix.com.tw
[   74.460908] ax88179_178a 2-1:1.0 (unnamed net_device) (uninitialized): mtu 1500
[   74.469447] ax88179_178a 2-1:1.0 eth1: register 'ax88179_178a' at usb-0000:00:15.0-1, , 00:0e:c6:8e:16:d6
[   74.480660] usbcore: registered new interface driver ax88179_178a
[   74.861262] usb 2-3: USB disconnect, device number 4

解决过程

为了解决这个问题,翻遍了互联网,结果十有九成九都是反馈问题的,还都没有结果,真是汗颜!

看错误日志,是读取不到 EEPROM,而网卡的 MAC 地址等信息都是存在这个地方,无意间翻到这一篇文章《How to fix same MAC address issue and connect multiple Kontron DM9601 USB Ethernet Adapters》,是解决多个网卡 MAC 地址一样的问题,我们读取不到 MAC 地址似乎也是差不多的问题,于是参照着操作一番:

root@NAS:~# cat /usr/lib/udev/rules.d/70-persistent-net.rules

SUBSYSTEM!="net", GOTO="net_end"
ACTION!="add", GOTO="net_end"

SUBSYSTEM=="net", ACTION=="add", DEVPATH=="*2-3*", NAME="eth3", RUN+="/sbin/ifconfig eth3 hw ether F8:F8:F8:F8:F8:99"
SUBSYSTEM=="net", ACTION=="add", DEVPATH=="*2-2*", NAME="eth2", RUN+="/sbin/ifconfig eth2 hw ether F8:F8:F8:F8:F8:98"
SUBSYSTEM=="net", ACTION=="add", DEVPATH=="*2-1*", NAME="eth1", RUN+="/sbin/ifconfig eth1 hw ether F8:F8:F8:F8:F8:97"

LABEL="net_end"

神奇的事情发生了,原本重启后只能识别一个网卡,现在居然多识别出了一个,只是上面一样的错误日志还是存在,说明这个方法也不能根治。

思考了一番,错误日志都是 ax88179_178a 这个驱动发出的,那么会不会是驱动的问题呢?于是赶紧找了生产厂商 -- 山泽,居然只有销售而没有售后。。。在浏览过程,看到京东推荐里有个绿联品牌的 USB 网卡,介绍是选用的同一个芯片,估计有门,就屁颠屁颠到绿联官网下载了几百兆驱动,打开发现跟之前从 AXSI 官网下载的驱动是一样的!(而且只有几 KB,可见绿联做的也是不怎样。)

所以,最终的解决方向就是找 AXSI 技术支持!不愧是国际大厂,联系页面一打开就有联系技术支持的方法!不愧是大厂技术,两封邮件就有了解决方案!

发送的邮件
发送至 support:

您好,
       近期购入采用 AX88179 芯片的 USB3.0 转千兆以太网网卡,在 Linux 系统中使用贵司提供的驱动源码( Linux kernel 5.x/4.x/3.x/2.6.x Driver For all Android systems, Linux kernel 2.6.14 and later,版本 1.20.0,发布日期 2020-04-27)自己编译安装的驱动。

      但是在使用中发现,将网卡插入 USB3.0 中无法正确读取 MAC 地址,错误日志如下:
[77791.835155] ax88179_178a 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read reg index 0x0040: -32
[77792.154231] ax88179_178a 2-1:1.0 eth1: register 'ax88179_178a' at usb-0000:00:15.0-1, ASIX AX88179 USB 3.0 Gigabit Ethernet, ae:ec:cb:bf:4a:ae
[77792.168637] usbcore: registered new interface driver ax88179_178a

     有时候错误日志如下:
[75644.436825] Found invalid EEPROM MAC address value FF-FF-FF-FF-FF-FF
[75644.581635] ax88179_178a 2-1:1.0 (unnamed net_device) (uninitialized): Found invalid EEPROM part or non-EEPROM
[75644.765615] ax88179_178a 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read reg index 0x0040: -32
[75644.972119] ASIX USB Ethernet Adapter:v1.20.0 http://www.asix.com.tw
[75644.979347] ax88179_178a 2-1:1.0 (unnamed net_device) (uninitialized): mtu 1500
[75644.988297] ax88179_178a 2-1:1.0 eth1: register 'ax88179_178a' at usb-0000:00:15.0-1,ASIX AX88179 USB 3.0 Gigabit Ethernet , 00:0e:c6:8e:91:d3
[75644.999059] usbcore: registered new interface driver ax88179_178a

     在网上搜索了很久,发现这个问题并不是个例,很多人都有发现在 USB3.0 接口上使用 采用 AX88179 芯片的网卡 都出现了类似 “Failed to read reg index 0x0040: -32” 的问题,但是在 USB2.0 接口上不会有这个错误。

      这个可能是驱动的问题,因为我的设备只有 USB 3.0 接口,希望能得到您的帮助!

      以上,期待回复。

谢谢!
回复的内容
sin 发送至  我:

您好:
    建议去掉系统中ax88179_178a.ko。然后加载cdc driver。
    # rmmod ax88179_178a.ko
    # insmod cdc_mbim.ko
    # insmod cdc_ncm.ko

解决方案

依照技术支持的方案,不需要自己编译 ax88179_178a 驱动,启用内核自带的 cdc_mbim.kocdc_ncm.ko 驱动即可。

然而在群晖 NAS DSM 7.0 中,这两个都被阉割掉了!也就是说,虽然不用编译 ax88179_178a 驱动,但是需要编译 cdc_mbim.kocdc_ncm.ko 驱动!好吧,那就来编译一下吧!

注意事项

先说结论好了,编译中发现 cdc_mbim.kocdc_ncm.ko 存在依赖项,因此需要编译的有 mii.kocdc-wdm.kocdc_ncm.kocdc_mbim.ko,需要启用的还有 usbnet.ko

由于这几个模块已经被群晖阉割了,因此需要下载完整的内核,从内核中提取出驱动代码加以编译。

内核可以从群晖官网下载到,文件名是 linux-4.4.x.txz,注意下载与自己 NAS 对应的架构,比如我的是 apollolake,则下载地址是 linux-4.4.x.txz

那么为什么要重新编译而不用别人编译好的呢?这是因为内核模块要求版本号与本机内核一致,并且开机加载模块时会校验内核签名,所以最好时自己编译。

同样的,第一步是搭建编译环境,可以参考《搭建群晖 Synology NAS 开发环境,自编译网卡等驱动》,不再赘述。

其他代码如下:

下载源码

Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.


Synology strongly advises you not to run commands as the root user, who has
the highest privileges on the system. Doing so may cause major damages
to the system. Please note that if you choose to proceed, all consequences are
at your own risk.

admin@NAS:~$ sudo -i                                         #使用 root 身份
root@NAS:~# cd /tmp/nas/                                     #到 /tmp/nas 目录操作
root@NAS:/tmp/nas# wget https://cndl.synology.cn/download/ToolChain/Synology%20NAS%20GPL%20Source/7.0-41890/apollolake/linux-4.4.x.txz                                                    #下载内核文件
--2022-03-28 18:03:17--  https://cndl.synology.cn/download/ToolChain/Synology%20NAS%20GPL%20Source/7.0-41890/apollolake/linux-4.4.x.txz
Resolving cndl.synology.cn (cndl.synology.cn)... 58.254.138.133, 58.254.138.136, 58.254.138.139, ...
Connecting to cndl.synology.cn (cndl.synology.cn)|58.254.138.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 100701572 (96M)
Saving to: ‘linux-4.4.x.txz’

linux-4.4.x.txz                            100%[======================================================================================>]  96.04M  7.07MB/s    in 12s     

2022-03-28 18:03:30 (7.89 MB/s) - ‘linux-4.4.x.txz’ saved [100701572/100701572]
root@NAS:/tmp/nas# tar xf linux-4.4.x.txz && rm -rf linux-4.4.x.txz                           #解压并删除内核文件压缩包
root@NAS:/tmp/nas# mkdir 00-mii && mkdir 01-cdc-wdm && mkdir 02-cdc_ncm && mkdir 03-cdc_mbim  #创建相应目录方便识别
root@NAS:/tmp/nas# cp linux-4.4.x/drivers/net/mii.c 00-mii                                    #复制驱动源码到指定文件夹
root@NAS:/tmp/nas# cp linux-4.4.x/drivers/usb/class/cdc-wdm.c cdc-wdm                         #复制驱动源码到指定文件夹
root@NAS:/tmp/nas# cp linux-4.4.x/include/linux/usb/cdc-wdm.h cdc-wdm
root@NAS:/tmp/nas# cp linux-4.4.x/drivers/net/usb/cdc_ncm.c 02-cdc_ncm
root@NAS:/tmp/nas# cp linux-4.4.x/drivers/net/usb/cdc_mbim.c 03-cdc_mbim

编译文件

root@NAS:/tmp/nas# cd 00-mii && vim Makefile                                                  #进入目录,创建编译规则文件 Makefile
CURRENT = $(shell uname -r)
TARGET  = mii
OBJS    = mii.o
MDIR    = drivers/net
KDIR    = /lib/modules/$(CURRENT)/build
USBNET  = $(shell find $(KDIR)/include/linux/usb/* -name usbnet.h)

EXTRA_CFLAGS = -DEXPORT_SYMTAB
PWD = $(shell pwd)
DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)

obj-m      := $(TARGET).o
default:
    make -C $(KDIR) M=$(PWD) modules

$(TARGET).o: $(OBJS)
    $(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

install:
    su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"

clean:
    $(MAKE) -C $(KDIR) M=$(PWD) clean
    rm *.mod

.PHONY: modules clean

-include $(KDIR)/Rules.make

root@NAS:/tmp/nas/00-mii# make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-    #编译
make -C /lib/modules/4.4.180+/build M=/tmp/nas/00-mii modules
make[1]: Entering directory '/usr/lib/modules/4.4.180+/build'
  CC [M]  /tmp/nas/00-mii/mii.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/nas/00-mii.mod.o
  LD [M]  /tmp/nas/00-mii.ko
make[1]: Leaving directory '/usr/lib/modules/4.4.180+/build'
root@NAS:/tmp/nas# modinfo mii.ko                                                                         #看一下模块信息
filename:       /tmp/nas/00-mii/mii.ko
license:        GPL
description:    MII hardware support library
author:         Jeff Garzik <[email protected]>
depends:        
retpoline:      Y
vermagic:       4.4.180+ SMP mod_unload
root@NAS:/tmp/nas/00-mii# insmod mii.ko                                                                    #插入内核
其他模块的编译
root@NAS:/tmp/nas/00-mii# cd ../01-cdc-wdm && vim Makefile                                                 #进入目录,创建编译规则文件 Makefile
CURRENT = $(shell uname -r)
TARGET  = cdc-wdm
OBJS    = cdc-wdm.o
MDIR    = drivers/usb/class
KDIR    = /lib/modules/$(CURRENT)/build
USBNET  = $(shell find $(KDIR)/include/linux/usb/* -name usbnet.h)

EXTRA_CFLAGS = -DEXPORT_SYMTAB
PWD = $(shell pwd)
DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)

obj-m      := $(TARGET).o
default:
    make -C $(KDIR) M=$(PWD) modules

$(TARGET).o: $(OBJS)
    $(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

install:
    su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"

clean:
    $(MAKE) -C $(KDIR) M=$(PWD) clean
    rm *.mod

.PHONY: modules clean

-include $(KDIR)/Rules.make
root@NAS:/tmp/nas/01-cdc-wdm# make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-    #编译
make -C /lib/modules/4.4.180+/build M=/root/01-cdc-wdm modules
make[1]: Entering directory '/usr/lib/modules/4.4.180+/build'
  CC [M]  /root/01-cdc-wdm/cdc-wdm.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/01-cdc-wdm/cdc-wdm.mod.o
  LD [M]  /root/01-cdc-wdm/cdc-wdm.ko
make[1]: Leaving directory '/usr/lib/modules/4.4.180+/build'
root@NAS:/tmp/nas/01-cdc-wdm# modinfo cdc-wdm.ko                                                           #看一下模块信息
filename:       /root/01-cdc-wdm/cdc-wdm.ko
license:        GPL
description:    USB Abstract Control Model driver for USB WCM Device Management
author:         Oliver Neukum
alias:          usb:v*p*d*dc*dsc*dp*ic02isc09ip*in*
depends:        usbcore
retpoline:      Y
vermagic:       4.4.180+ SMP mod_unload
root@NAS:/tmp/nas/01-cdc-wdm# insmod cdc-wdm.ko                                                           #插入内核
root@NAS:/tmp/nas/01-cdc-wdm# cd ../02-cdc_ncm && vim Makefile                                            #进入目录,创建编译规则文件 Makefile
CURRENT = $(shell uname -r)
TARGET  = cdc_ncm
OBJS    = cdc_ncm.o
MDIR    = drivers/net/usb
KDIR    = /lib/modules/$(CURRENT)/build
USBNET  = $(shell find $(KDIR)/include/linux/usb/* -name usbnet.h)

EXTRA_CFLAGS = -DEXPORT_SYMTAB
PWD = $(shell pwd)
DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)

obj-m      := $(TARGET).o
default:
    make -C $(KDIR) M=$(PWD) modules

$(TARGET).o: $(OBJS)
    $(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

install:
    su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"

clean:
    $(MAKE) -C $(KDIR) M=$(PWD) clean
    rm *.mod

.PHONY: modules clean

-include $(KDIR)/Rules.make
root@NAS:/tmp/nas/02-cdc_ncm# make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-   #编译
make -C /lib/modules/4.4.180+/build M=/root/02-cdc_ncm modules
make[1]: Entering directory '/usr/lib/modules/4.4.180+/build'
  CC [M]  /root/02-cdc_ncm/cdc_ncm.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/02-cdc_ncm/cdc_ncm.mod.o
  LD [M]  /root/02-cdc_ncm/cdc_ncm.ko
make[1]: Leaving directory '/usr/lib/modules/4.4.180+/build'
root@NAS:/tmp/nas/02-cdc_ncm# modinfo cdc_ncm.ko                                                         #看一下模块信息             
filename:       /root/02-cdc_ncm/cdc_ncm.ko
license:        Dual BSD/GPL
description:    USB CDC NCM host driver
author:         Hans Petter Selasky
alias:          usb:v*p*d*dc*dsc*dp*ic02isc0Dip00in*
alias:          usb:v1519p0443d*dc*dsc*dp*ic02isc0Dip00in*
alias:          usb:v12D1p*d*dc*dsc*dp*ic02isc0Dip00in*
alias:          usb:v0930p*d*dc*dsc*dp*ic02isc0Dip00in*
alias:          usb:v413Cp*d*dc*dsc*dp*ic02isc0Dip00in*
alias:          usb:v413Cp81BCd*dc*dsc*dp*ic02isc0Dip00in*
alias:          usb:v413Cp81BBd*dc*dsc*dp*ic02isc0Dip00in*
alias:          usb:v0BDBp*d*dc*dsc*dp*ic02isc0Dip00in*
depends:        usbnet,usbcore
retpoline:      Y
vermagic:       4.4.180+ SMP mod_unload 
parm:           prefer_mbim:Prefer MBIM setting on dual NCM/MBIM functions (bool)
root@NAS:/tmp/nas/02-cdc_ncm# insmod cdc_ncm.ko                                                         #插入内核
root@NAS:/tmp/nas# cd ../03-cdc_mbim/ && vim Makefile                                                   #进入目录,创建编译规则文件 Makefile
CURRENT = $(shell uname -r)
TARGET  = cdc_mbim
OBJS    = cdc_mbim.o
MDIR    = drivers/net/usb
KDIR    = /lib/modules/$(CURRENT)/build
USBNET  = $(shell find $(KDIR)/include/linux/usb/* -name usbnet.h)

EXTRA_CFLAGS = -DEXPORT_SYMTAB
PWD = $(shell pwd)
DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)

obj-m      := $(TARGET).o
default:
    make -C $(KDIR) M=$(PWD) modules

$(TARGET).o: $(OBJS)
    $(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

install:
    su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"

clean:
    $(MAKE) -C $(KDIR) M=$(PWD) clean
    rm *.mod

.PHONY: modules clean

-include $(KDIR)/Rules.make
root@NAS:/tmp/nas/03-cdc_mbim# make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-   #编译
make -C /lib/modules/4.4.180+/build M=/root/03-cdc_mbim modules
make[1]: Entering directory '/usr/lib/modules/4.4.180+/build'
  CC [M]  /root/03-cdc_mbim/cdc_mbim.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "usb_cdc_wdm_register" [/root/03-cdc_mbim/cdc_mbim.ko] undefined!
  CC      /root/03-cdc_mbim/cdc_mbim.mod.o
  LD [M]  /root/03-cdc_mbim/cdc_mbim.ko
make[1]: Leaving directory '/usr/lib/modules/4.4.180+/build'
root@NAS:/tmp/nas/03-cdc_mbim# modinfo cdc_mbim.ko                                                     #看一下模块信息  
filename:       /root/03-cdc_mbim/cdc_mbim.ko
license:        GPL
description:    USB CDC MBIM host driver
author:         Bjørn Mork <[email protected]>
author:         Greg Suarez <[email protected]>
alias:          usb:v*p*d*dc*dsc*dp*ic02isc0Eip00in*
alias:          usb:v12D1p*d*dc*dsc*dp*ic02isc0Eip00in*
alias:          usb:v0BDBp*d*dc*dsc*dp*ic02isc0Eip00in*
alias:          usb:v*p*d*dc*dsc*dp*ic02isc0Dip00in*
depends:        usbnet,cdc_ncm,usbcore
retpoline:      Y
vermagic:       4.4.180+ SMP mod_unload
root@NAS:/tmp/nas/03-cdc_mbim# insmod cdc_mbim.ko                                                     #插入内核
root@NAS:/tmp/nas/03-cdc_mbim# dmesg |tail                                                            #加载都正常,来看一下日志
[ 6853.078602] usbcore: registered new interface driver cdc_wdm
[ 7183.999998] cdc_ncm 2-2:2.0: bind() failure          #发现错误,这是因为我上一次没有加载成功,NAS 已经识别不到这个设备
[ 7184.016229] cdc_ncm 2-3:2.0: bind() failure          #重启一下就好了。
[ 7184.020979] usbcore: registered new interface driver cdc_ncm
[ 7324.669186] usbcore: registered new interface driver cdc_mbim

自动启用

在重启之前,先把这几个编译好的文件通过任务计划开机自动加载,不再赘述,代码如下:

insmod /lib/modules/mii.ko
insmod /lib/modules/usbnet.ko
insmod /lib/modules/cdc-wdm.ko
insmod /lib/modules/cdc_ncm.ko
insmod /lib/modules/cdc_mbim.ko

现在网卡应该已经成功识别到了,但是不会在网络中显示,因为没有启用,所以最后一步就是将网卡启用和配置网卡,同样通过任务计划实现,代码如下:

#!/bin/bash
# 默认网卡 IP 获取方式为 DHCP,其他方式请自行修改
# 这里插入了 3 个网卡,所以是 {1..3},根据实际情况修改
# 默认接口名称是 usb*,可以参照上面修改 70-persistent-net.rules 实现接口重命名为 eth*

eth=usb
for i in {0..2}
do
e1=`ls /sys/class/net/ | grep $eth$i`
if [ -n "$e1" ]; then
    echo "    ** Found $eth$i, trying to activate now **"
    e11=`ifconfig | grep $eth$i`
    if [ -n "$e11" ]; then
        echo "    ** $eth$i has been activated already **"
    else
        ip link set $eth$i up
        e12=`ifconfig |grep $eth$i`
        if [ -n "$e12" ]; then
            ip link set $eth$i down
            touch /etc/sysconfig/network-scripts/ifcfg-$eth$i
            echo "BOOTPROTO=dhcp" >> /etc/sysconfig/network-scripts/ifcfg-$eth$i
            echo "DEVICE=eth$i" >> /etc/sysconfig/network-scripts/ifcfg-$eth$i
            echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-$eth$i
            ip link set $eth$i up
            echo "  ** $eth$i activated **"
        else
            echo "  !! $eth$i activation failed !!"
        fi
    fi
else
    echo "  !! $eth$i is unavailable !!"
fi
done

结果验证

完成以上步骤后,重启一下 NAS,登录 DSM 就可以看到网络接口已经启用了,内核日志也没有报错:

.......
[   70.081847] usbcore: registered new interface driver cdc_wdm
[   70.299143] cdc_ncm 2-1:2.0: MAC-Address: 00:e4:00:00:00:98
[   70.305417] cdc_ncm 2-1:2.0: setting rx_max = 16384
[   70.321609] cdc_ncm 2-1:2.0: setting tx_max = 16384
[   70.348125] cdc_ncm 2-1:2.0 usb0: register 'cdc_ncm' at usb-0000:00:15.0-1, CDC NCM, 00:e4:00:00:00:98
[   70.349364] cdc_ncm 2-1:2.0 eth1: renamed from usb0
[   70.520255] cdc_ncm 2-2:2.0: MAC-Address:00:00:3b:00:00:77
[   70.526537] cdc_ncm 2-2:2.0: setting rx_max = 16384
[   70.542563] cdc_ncm 2-2:2.0: setting tx_max = 16384
[   70.567765] cdc_ncm 2-2:2.0 usb0: register 'cdc_ncm' at usb-0000:00:15.0-2, CDC NCM, 00:00:3b:00:00:77
[   70.568557] cdc_ncm 2-2:2.0 eth2: renamed from usb0
[   70.583743] usbcore: registered new interface driver cdc_ncm
[   70.620407] usbcore: registered new interface driver cdc_mbim
.......

后记

记录一下在折腾过程中的一些技巧:

  • 尽量不要在网卡启用的使用直接拔掉,可能会导致 DSM 卡死;
  • 查看 USB 设备清单命令:ls -l /sys/bus/usb/devices/ 或者 lsusb
  • 查看网络接口清单:ls -l /sys/class/net/
  • 查看内核日志最近几条:dmesg | tail
  • 启用网络接口:ip link set eth1 up 或者 ifconfig eth1 up
  • 查看所有网络接口地址和对应的 MAC 地址:ip link | awk '{print $2}'
  • 查看网络接口详细信息:udevadm info /sys/class/net/eth1
  • 动态删除内核模块:rmmod /lib/modules/ax88179_178a.ko
  • 动态启用内核模块:insmod /lib/modules/ax88179_178a.ko
  • 命令行断开 USB 设备连接:echo 2-2 |sudo tee /sys/bus/usb/drivers/usb/unbind,其中 2-2 是通过 lsusb 查询得到的;
  • 命令行重新连接 USB 设备连接:echo 2-2 |sudo tee /sys/bus/usb/drivers/usb/bind

ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 教程编译群晖NASDSM免驱网卡驱动Synology 的文章

 本文最后更新于 2022/04/01 11:08:16,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 经验 > 成功在群晖 NAS 用上 USB 千兆网卡,完整使用教程

精选评论

  1. 欧文斯

    当接口是以 usb 命名时,DSM 无法识别到,需要改成 eth

    1. cd
      cd 回复

      Windows 10Chrome 115.0.0.0来自 亚太地区 的大神

      root@NAS:~# ls -l /sys/class/net/
      total 0
      lrwxrwxrwx 1 root root 0 Aug 5 16:42 bond0 -> ../../devices/virtual/net/bond0
      -rw-r--r-- 1 root root 4096 Aug 5 16:42 bonding_masters
      lrwxrwxrwx 1 root root 0 Aug 5 16:39 eth0 -> ../../devices/pci0000:00/0000:00:02.3/0000:02:00.0/net/eth0
      lrwxrwxrwx 1 root root 0 Aug 5 16:39 eth1 -> ../../devices/pci0000:00/0000:00:13.2/usb4/4-1/4-1:1.0/net/eth1
      lrwxrwxrwx 1 root root 0 Aug 5 16:39 lo -> ../../devices/virtual/net/lo
      lrwxrwxrwx 1 root root 0 Aug 5 16:39 sit0 -> ../../devices/virtual/net/sit0

  2. 求助
    求助 回复

    Windows 10Firefox 105.0来自 广东 的大神

    博主您好,我根据您的第二和第三篇教程顺利地将所需的模块编译了出来,但我不太理解最后网卡的配置与启用那个脚本,望您说明一下,感谢!
    (我是在unraid中安装的群晖DS918 ,连着两块网卡,一块是虚拟网卡,另一块是直通的usb网卡,ls -l /sys/class/net/得出的结果是:
    eth0 -> ../../devices/pci0000:00/0000:00:02.0/0000:01:00.0/virtio0/net/eth0
    lo -> ../../devices/virtual/net/lo
    sit0 -> ../../devices/virtual/net/sit0)

    1. 欧文斯

      我是实体机,默认情况下群晖 DSM 开机时不会自动加载第三方编译的驱动,所以这里我写了个脚本来启用。
      你可以试一下,重启之后你的两个网卡是否正常识别,如果正常,可以忽略脚本,如果没有识别到,就要相应写脚本来启用了。

  3. viitii
    viitii 回复

    Windows 10Chrome 106.0.0.0来自 火星 的大神

    root@NAS:/tmp/nas/00-mii# make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- #编译

    请问博主,这里语句是完整的吗?我执行到这里报错。

    1. 欧文斯

      是的,你看下后面那个目录是否存在

  4. cd
    cd 回复

    Windows 10Chrome 115.0.0.0来自 广东 的大神

    请问一下你用这个网卡做链路聚合的时候正常吗?我添加链路之后这个网卡就获取不到IP了

    1. 欧文斯

      我没有使用这个功能,理论上系统已经成功识别到网卡,使用上应该是没有问题的