温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
昨天尝试在《群晖 DSM 7.0 外接免驱 USB 千兆网卡(ASIX AX88179)》,虽然驱动成功装上,但是网卡并没有正常工作,搜索了一番,给的结论是不支持接在 USB 3.0 接口上,但是我的 DS218+ 只有 USB 3.0 接口,这就有点心塞。
群晖 NAS 使用的定制系统,网卡厂商没有提供对应的驱动,只给了驱动源代码,其实正常来说,在本机直接进行编译才是最适合本机的驱动,但是网上相关资源并不多,所以花了一天一夜功夫研究了怎么在群晖 NAS 系统里进行编译,终于功夫不负有心人,让我研究出来了,先看看成果:
用 iperf3 测试一下带宽:
root@NAS:~/AX88179_178A_Linux_Driver_v1.20.0_source# iperf3 -c 10.2.0.131 -p 13131 -P 1 -B 10.2.0.15 -R
Connecting to host 10.2.0.131, port 13131
Reverse mode, remote host 10.2.0.131 is sending
[ 5] local 10.2.0.15 port 54277 connected to 10.2.0.131 port 13131
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 109 MBytes 918 Mbits/sec
[ 5] 1.00-2.00 sec 109 MBytes 918 Mbits/sec
[ 5] 2.00-3.00 sec 112 MBytes 938 Mbits/sec
[ 5] 3.00-4.00 sec 110 MBytes 922 Mbits/sec
[ 5] 4.00-5.00 sec 111 MBytes 929 Mbits/sec
[ 5] 5.00-6.00 sec 110 MBytes 926 Mbits/sec
[ 5] 6.00-7.00 sec 110 MBytes 924 Mbits/sec
[ 5] 7.00-8.00 sec 110 MBytes 921 Mbits/sec
[ 5] 8.00-9.00 sec 111 MBytes 928 Mbits/sec
[ 5] 9.00-10.00 sec 112 MBytes 938 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.05 sec 1.08 GBytes 924 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.08 GBytes 926 Mbits/sec receiver
iperf Done.
root@NAS:~/AX88179_178A_Linux_Driver_v1.20.0_source# iperf3 -c 10.2.0.131 -p 13131 -P 1 -B 10.2.0.15
Connecting to host 10.2.0.131, port 13131
[ 5] local 10.2.0.15 port 39466 connected to 10.2.0.131 port 13131
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 113 MBytes 947 Mbits/sec 46 410 KBytes
[ 5] 1.00-2.00 sec 111 MBytes 935 Mbits/sec 27 349 KBytes
[ 5] 2.00-3.00 sec 110 MBytes 920 Mbits/sec 7 402 KBytes
[ 5] 3.00-4.00 sec 110 MBytes 920 Mbits/sec 26 345 KBytes
[ 5] 4.00-5.00 sec 109 MBytes 917 Mbits/sec 13 383 KBytes
[ 5] 5.00-6.00 sec 107 MBytes 899 Mbits/sec 2 397 KBytes
[ 5] 6.00-7.00 sec 110 MBytes 924 Mbits/sec 50 355 KBytes
[ 5] 7.00-8.00 sec 107 MBytes 900 Mbits/sec 16 389 KBytes
[ 5] 8.00-9.00 sec 110 MBytes 923 Mbits/sec 17 389 KBytes
[ 5] 9.00-10.00 sec 105 MBytes 879 Mbits/sec 10 332 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.07 GBytes 916 Mbits/sec 214 sender
[ 5] 0.00-10.05 sec 1.07 GBytes 911 Mbits/sec receiver
考虑到线路一定的损耗,可以认为网卡是可以跑满千兆的!
下面记录一下编译过程。
搭建环境
群晖开源文件下载站:Synology Archive Download Site。
驱动的 vermagic
要与内核一致方能加载,因此编译驱动需要在 DSM 内核中进行,群晖其实已经有提供 DSM 内核的关键部分,我们直接下载下来用即可,下载地址:ds.apollolake-7.0.dev.txz、ds.apollolake-7.0.env.txz、base_env-7.0.txz。
群晖 NAS 有很多 CPU 平台架构,需要下载相同架构的内核环境,编译出来的驱动才可以在 NAS 上正常使用,架构可以在官方网站上查到:我的 Synology NAS 使用哪種 CPU?,直接搜索自己 NAS 型号即可找到相应架构。
同样的,编译时需要使用与内核环境一致的编译工具 make
和 gnu
等,这个群晖也是有提供的,下载地址:apollolake-gcc750_glibc226_x86_64-GPL.txz。
接着到 ASIX 官网下载 Linux 版本驱动,下载页面地址:文件下载 | 亚信电子,目前最新版本驱动是 2020 年 04 月 27 日发布的 1.20.0 版本:Linux kernel 5.x/4.x/3.x/2.6.x Driver。
需要注意的是,群晖 DSM 自身使用的文件夹有大小限制(报错:Cannot open: No space left on device
),因此我们不能够将环境搭建在 /usr
目录下,可以使用 /tmp
目录,再通过 ln -s
命令进行链接。
下面是操作命令演示:
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 #到 /tmp 目录操作
root@NAS:~# mkdir nas && cd nas/ #创建一个目录,方便后续处理
root@NAS:/tmp/nas# wget -O base_env-7.0.txz https://cndl.synology.cn/download/ToolChain/toolkit/7.0/base/base_env-7.0.txz #下载内核环境
--2022-03-25 14:09:52-- https://cndl.synology.cn/download/ToolChain/toolkit/7.0/base/base_env-7.0.txz
Resolving cndl.synology.cn (cndl.synology.cn)... 58.254.138.21, 58.254.138.29, 58.254.138.16, ...
Connecting to cndl.synology.cn (cndl.synology.cn)|58.254.138.21|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1100497292 (1.0G)
Saving to: ‘base_env-7.0.txz’
base_env-7.0.txz 100%[==================================================================================>] 1.02G 5.12MB/s in 3m 36s
2022-03-25 14:13:29 (4.86 MB/s) - ‘base_env-7.0.txz’ saved [1100497292/1100497292]
root@NAS:/tmp/nas# wget -O ds.apollolake-7.0.dev.txz https://cndl.synology.cn/download/ToolChain/toolkit/7.0/apollolake/ds.apollolake-7.0.dev.txz
--2022-03-25 14:15:47-- https://cndl.synology.cn/download/ToolChain/toolkit/7.0/apollolake/ds.apollolake-7.0.dev.txz
Resolving cndl.synology.cn (cndl.synology.cn)... 58.254.138.135, 58.254.138.136, 58.254.138.139, ...
Connecting to cndl.synology.cn (cndl.synology.cn)|58.254.138.135|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 356648716 (340M)
Saving to: ‘ds.apollolake-7.0.dev.txz’
ds.apollolake-7.0.dev.txz 100%[==================================================================================>] 340.13M 7.29MB/s in 57s
2022-03-25 14:16:45 (5.96 MB/s) - ‘ds.apollolake-7.0.dev.txz’ saved [356648716/356648716]
root@NAS:/tmp/nas# wget -O ds.apollolake-7.0.env.txz https://cndl.synology.cn/download/ToolChain/toolkit/7.0/apollolake/ds.apollolake-7.0.env.txz
--2022-03-25 14:21:32-- https://cndl.synology.cn/download/ToolChain/toolkit/7.0/apollolake/ds.apollolake-7.0.env.txz
Resolving cndl.synology.cn (cndl.synology.cn)... 58.254.138.29, 58.254.138.16, 58.254.138.21, ...
Connecting to cndl.synology.cn (cndl.synology.cn)|58.254.138.29|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 439957764 (420M)
Saving to: ‘ds.apollolake-7.0.env.txz’
ds.apollolake-7.0.env.txz 100%[==================================================================================>] 419.58M 3.60MB/s in 88s
2022-03-25 14:23:01 (4.78 MB/s) - ‘ds.apollolake-7.0.env.txz’ saved [439957764/439957764]
root@NAS:/tmp/nas# wget -O apollolake-gcc750_glibc226_x86_64-GPL.txz https://cndl.synology.cn/download/ToolChain/toolchain/7.0-41890/Intel%20x86%20Linux%204.4.180%20%28Apollolake%29/apollolake-gcc750_glibc226_x86_64-GPL.txz #下载命令行工具
--2022-03-25 14:25:50-- https://cndl.synology.cn/download/ToolChain/toolchain/7.0-41890/Intel%20x86%20Linux%204.4.180%20%28Apollolake%29/apollolake-gcc750_glibc226_x86_64-GPL.txz
Resolving cndl.synology.cn (cndl.synology.cn)... 58.254.138.135, 58.254.138.133, 58.254.138.139, ...
Connecting to cndl.synology.cn (cndl.synology.cn)|58.254.138.135|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 79940764 (76M)
Saving to: ‘apollolake-gcc750_glibc226_x86_64-GPL.txz’
apollolake-gcc750_glibc226_x86_64-GPL.txz 100%[==================================================================================>] 76.24M 8.36MB/s in 11s
2022-03-25 14:26:02 (6.79 MB/s) - ‘apollolake-gcc750_glibc226_x86_64-GPL.txz’ saved [79940764/79940764]
root@NAS:/tmp/nas# tar -xf base_env-7.0.txz && tar -xf ds.apollolake-7.0.env.txz
root@NAS:/tmp/nas# tar -xf ds.apollolake-7.0.dev.txz && tar -xf apollolake-gcc750_glibc226_x86_64-GPL.txz
root@NAS:/tmp/nas# rm -rf *.txz #空间有限,解压后删除下载的文件
root@NAS:/tmp/nas# wget -O AX88179_178A_LINUX_DRIVER_v1.20.0_SOURCE.tar.bz2 'https://www.asix.com.tw/cn/support/download/file/120?time=1648188710919' #下载网卡驱动源代码
--2022-03-25 14:29:20-- https://www.asix.com.tw/cn/support/download/file/120?time=1648188710919
Resolving www.asix.com.tw (www.asix.com.tw)... 210.243.224.51, 113.196.140.82
Connecting to www.asix.com.tw (www.asix.com.tw)|210.243.224.51|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16419 (16K) [application/x-bzip2]
Saving to: ‘AX88179_178A_LINUX_DRIVER_v1.20.0_SOURCE.tar.bz2’
AX88179_178A_LINUX_DRIVER_v1.20.0_SOURCE. 100%[==================================================================================>] 16.03K --.-KB/s in 0.04s
2022-03-25 14:29:21 (422 KB/s) - ‘AX88179_178A_LINUX_DRIVER_v1.20.0_SOURCE.tar.bz2’ saved [16419/16419]
root@NAS:/tmp/nas# tar -xf AX88179_178A_LINUX_DRIVER_v1.20.0_SOURCE.tar.bz2 && rm -rf AX88179_178A_LINUX_DRIVER_v1.20.0_SOURCE.tar.bz2 #空间有限,解压后删除下载的文件
root@NAS:/tmp/nas# ls #准备好的环境文件
AX88179_178A_Linux_Driver_v1.20.0_source usr var x86_64-pc-linux-gnu
root@NAS:/tmp/nas# mkdir /lib/modules/4.4.180+ #链接开发环境
root@NAS:/tmp/nas# ln -s /tmp/nas/usr/local/x86_64-pc-linux-gnu/x86_64-pc-linux-gnu/sys-root/usr/lib/modules/DSM-7.0/build /lib/modules/4.4.180+/build
编译驱动
环境准备好后,编译就不难了,直接看代码演示:
root@NAS:/tmp/nas# cd AX88179_178A_Linux_Driver_v1.20.0_source/ #进入驱动源码目录
root@NAS:/tmp/nas/AX88179_178A_Linux_Driver_v1.20.0_source# ../bin/make ARCH=x86_64 CROSS_COMPILE=/tmp/nas/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- #开始编译驱动
make -C /lib/modules/4.4.180+/build M=/root/AX88179_178A_Linux_Driver_v1.20.0_source modules
make[1]: Entering directory '/tmp/nas/usr/local/x86_64-pc-linux-gnu/x86_64-pc-linux-gnu/sys-root/usr/lib/modules/DSM-7.0/build'
CC [M] /tmp/nas/AX88179_178A_Linux_Driver_v1.20.0_source/ax88179_178a.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/nas/AX88179_178A_Linux_Driver_v1.20.0_source/ax88179_178a.mod.o
LD [M] /tmp/nas/AX88179_178A_Linux_Driver_v1.20.0_source/ax88179_178a.ko
make[1]: Leaving directory '/tmp/nas/usr/local/x86_64-pc-linux-gnu/x86_64-pc-linux-gnu/sys-root/usr/lib/modules/DSM-7.0/build'
root@NAS:/tmp/nas/AX88179_178A_Linux_Driver_v1.20.0_source# ls #看一下编译出来的文件
ax88179_178a.c ax88179_178a.h ax88179_178a.ko ax88179_178a.mod.c ax88179_178a.mod.o ax88179_178a.o Makefile modules.order Module.symvers readme
root@NAS:/tmp/nas/AX88179_178A_Linux_Driver_v1.20.0_source# modinfo ax88179_178a.ko #看一下驱动模块信息
filename: /tmp/nas/AX88179_178A_Linux_Driver_v1.20.0_source/ax88179_178a.ko
license: GPL
description: ASIX AX88179_178A USB 2.0/3.0 Ethernet Devices
author: David Hollis
alias: usb:v0711p0179d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v2001p4A00d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04E8pA100d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0930p0A13d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v17EFp304Bd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0DF6p0072d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0B95p178Ad*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0B95p1790d*dc*dsc*dp*ic*isc*ip*in*
depends: usbnet,usbcore,mii
retpoline: Y
vermagic: 4.4.180+ SMP mod_unload
parm: msg_enable:usbnet msg_enable (int)
parm: bsize:RX Bulk IN Queue Size (int)
parm: ifg:RX Bulk IN Inter Frame Gap (int)
parm: bEEE:EEE advertisement configuration (int)
parm: bGETH:Green ethernet configuration (int)
root@NAS:/tmp/nas/AX88179_178A_Linux_Driver_v1.20.0_source# cd ~
加载驱动
接下来的步骤就跟《群晖 DSM 7.0 外接免驱 USB 千兆网卡(ASIX AX88179)》一样了,不再赘述,直接看命令:
root@NAS:~# wget -O ax88179_178a-4.4.180plus.tgz https://github.com/pocopico/rp-ext/raw/main/ax88179_178a/releases/ax88179_178a-4.4.180plus.tgz #下载别人编译好的驱动,提取其中 mii.ko
--2022-03-25 15:15:41-- https://github.com/pocopico/rp-ext/raw/main/ax88179_178a/releases/ax88179_178a-4.4.180plus.tgz
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/pocopico/rp-ext/main/ax88179_178a/releases/ax88179_178a-4.4.180plus.tgz [following]
--2022-03-25 15:15:44-- https://raw.githubusercontent.com/pocopico/rp-ext/main/ax88179_178a/releases/ax88179_178a-4.4.180plus.tgz
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.108.133, 185.199.109.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 103399 (101K) [application/octet-stream]
Saving to: ‘ax88179_178a-4.4.180plus.tgz’
ax88179_178a-4.4.180plus.tgz 100%[==================================================================================>] 100.98K 463KB/s in 0.2s
2022-03-25 15:15:45 (463 KB/s) - ‘ax88179_178a-4.4.180plus.tgz’ saved [103399/103399]
root@NAS:~# tar -zxf ax88179_178a-4.4.180plus.tgz && rm -rf ax88179_178a-4.4.180plus.tgz #解压驱动包
root@NAS:~# mv mii.ko /lib/modules/ #将驱动文件移动到系统目录
root@NAS:~# mv /tmp/nas/AX88179_178A_Linux_Driver_v1.20.0_source/ax88179_178a.ko /lib/modules/
root@NAS:~# insmod /lib/modules/mii.ko #加载依赖和驱动
root@NAS:~# insmod /lib/modules/usbnet.ko
root@NAS:~# insmod /lib/modules/insmod ax88179_178a.ko
root@NAS:~# dmesg |tail #看一下加载驱动有没有报错
[64083.163905] Found invalid EEPROM MAC address value FF-FF-FF-FF-FF-FF
[64083.308642] ax88179_178a 2-2:1.0 (unnamed net_device) (uninitialized): Found invalid EEPROM part or non-EEPROM
[64083.492960] ax88179_178a 2-2:1.0 (unnamed net_device) (uninitialized): Failed to read reg index 0x0040: -32
[64083.699491] ASIX USB Ethernet Adapter:v1.20.0 http://www.asix.com.tw
[64083.706718] ax88179_178a 2-2:1.0 (unnamed net_device) (uninitialized): mtu 1500
[64083.715200] ax88179_178a 2-2:1.0 eth1: register 'ax88179_178a' at usb-0000:00:15.0-2, , 00:0e:c6:8e:e6:91
[64083.725983] usbcore: registered new interface driver ax88179_178a
root@NAS:~# ifconfig #看一下现在的网络接口信息
eth0 Link encap:Ethernet HWaddr 00:00:32:9B:BB:FF
inet addr:10.2.0.111 Bcast:10.2.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2250986 errors:0 dropped:0 overruns:0 frame:0
TX packets:1936287 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1422787931 (1.3 GiB) TX bytes:1903508258 (1.7 GiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:394 errors:0 dropped:0 overruns:0 frame:0
TX packets:394 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:106894 (104.3 KiB) TX bytes:106894 (104.3 KiB)
root@NAS:~# ifconfig eth1 up #启用网卡,这是第二个网卡,所以是 eth1
root@NAS:~# ifconfig #再看一下现在的网络接口信息
eth0 Link encap:Ethernet HWaddr 00:00:32:9B:BB:FF
inet addr:10.2.0.111 Bcast:10.2.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2250986 errors:0 dropped:0 overruns:0 frame:0
TX packets:1936287 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1422787931 (1.3 GiB) TX bytes:1903508258 (1.7 GiB)
eth1 Link encap:Ethernet HWaddr 00:0E:C6:8E:E6:91
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:394 errors:0 dropped:0 overruns:0 frame:0
TX packets:394 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:106894 (104.3 KiB) TX bytes:106894 (104.3 KiB)
配置接口
接下来登录 DSM 管理页面对接口进行配置即可:
开机启用
同样的,再管理页面添加启动脚本:
其中,用户定义的脚本如下:
insmod /lib/modules/mii.ko
insmod /lib/modules/usbnet.ko
insmod /lib/modules/ax88179_178a.ko
ifconfig eth1 up
Windows 10Chrome 102.0.0.0来自 广东 的大神
关键步骤讲得一坨一坨的,网站还不让复制,这教程让人看得头都大
环境不同,不建议直接复制
Windows 10Chrome 121.0.0.0来自 新疆 的大神
开机任务 提示
insmod: ERROR: could not load module /root/mii.ko: Permission denied
insmod: ERROR: could not load module /root/usbnet.ko: Permission denied
insmod: ERROR: could not load module /root/ax88179_178a.ko: Permission denied
eth1: ERROR while getting interface flags: No such device
这个是怎么回事呢,已经启用了root了的
盼回复
应该跟 root 没关系,需要给这几个 .ko 文件设置一下权限,也有可能是路径问题,最好把文件复制到系统 .ko 目录下,然后用 ls -l 命令看下别的 .ko 文件的权限和归属,相应设置一下,就应该可以了