天气与日历 切换到宽版
扫描二维码关注官方公众号
返回列表 发布新帖

[讨论/分享] 历尽磨难,群晖Dsm7.0编译E10M20-t1(aqc107)网卡驱动,终获成功!

 火...
24234 255
发表于 2022-2-6 22:30:42 | 显示全部楼层 阅读模式

来吧兄弟,一起玩一起讨论!

您需要 登录 才可以下载或查看,没有账号?注册

×
       节前给群晖Ds1821+和威联通1635AX组建10G网络时,在京东选购了E10M20-T1组合适配卡踩雷,上机无法识别,连指示灯都不亮,平台入驻商家以拆包影响二次销售为由,拒绝退货,交涉多天无果,不得已只能自己研究驱动。
       对于NAS和Linux小白的我来说,有幸找到了gebi论坛大家庭,开始如饥似渴地查看大佬们的教程,学到了非常宝贵的经验,通过近1个月的摸索,完成了下面多个环节的实践:
  •     Nas SSH开启及Root权限登录、Putty、Winscp工具软件使用
  •     Ubuntu虚拟机安装、开发环境搭建make、gcc、Linux-headers、build-essential等
  •     群晖Dsm下IPKG、make工具、交叉编译工具包toolchain部署;
  •     Linux 4.4.180内核编译、群晖内核源码编译;
  •     群晖linux headers头文件提取、Linux内核编译、网卡驱动编译;
         通过多次实验,已成功在Ubuntu 16.04.01、群晖Dsm 7.0下使用群晖linux 4.4.x内核源码及toolchain编译工具,顺利完成了aqc107官方驱动Marvell  Linux Driver 2.4.15.0的编译。
          现整理一下摸索和折腾的过程,发贴分享,希望能帮到同样困扰的朋友,
          其中还有好多不明白的地方,望得到有经验的大佬指点!
感谢以下贴子分享经验的大佬!
http://www.gebi1.com/forum.php?mod=viewthread&tid=284575
http://www.gebi1.com/forum.php?mod=viewthread&tid=264555
http://www.gebi1.com/forum.php?mod=viewthread&tid=84086
http://www.gebi1.com/thread-300273-1-1.html
http://www.gebi1.com/thread-63718-1-1.html
http://www.gebi1.com/thread-264733-1-1.html
     
(以下内容以记录自己的折腾经历为主,过程曲折并且冗长,编译方法请直接跳转Part 8,
  有耐心的朋友且听我辗转道来)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  想要编译后驱动的直接戳这里:
游客,如果您要查看本帖隐藏内容请回复


Part 1: 购卡踩雷
          在采购E10M20-T1适配卡时,对群晖限制第三方网卡使用已有所耳闻,因此还特意去官网看了DS1821兼容列表,原打算是买E10G18-T2的,在京东搜索群晖万兆网卡时,1800元的价格真心觉得不便宜,正在犹豫不决时,看到了E10M20-T1的推荐,相同的价格可以同时获得10G网卡和M.2 SSD缓存,是不是觉得群晖产品还蛮良心了,网上搜了搜评测文章,看到E10M20-T1跟E10G18-T2采用了相同的Aquantia AQtion 107芯片,感觉问题不大就下了单,没想到历经30来天的恶梦就此展开了....
