背景

万兆网口卡中,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 table0x0008偏移。地址是0xd280,因为是16位地址,所以除以2换算得到0x6940

4、修改配置位

国外有大咖提供了dump和改写的工具

下载下来后,需要修改下源码文件。

首先看下网卡ID,Intel X710是0x1572,和官方介绍一致。

1
lspci -nn

修改mytool.c文件,修改ID号和网卡名

先make下,报错可以不管,会先生成mytool,可以用来读取nvm,读取0x6940地址开始的64个字节。

1
2
./mytool 0x6940 0x40 > 0.txt
cat 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
2
./mytool 0x6940 0x40 > 1.txt
diff 0.txt 1.txt

重启,已经可以识别华为SFP模块了。

5、降级与恢复

如果修改有问题,可以通过降级再升级、恢复默认配置来修复。

在Intel官方可以搜索降级包,但需要注意的时候,必须基于当前版本,比如搜索8.30版本降级包
关键字:Intel® Ethernet Adapters 700 Series downgrade 8.30

随便下一个,比如就8.30-8.00

和升级一样,解压,运行./nvmupdate64e降级,./nvmupdate64e -rd恢复默认配置

注意:如果修改好了网卡,后续再执行恢复默认配置的操作,配置位会恢复回去,需要重新改写。

结语

升降级时候如果有备份固件,可以用hex编辑器打开看固件。

也可以直接用编程器读背面的Flash,可以读出固件改配置位完再写回去,很简单。

参考网址1
参考网址2