搭建群晖 Synology NAS 开发环境,自编译网卡等驱动

小助手读文章 00:00 / 00:00

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

昨天尝试在《群晖 DSM 7.0 外接免驱 USB 千兆网卡(ASIX AX88179)》,虽然驱动成功装上,但是网卡并没有正常工作,搜索了一番,给的结论是不支持接在 USB 3.0 接口上,但是我的 DS218+ 只有 USB 3.0 接口,这就有点心塞。

群晖 NAS 使用的定制系统,网卡厂商没有提供对应的驱动,只给了驱动源代码,其实正常来说,在本机直接进行编译才是最适合本机的驱动,但是网上相关资源并不多,所以花了一天一夜功夫研究了怎么在群晖 NAS 系统里进行编译,终于功夫不负有心人,让我研究出来了,先看看成果:

网卡联机成功.jpg

用 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.txzds.apollolake-7.0.env.txzbase_env-7.0.txz

该下载哪个版本?

群晖 NAS 有很多 CPU 平台架构,需要下载相同架构的内核环境,编译出来的驱动才可以在 NAS 上正常使用,架构可以在官方网站上查到:我的 Synology NAS 使用哪種 CPU?,直接搜索自己 NAS 型号即可找到相应架构。

同样的,编译时需要使用与内核环境一致的编译工具 makegnu 等,这个群晖也是有提供的,下载地址: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 管理页面对接口进行配置即可:

编辑接口信息.jpg

开机启用

同样的,再管理页面添加启动脚本:

运行命令

其中,用户定义的脚本如下:

insmod /lib/modules/mii.ko 
insmod /lib/modules/usbnet.ko 
insmod /lib/modules/ax88179_178a.ko 
ifconfig eth1 up

新增触发任务.jpg


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

推广

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

 本文最后更新于 2022/03/27 18:18:19,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 经验 > 搭建群晖 Synology NAS 开发环境,自编译网卡等驱动

精选评论

  1. 1
    1 回复

    Windows 10Chrome 102.0.0.0来自 广东 的大神

    关键步骤讲得一坨一坨的,网站还不让复制,这教程让人看得头都大

    1. 欧文斯

      环境不同,不建议直接复制

  2. 漫游的风
    漫游的风 回复

    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了的
    盼回复

    1. 欧文斯

      应该跟 root 没关系,需要给这几个 .ko 文件设置一下权限,也有可能是路径问题,最好把文件复制到系统 .ko 目录下,然后用 ls -l 命令看下别的 .ko 文件的权限和归属,相应设置一下,就应该可以了