E10M20-T1.jpg


  板卡送到时,第一时间就拆包上机,原想着很快就能体验到10G高速网络啦,然而进到DSM控制面板网络界面,局域网5并没有出现,再查看NAS才发现网卡指示灯都不亮,重新拔插一次通电,故障依旧,此时才意识到麻烦来了。
    赶紧联系客服,说板卡不能使用该怎么办,能不能找技术人员给发个驱动呀。客服没说别的,问了Nas型号后就要求拍摄网卡照片,看到已拆包装就一再说不能退货。在群晖官网发了一份技术支持工单,第2天工程师回复了,说E10M20-T1不在DS1821+兼容列表中,无法识别,也不能提供驱动,建议我跟商家协商换货。
       这下我就彻底懵了,生怕买了第三方(便宜)网卡群晖不兼容,花高价买你群晖原厂产品,用在群晖NAS上反倒不行,商家不退货,技术不支持,把咱消费者的利益放在那里了?这事儿不能就这么算,必须讨个说法。先是在京东投诉,商家一直推责,京东客服说商家在产品页面上提示了开封不能退,从普通客服到交易纠纷专员,说来说去也没解决问题。拖了2周以后,到12315网站以产品厂家不提供驱动技术支持,商家不履行三包义务为由发起了维权投诉,目前相关单位正在受理中...
      在漫长的维权过程中,正值疫情蔓延,快递停运,板卡想出闲鱼也都发不了货,反正也有时间,就来折腾一下吧。

Part 2: 认知板卡

  
将板卡取下来插台式机上,Windows 10到是直接识别到新网卡了,不过仔细一看,型号识别为E10G18-T1了?
WIN10-网卡识别为E10G18-T1.png
硬件ID 07B1 10017053

E10G18-T1-PVID.png
    想起DS1821+的兼容列表中是有E10G18-T1的,既然芯片相同却不能识别,应该就是硬件ID 被限制了。根据多年折腾Windows系统的经验,感觉原厂aqc107网卡可以使用,只要找到适合E10M20的驱动,问题应该就能解决。于是乎,开启了四处搜索E10M20-T1资料的漫漫长路。
先在这里看到板卡的拆机图,确定网卡芯片是Aquantia AQtion 107 B1
3c6764a94c72d3a8b08c8f8a7d346b4f7075cce2.jpg@942w_668h_progressive.jpg

然后看到有网友成功编译E10M20-T1驱动的贴子,就厚起脸皮去取经,他转发了一个英文论坛的贴子,
aqc107 work_1.jpg
aqc107 work_2.jpg
看起来好像并不复杂,确实是群晖通过PID VID限制了atlantic驱动程序的兼容性。
这位大佬在原贴里分享了自己编译好的驱动,看介绍,驱动里面包含了非常多的硬件ID,我的板卡应该也能驱动!
将下载的atlantic.ko传到Nas /lib/modules,使用insmod命令加载,始终报Invaild module format,再搜了几位大佬编译好的aqc107驱动,也是同样的报错,拣现成驱动的想法搁浅~
Ko6.2-Invalid.png
虽然暂时没有成功,但有大佬成功案例指引,让我觉得还是蛮有希望的。


Part 3: Dsm编译环境搭建困难重重
      既然拣现成的不行,那就得自己动手啦~
     在Marvell网站找来aqc107的Linux驱动源码,在DSM界面开启SSH,Putty连接Nas,再用Winscp把驱动上传到Nas里,在Dsm下自行编译,感觉驱动很快就能成功啦!
      然而理想是美好的,现实却总是残酷,好不容易通过SSH进入到DSM后台界面,第一条命令就碰壁了!
make :command not found
make not found.png
  找熟悉Linux的朋友远程协助,不仅make命令无法执行,安装工具apt也没有,应该是群晖Dsm里作了限制,删除了一些基本命令,他说搭建编译环境蛮复杂的,建议我别再折腾啦!
   不死心网上到处搜索资料,找到通过添加IPKG安装工具,为DSM安装软件;
详细步骤参考这里:https://blog.csdn.net/qq_37946291/article/details/108421382
   安装好IPKG工具后,给DSM装上了make automake等组件
   make驱动可以执行了,然而执行过程总是报错
No rule to make target 'modules' stop
No Rule to make target.png
   我这个Linux小白想不明白问题在那,找朋友询问,还是说编译环境有问题, 到了这一步就困住了
网上搜索No rule to make target 'modules'的资料,也大多说是编译环境的问题
查看Marvell驱动里的readme说明,放在第一条的也是说要确保具备Linux头文件和编译工具

