Intel X710和XL710 解锁 SFP模块限定
条评论背景
万兆网口卡中,Intel X520和X710用的比较多,虽然手头有一块X710,但一直没有启用,X520挺好用的,前几天同事说X710只能用Intel的SFP模块,不能用其他的比如华为SFP模块,感觉有点意思,就研究了下,这里做下记录,测试环境是Ubuntu 18.04,其他系统版本应该差不多。
解锁原理
根据intel官方的 X710 Datasheet,在NVM中有一个配置位会控制是否开启SFP模块准入。
解锁办法很简单,就是将这个地址数据的第11位清0即可。
解锁步骤
1、测试SFP模块是否兼容
ifconfig,看下网卡名,这里是enp1s0f0和enp1s0f1,SFP模块无法识别,指示灯也不亮,没有获取到IP。
2、更新固件
建议更新下网卡固件到最新版本,一般会修复一些bug,更新一些功能,当前是官方最新版本是8.30版本合集。
或者单独下载Linux版本
解压830升级包,执行:
1 | ./nvmupdate64e |
如果要更详细的显示,可以执行:
1 | ./nvmupdate64e -u -b -l -o update.xml -c nvmupdate.cfg |
如果询问是否备份时候选Y,会在当前目录下生成一个MAC地址名的文件夹,里面有备份的固件。
重启后生效:
1 | dmesg | grep nvm |
3、找出修改位置
升级完成后,可以导出固件,方法有多种,这里先讲用ethtool导出:
1 | ethtool -e enp1s0f0 > /root/nvm_830_0.txt |
检索MAC地址
,比如检索11 22 33 44 55 66
,在第三个地址的位置,大致如图所示:
特征很明显,0c 6b
就是目标位置,本质上是Datasheet中6.3.24 PHY capability data structure 0 section summary table
的0x0008
偏移。地址是0xd280
,因为是16位地址,所以除以2换算得到0x6940
。
4、修改配置位
国外有大咖提供了dump和改写的工具
下载下来后,需要修改下源码文件。
首先看下网卡ID,Intel X710是0x1572
,和官方介绍一致。
1 | lspci -nn |
修改mytool.c
文件,修改ID号和网卡名
先make下,报错可以不管,会先生成mytool
,可以用来读取nvm,读取0x6940
地址开始的64个字节。
1 | ./mytool 0x6940 0x40 > 0.txt |
可以看到和前面ethtool导出的是一致的,都是4个,因为x710最多有4个口,地址间距是0x0e
修改第11位为0,也就是将0x6b0c
改为0x630c
0110 1011 0000 1100
0110 0011 0000 1100
修改mypoke.c
文件,修改id、网卡名、地址、间隔、目标值
make
,然后运行mypoke
检查一下,四个口的配置都改了
1 | ./mytool 0x6940 0x40 > 1.txt |
重启,已经可以识别华为SFP模块了。
5、降级与恢复
如果修改有问题,可以通过降级再升级、恢复默认配置来修复。
在Intel官方可以搜索降级包,但需要注意的时候,必须基于当前版本,比如搜索8.30版本降级包
关键字:Intel® Ethernet Adapters 700 Series downgrade 8.30
随便下一个,比如就8.30-8.00
和升级一样,解压,运行./nvmupdate64e
降级,./nvmupdate64e -rd
恢复默认配置
注意:如果修改好了网卡,后续再执行恢复默认配置的操作,配置位会恢复回去,需要重新改写。
结语
升降级时候如果有备份固件,可以用hex编辑器打开看固件。
也可以直接用编程器读背面的Flash,可以读出固件改配置位完再写回去,很简单。