群晖ds1517+解决第三方Marvell AQC107 10Gbe网卡驱动问题
转载注明来源: 本文链接 来自osnosn的博客,写于 2024-05-15.
说明
这是网友 mohawk 解决问题的经过,征得同意后,贴在这里。 给大家参考。
背景
- 好友打算升级到全屋有线万兆2.5g网络,陆续装备了路由器、交换机等,但家里的群晖ds1517+只支持千兆有线网络。
- 经过查询,ds1517+可用群晖自家的E10G18-T1扩展卡升级到10Gbe,网购价¥940,好友嫌贵,向我咨询。我上网简单查了下,E10G18-T1采用Marvell AQC107 10Gbe芯片,凭windows的使用经验想当然地认为,只要是AQC107芯片的网卡都应该能兼容ds1517+。
- 根据我的建议,好友花¥230购入第三方AQC107芯片网卡,到手插上开机,傻眼了:指示灯不亮,没任何反应,我远程到群晖系统后台察看,dmesg无提示,lspci -v能显示网卡信息。即该卡硬件已被识别,但无法驱动。
- 上网详细了解并试着做了一些简单操作才发现,群晖对第三方扩展卡可谓严防死守,驱动pid、vid除自家产品外没有一处多余的定义,网上有人按群晖扩展卡的pid、vid制作的所谓定制卡,价格虽比原厂便宜,仍较第三方卡贵不少,且涉嫌制假。国内外网友穷尽手段,有以DSM系统自带驱动为基础修改pid、vid的,群晖后续系统更新已修补漏洞,内核参数设置了强制要求数字签名,修改过pid、vid的驱动拒绝加载,移除数字签名也不行;有下载芯片厂商官方Linux驱动源代码,想利用群晖内核源代码和编译工具链toolchain进行驱动编译的,无奈群晖DSM系统不具备编译环境,即使通过第三方optware装上编译环境,群晖公布的内核源代码残缺不全,Linux标头欠奉,驱动编译根本无法通过。
- 好友找卖家退货,卖家以网卡已上过机、并无质量问题为由一口拒绝。尽管好友称用不了就算了,我依然感到压力巨大,并下定决心,一定要尽力解决这块网卡在群晖DSM系统下的驱动问题。
准备工作
升级DSM系统至最新版
- 好友的群晖ds1517+在用DSM系统版本为6.2.4-25556 Update 7,因DSM6均不含AQC107网卡驱动,也不含该驱动必须的内核变量,直接安装驱动出错(大量的Unknow symbol错误),必须先将系统更新至最新版本。按官网说明,经3次系统更新,顺利升级到最新版本DSM-7.2.1-69057 Update 5:
安装Debian系统作为编译平台
- 利用Unraid平台安装Debian 8.11.0到虚拟机(debian-live-8.11.0-amd64-standard.iso),系统内核版本是3.16.0-6,与ds1517+的3.10.108相对接近,Debian 7虽内核版本为3.20,更接近3.10,但系统更新、操作不太就手,故弃。ds1517+型号较老,既使系统升级到最新的DSM-7.2.1,内核仅从3.10.105升级到3.10.108,聊胜于无,但内置了更多的内核变量。稍新款的群晖,DSM-7.2.1固件内核已升级到4.4.x或5.10.x。
- Debian8安装过程中,添加网络源全部失败,因为Debian9及以下已失去官方支持,软件源归入archive,可先跳过,待安装结束后手动修改源。修改时尽量使用Debian官方archive源,国内archive源支持不好,分配的服务器带宽低,延迟大,甚至卡住:
cat /etc/apt/sources.list deb https://archive.debian.org/debian/ jessie main contrib non-free deb-src https://archive.debian.org/debian/ jessie main contrib non-free
下载kernel.org官方Linux 3.10.108内核
- 放在/usr/src下(以下未作定义时,/usr/src作为编译默认根目录)
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.108.tar.gz
下载Marvell AQC107最新Linux驱动
wget https://www.marvell.com/content/dam/marvell/en/drivers/marvell_linux_2.5.6.zip
安装内核编译所需软件包
apt-get install apt install kernel-package fakeroot build-essential ncurses-dev
安装screen用于后台编译,htop用于观察系统负荷等
apt-get install screen htop
下载群晖ds1517+对应的内核
wget https://global.synologydownload.com/download/ToolChain/Synology%20NAS%20GPL%20Source/7.2-64570/avoton/linux-3.10.x.txz
下载群晖ds1517+适用的最新toolchain
wget https://global.synologydownload.com/download/ToolChain/Synology%20NAS%20GPL%20Source/7.2-64570/avoton/linux-3.10.x.txz
编译及安装
解包
- 分别解包kernel.org官方内核、群晖内核、toolchain、AQC107驱动包。AQC107驱动包zip取出atlantic_2.5.6.tar.gz后再次解包,生成的Linux目录也放在/usr/src下
tar zxvf linux-3.10.108.tar.gz tar xvf linux-3.10.x.txz tar xvf avoton-gcc1220_glibc236_x86_64-GPL.txz unzip marvell_linux_2.5.6.zip tar atlantic_2.5.6.tar.gz
编译官方3.10.108内核
cd /usr/src/linux-3.10.108
获取当前系统内核运行参数,并复制给3.10.108内核作为默认参数cat /boot/config-`uname -r` > .config make oldconfig
- 将询问一大堆内核配置参数,按住回车不放全部默认即可,直到出现
# # configuration written to .config #
- 做一下源代码清理
make-kpkg clean
- 开始编译,time可进行编译计时,fakeroot可模拟root权限,-j2指定2颗CPU核心参与
time fakeroot make-kpkg -j2 --initrd kernel_image kernel_headers
官方内核编译完成后,分别安装内核及标头
dpkg -i ../linux-image-3.10.108_3.10.108-10.00.Custom_amd64.deb
dpkg -I ../linux-headers-3.10.108_3.10.108-10.00.Custom_amd64.deb
重启系统
设置交叉编译指令别名,x86_64-pc-linux-gnu即解包后的群晖toolchain所在目录
alias dsm6make='make ARCH=x86_64 CROSS_COMPILE=/usr/src/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-'
配置群晖内核
cd /usr/src/linux-3.10.x
- 复制群晖官方ds1517+内核配置
cp synoconfigs/avoton .config
- 进入menuconfig界面后,直接Exit退出,按提示保存设置
dsm6make menuconfig
编译网卡驱动
-
cd Linux dsm6make
-
经过对编译出错信息的观察,发现编译指令被解析为:
make -j4 -C /lib/modules/3.10.108/build M="/usr/src/Linux" modules
-
将目录调整改名,指向群晖内核:
mv linux-3.10.108 linux-3.10.108.bak mv linux-3.10.x linux-3.10.108
-
再次编译仍然出错,提示缺少文件或目录generated/autoconf.h,经过检查,缺少的是/linux-3.10.108/include/generated整个目录。
-
回到改名后的群晖内核,编译modules
cd ../linux-3.10.108 dsm6make modules
-
编译顺利通过,缺少的generated目录及相关文件已生成,再次编译网卡驱动:
cd ../Linux dsm6make
-
编译顺利通过,生成网卡驱动atlantic.ko
安装网卡驱动
- 卸载ds1517+的AQC107原驱动,装载新驱动:
rmmod atlantic.ko mv /lib/modules/atlantic.ko atlantic.ko.bak cp anywhere/atlantic.ko /lib/modules /sbin/insmod /lib/modules/atlantic.ko /sbin/ifconfig eth4 up
- 如顺利,在群晖控制面板-网络-网络界面下,应能看到“局域网5“
在群晖控制面板-任务计划,新增-触发的任务-用户自定义的脚本下,将上述指令最后2行输入,作为网卡开机指令。
资源及参考链接:
- 【群晖下载中心】
- 【Debian CDs/DVDs archive】
- 【The Linux Kernel Archives (kernel.org)】
- 【Marvell Ethernet Adapters and Controllers Support】
- 【隔壁网网友Lei_sjun贴子:历尽磨难,群晖Dsm7.0编译E10M20-t1(aqc107)网卡驱动,终获成功!】
----end----
转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/18196358.html
来自 osnosn的博客 https://www.cnblogs.com/osnosn/ .