Marvell Build.png
然而看似简单的一条命令,在群晖DSM里却走成死胡同
由于apt命令被删除,通过IPKG安装make gcc都顺利,却无法安装linux-headers build-essential
接下来的好几天里,都在网上搜索linux-headers和build-essential相关资料,添加源、离线包都尝试个遍,始终无法突破。
这个时候,想起朋友说的话,NAS里搭建编译开发环境真的不容易!
    或许真的应该放弃?


Part 4: Ubuntu交叉编译格式不匹配

   在DSM里直接编译不成,归结为环境受限,因此对于具备折腾精神的我来说还不死心 。
在这几天里,也看了不少关于编译相关的资料,DSM里不行,就搭个虚拟机试试吧。

   为了尽量接近群晖Dsm的内核版本,我还把ubuntu虚拟机重新安装了好几版,
       unbuntu 16.04在Win10 Hyper-v下安装过程中重启时会卡住,强制关机都不行,放弃;
       unbuntu 16.04.01内核版本4.4.0-31-generic安装到是顺利,但编译网卡驱动时会有好多waring警告;
       unbuntu 16.04.02安装完内核版本4.8.0-52-generic,编译网卡驱动时也有waring警告;
       unbuntu 16.04.03安装完内核版本4.13.26-generic,编译网卡驱动时没有waring警告,但又有其它报错;
       unbuntu 18.04 lts内核版本5.4.0-97-generic,版本在编译过程一切顺利,以为胜券在握。
   但编好的驱动,传到Nas里insmod加载报错invalid module format,
invalid format.png
modversions.png


这个环节卡住了很长时间,后面查看这个贴子时得到启发,

  http://www.gebi1.com/thread-264733-1-1.html  https://blog.csdn.net/ymangu666/article/details/22872439
  通过下面的方法得到解决
   
游客,如果您要查看本帖隐藏内容请回复


modinfo.png
比较了群晖官方自带的驱动,编译后的atlantic.ko内核版本一致

atlantic.ko版本信息.png
  到了这一步,虽然编译得到的atlantic.ko insmod加载时不再报Invalid module format,
  但又出来新的报错unknown symbol in module
unknown symbol.png
在这里卡了好多天,搜索资料应该是依赖的驱动未加载
从modinfo atlantic.ko驱动里的depends看到,依赖crc-itu-t,ptp
在Ubuntu虚拟机里测试
先执行modprobe crc-itu-t
再modprobe ptp
insmod atlantic.ko成功,
然而相同的方法在群晖Nas里却不行,因为找不到ptp驱动
又费了好多时间,在Nas下使用源码单独编译ptp驱动,编译虽然成功,却又开始报invalid format了....

PTP编译.png

心中一万个~~~飘过,该死的群晖,你到底作了什么手脚,想编译个驱动咋就这么难呀


Part 5: Linux 4.4.180内核编译
      随着查阅资料的增多,开始仔细审视每一步的细节,Marvell网卡驱动的源码里,include引用了不少linux源文件,编译成功的大佬们都在说一件事,linux下编译驱动,内核版本、config配置尽量相同才能成功。看到好几个贴子都有采用群晖源码编译linux内核的步骤,虽然不大明白为啥要连同linux内核一起编译,前面编译环境是在ubuntu 16.04和18.04下,内核版本跟4.4.180+均不相同,在没找到问题所在之前,不如也来一次尝试。
      费不少时间找到了Linux 4.4.180的源码,
http://ftp.sjtu.edu.cn/sites/ftp ... inux-4.4.180.tar.gz
   又开始四处找linux内核编译资料、B站看视频,一步一步照着教程
将下载的源码包传到/opt目录,然后运行tar zxvf linux-4.4.180.tar.gz解压缩,得到linux-4.4.180目录
tar_zxvf.jpg

       make x86_64_defconfig
       make menuconfig
       make -j4
       make modules_install
       make install
make_install.png
    好不容易完成了,unbuntu重启系统,
uname -a 显示内核版本自动升级为4.4.180,满怀希望地编译驱动,过程一切顺利
然而放到Nas里面insmod加载,仍然报unkown symbol in module错误
ubuntu_4.4.180_unkown.png


Part 6:走捷径偏方

  在论坛苦苦搜索资料的期间,看到这位大佬分享的经验,
http://www.gebi1.com/thread-300727-1-1.html
依葫芦画瓢,尝试一下居然成功!
游客,如果您要查看本帖隐藏内容请回复


  Winscp传入魔改后的KO文件,激动人心的时刻到了
SSH命令行insmod atlantic.ko,修改后的驱动居然加载成功!
再ifconfig eth4 up,控制面板网络界面,也出现了局域网5的网卡,
手动设置IP后,Web页面访问、ssh连接一切正常,再SMB共享文件拷贝一部79G的4K电影,一切正常。
网卡识别.png
 至此,E10M20-T1这片板砖,终于不用砸自己手里啦~~~

Part7:  DSM手动添加headers顺利编译看到希望

   在虚拟机里折腾好多天以后,虽然使用 5.4.0-97-generic的头文件能顺利编译,但得到的atlantic.ko报unkown symbol in module的错误始终无法解决。
感觉在Nas原始环境下编译成功的几率会高一些,所以再次进行了尝试。

   由于群晖Dsm里删除了很多linux命令,没有apt安装工具,   添加IPKG后,也始终无法添加linux-headers及build-essential,
尝试手动下载apt的离线安装包,在dpkg -i时始终报签名错误,没有进展...
   后来在某篇贴子里提及把Linux源文件直接拷贝到相应目录的方法得到启示,

    尝试把5.4.0-97-generic里面的所有文件通过winscp工具,拷贝到/lib/modules/4.4.180+/build目录里(Marvell驱动的Makefile里引用到这个位置),make 编译时不再报错,成功得到atlantic.ko。
Dsm编译过程.png
    不过跟在Ubuntu下一样,使用insmod atlantic.ko时仍然报错unkown symbol in module,

                               
登录/注册后可看大图

真是个磨人的小妖精....搞得我人都快崩溃了

Part 8: 群晖linux内核编译失败但意外得到可用的Linux headers头文件


     春节期间休息了几天...
     有空的时候还在继续查看linux驱动编译相关的贴子,其中有一篇提到,驱动编译最好要保障linux内核版本、Linux 头文件、.config配置文件都要完全相同...
     梳理一下前面所有的动作,在ubuntu不同版本下,编译时表现均不相同,只有5.4.0-97-generic编译顺利,但最终仍然不能使用,看来想要在群晖DSM下使用,还得找到官方源代码;
     其实前期也找过群晖源代码,不过由于群晖官网改版,GPL Source目录非常多,一开始没看到找到Linux-4.4.x的源文件下载,后来仔细查看,终于在官网GPL Source里找到了Linux-4.4.x的源码。https://global.download.synology ... 000/linux-4.4.x.txz小小激动了一下

                               
登录/注册后可看大图

     虚拟机还原到刚安装的状态,把下载的linux-4.4.x.tar使用Winscp传到/lib/modules/4.4.180+/里,解压缩后再把linux-4.4.x目录修改为build
     进入aqc107源码目录开始编译...这次又报错了

generated.autoconf.png
   在Winscp里反复查看linux源码,再跟ubuntu虚拟机进行比对,发现include目录下少了generated目录,把ubuntu里的generated目录拷过来,安装会报其它错,看来还是不行;
   思来想去,只能在ubuntu下编译群晖内核这条路了;
根据这篇贴子的指引:http://www.gebi1.com/forum.php?mod=viewthread&tid=84086
   群晖的内核编译跟linux 4.4.180稍有不同,群晖源码里多了一个synoconfigs的目录,里面有很多架构的配置文件
synoconfigs.png
  在make menuconfig之前,先拷贝Ds1821对应的v1000作为配置文件
   cp synoconfigs/v1000 .config
  再make menuconfig,按默认设置保存
synology menuconfig.png
  make -j4 CROSS_COMPILE=x86_64-pc-linux-gnu-
  内核编译开始了...不过很快就开始报错了,
网上查找hydrogen.h无果,有贴子说是内核源码需要签名,看来群晖公布的源码并不完整

hydrogen没有.png

  下一步make modules_install
bzimage_missing.png
   根据前面linux 4.4.180内核编译的经验,到这里应该又进行不下去了...

柳暗花明

在查阅资料的间隙,Winscp查看源代码目录,无意间发现前面缺失的generated目录出现了
那再来试试网卡驱动编译呢?
    修改utsrealse.h里的版本号为4.4.180+后,将linux-4.4.x整个目录拷贝到/usr/src,然后修改为Ubuntu现有内核对应的头文件目录(linux-headers-4.4.0.31-generic)
再一次进到网卡驱动目录/opt/Marvell_Linux_2.4.15/Linux
make CROSS_COMPILE=x86_64-pc-linux-gnu-
编译过程顺利
Dsm_compile.png
把编译后的ko驱动传到Nas里,
insmod atlantic.ko居然没有报错,卡壳这么多天的问题,居然我误打误撞的搞成功啦!

   看来相同的linux-headers头文件和.config配置才是关键中的关键!!!
Synology E10M20识别.png

折腾过程总结
(等我研究明白了,再慢慢完善)

1、在虚拟机里安装Ubuntu 16.04.01,设置ssh访问并开通root用户登录


2、在官网查看,Ds1821+对应V1000 x86_64架构

Dsm内核版本号.png

下载对应版本的群晖Toolchain开发工具包,解压缩到一个目录
  
gcc750.png

   添加开发包路径
etc_profile.png
  查验gcc版本,如下提示代表成功
gcc-version.png


3、修改群晖源码Makefile版本号
MakeFile-版本号.png
 如编译后报invaild module format,就再修改Vermagic.h

4、群晖内核编译,得到可用的linux-headers头文件
      进入linux-4.4.x源码目录
     make -j4  CROSS_COMPILE=x86_64-pc-linux-gnu-
     中途会报错,但不影响linux-headers头文件的生成,执行完毕可以将整个linux-4.4x目录拷贝到linux-headers对应的的目录;
ubuntu下是/usr/src/
     群晖Dsm下对应/lib/modules   

      在/lib/modules下新建4.4.180+,再新建子目录build,将提取好的linux-headers文件解出来,

      文件拷贝到/lib/modules/4.4.180+/build
     (提取好的Linux-headers文件已发网盘
5、下载、编译网卡源代码

      将网卡源代码传到/opt/aqc107
      make  CROSS_COMPILE=x86_64-pc-linux-gnu-
      编译得到驱动文件atlantic.ko

6、网卡驱动加载及自启动脚本
   备份官方原始驱动/lib/modules/atlantic.ko,然后删除
   将编译好的atlantic.ko拷贝到/lib/modules,
    (对于winhex修改官方atlantic.ko,需要先卸载已加载的驱动rmmod atlantic,自行编译的不需要)
    insmod atlantic.ko
    执行后无报错,即为加载成功
    加载驱动后,控制面板还不会出现局域网5
    需要再执行ifconfig eth4 up ,控制面板才会识别到第5块网卡;
    (其中eth4的4,是由网卡数量-1排序得到,比如我的Ds1821+原本就有4个1000M,排序分别是eth0..eth1...eth3,新加的10G网卡是第5块,所以是eth4)
    上面的命令可以通过在控制面板新建一个脚本,加NAS重新启动时自动运行。
任务计划.png








评论255

简简单单Lv.5 发表于 2022-2-7 14:10:09 | 显示全部楼层
强大,感谢分享
回复 点赞

使用道具 举报

netusbLv.7 发表于 2022-2-7 14:46:37 | 显示全部楼层
因为是白裙,只能编译
不是白裙可以考虑
其他虚拟系统平台上使用,再安装黑群晖
-------
还有另外一种思路:ubuntu 编译 entware-,编译你要的驱动
群晖安装 entware,通过安装opkg install 网卡驱动.ipk
回复 点赞

使用道具 举报

wu0leiLv.5 发表于 2022-2-7 16:49:44 | 显示全部楼层
支持楼主
回复 点赞

使用道具 举报

金色之剑VIPLv.3 发表于 2022-2-7 17:15:50 | 显示全部楼层
好东西,谢谢分享!!!
回复 点赞

使用道具 举报

cheong0hkLv.10 发表于 2022-2-7 18:19:48 | 显示全部楼层
感谢分享
回复 点赞

使用道具 举报

流云畅想的记忆Lv.1 发表于 2022-2-8 00:05:07 | 显示全部楼层
谢谢楼主分享 不知道 黑群可不可以用
回复 点赞

使用道具 举报

sddataLv.3 发表于 2022-2-8 08:38:09 | 显示全部楼层
感谢分享!
回复 点赞

使用道具 举报

sanmylhLv.10 发表于 2022-2-8 16:22:13 | 显示全部楼层
谢谢楼主分享 不知道 黑群可不可以用
回复 点赞

使用道具 举报

sungo1000Lv.2 发表于 2022-2-8 16:38:40 | 显示全部楼层
好东西6666666
回复 点赞

使用道具 举报

kv6u6p0mLv.4 发表于 2022-2-8 16:51:52 | 显示全部楼层
谢谢楼主分享
回复 点赞

使用道具 举报

sungo1000Lv.2 发表于 2022-2-8 17:13:23 | 显示全部楼层
你好,请问有1821可以编译好的驱动吗?
回复 点赞

使用道具 举报

wuqiyu007SVIPLv.10 发表于 2022-2-8 17:13:30 | 显示全部楼层
强大,感谢分享
回复 点赞

使用道具 举报

假大空Lv.6 发表于 2022-2-8 19:51:15 | 显示全部楼层
看下。折腾精神可嘉
回复 点赞

使用道具 举报

laddieLv.3 发表于 2022-2-8 20:00:50 | 显示全部楼层
生命在于折腾
回复 点赞

使用道具 举报

Lei_sjunVIPLv.5 发表于 2022-2-8 20:51:59 | 显示全部楼层
sungo1000 发表于 2022-2-8 17:13
你好,请问有1821可以编译好的驱动吗?

等我把贴子整理完,可以把编译好的aqc107驱动发上来
谢谢啊 
发表于 2022-9-20 12:49
回复 点赞

使用道具 举报

xcgfLv.4 发表于 2022-2-9 09:46:57 | 显示全部楼层
非常感谢你提供这个啊  
回复 点赞

使用道具 举报

觅凤的梧桐Lv.10 发表于 2022-2-9 10:08:24 | 显示全部楼层
学习一下,这个很好
回复 点赞

使用道具 举报

3008086Lv.10 发表于 2022-2-9 11:54:58 | 显示全部楼层
感谢楼主的分享!
回复 点赞

使用道具 举报

jinmaoluoLv.2 发表于 2022-2-10 14:52:23 | 显示全部楼层
学习学习,真是技术贴
回复 点赞

使用道具 举报

回复

懒得打字嘛,点击右侧快捷回复 【本站酷狼4T,750元】
您需要登录后才可以回帖 登录 | 注册

本版积分规则

投诉/建议联系

support@gebi1.cn

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2024 隔壁网 版权所有 All Rights Reserved. 粤ICP备14056481号-1
关灯 快速发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表