Linux下eeupdate64e改MAC与i350/xl710固件烧录实操

发布时间:2026/10/24 19:46:53
Linux下eeupdate64e改MAC与i350/xl710固件烧录实操

简介:这份文档面向具备 Linux 基础与网络硬件知识的运维、开发人员,聚焦 eeupdate64 工具在 x86 平台下对 I210、I350、82575/6、XL710、E810 等网卡的 MAC 地址修改与固件烧录。内容按前期准备、软件适配、i350 与 xl710 实操、全新网卡从零烧录的顺序展开,涵盖单口与多口 MAC 批量写入、.eep 固件制作与回写、.bin 与 .eep 烧录耗时差异,以及烧录后用 ping 验证网口连通性的完整闭环。文中还给出 eeprom less 状态识别、device ID 由 151F 变为 1521、主板自带网口需避让、多口地址连续分配等排错提示,并强调操作前关闭主机、拔掉电源线、在未上电插槽安装网卡,完成后重启核对地址,以降低误改风险。压缩包内为 1 个 docx,约 1.09MB,按操作阶段组织,适合边做边查。已有 1809 人学习,可用于服务器部署、网络环境变更、网卡底层配置与故障复现等场景。

1. 从一块认不出的网卡说起:eeupdate64 在 Linux 下到底改什么

仓库里翻出来的一块 i350,插进机器,ip l里干干净净,连个网口都不给看;eeupdate64e一跑,回你一句eeprom less。不少人到这一步就判定卡坏了,其实这张卡的 EEPROM 里既没有固件也没有 MAC,需要先用 Linux 系统下的 eeupdate64 工具把固件烧进去,再写 MAC 地址。这类活在网卡返修、整机出厂、服务器换板之后特别常见,i210、i350、82575/6、xl710、e810 都在支持列表里。这篇记录按装机顺序走:先把 x86 平台和目录结构列清,再分别落地 i350 与 xl710 的 MAC 地址修改和固件烧录,最后给出跑不通时的排查表和一条能闭环的验证路径。

2. 环境先列清:eeupdate64e 解压、授权与驱动安装的三个位置

2.1 硬件与系统清单:一台 x86 机器、两块网卡、一个光转电模块

这套活儿的门槛不在命令,在物料。少一样就得中途拆机,拆完还得重新走一遍断电流程。我一般按下面这张表备料,一次性摆到工位上再动手。

物料用途注意点
x86 主板 PC 一台烧录主机,装 Linux 系统必须是物理机,虚拟机里认不到 PCI Device ID
i350 网卡一块本次改 MAC、烧固件四口千兆,PCIe 插槽供电
xl710 网卡一块本次烧固件光口,验证时要光转电模块
键盘、显示器各一个进系统敲命令、必要时进 BIOS 看枚举远程 SSH 在卡没起来时救不了场
可连内网的网线一根最后 ping 验证长度够到交换机
电源线两根主机与显示器中途要断电插卡,别用排插总控
光转电模块一个xl710 光口转 RJ45没有它,xl710 烧完也 ping 不了

为什么强调物理机:eeupdate64e干的是直接读写网卡 EEPROM / Flash 的活,靠的是 PCIe 配置空间里的 Device ID 来定位设备。虚拟机呈现给你的是一层虚拟网卡,Device ID 对不上,工具列出来的列表里根本没有目标卡。就算做了 PCIe 直通,主机 BIOS 对插槽的枚举、上电时序这些东西仍然绕不开,出问题时排查面反而更大。所以这类烧录我一律用一台带标准 PCIe 插槽的 x86 机器,系统装最小化的 Linux 就行,不需要图形界面。

光转电模块容易被漏掉。xl710 常见的是 SFP+/QSFP+ 光口,烧录阶段用不到它,但最后验证 ping 的时候,手上只有一根 RJ45 网线是插不进去的,得靠模块转一道。我吃过这个亏:卡烧得好好的,验证环节卡了半小时找模块。

2.2 解压与两个目录:/root/Linux_x64 和 OEM_Mfg 别搞混

压缩包从网卡芯片厂商的官方支持页面下载,用 U 盘或内网传到这台 x86 机器上。放哪儿无所谓,我习惯丢/root下,因为后面几条路径都是按/root展开的,路径一致能少踩一次「目录不存在」的坑。

# 进到压缩包所在目录,按实际后缀选解压命令 cd /root ls -l eeupdate* # 先看清文件名和后缀 tar -xzf eeupdate64*.tar.gz # .tar.gz 用这条 # unzip eeupdate64*.zip # .zip 用这条

解压完先别急着往下走,把目录结构看清楚。这套工具解开之后有两处关键路径,作用完全不同,混了就会出现在错误的地方执行命令、怎么跑都提示找不到设备的情况。

# 第一处:驱动安装脚本和可执行文件所在目录 cd /root/Linux_x64/ ls -l # 应该能看到 install 和 eeupdate64e 两个文件 # 第二处:工具本体与产线脚本目录,日常操作都在这里 cd /root/eeupdate/TOOLS/Linux_x64/OEM_Mfg ls -l # 这里能看到 eeupdate64e 可执行脚本

第一处是「安装入口」,负责把驱动装进系统;第二处是「操作入口」,改 MAC、烧固件都在这里执行。我一般把这两条路径写在便签上贴显示器边框,因为来回cd的时候真的很容易在/root/Linux_x64里就顺手敲了./eeupdate64e,然后对着一个空列表发呆。

顺带说一句,资料里这个工具名有时候被写成eeupdate64e,有时候被写成eeupdata64e(多一个 a),是同一样东西的笔误,照着实际文件名敲就行,别去mv改名,后面文档里的命令都是按原名写的。

2.3 chmod +x 与 ./install:先给权限,再装驱动

解压出来的文件默认不一定带执行位。直接跑会报Permission denied,这是新手最容易卡住的第一道门。权限给完,再走驱动安装。

cd /root/Linux_x64/ # 给两个文件补上可执行权限 chmod +x install chmod +x eeupdate64e # 执行安装脚本,加载工具依赖的驱动 ./install

chmod +x里的+x是给文件加上执行位,install是脚本名。注意./install前面那个./不能省——不加的话 shell 会去PATH环境变量列出的目录里找名为install的程序,找到的多半是系统自带的/usr/bin/install,那是个拷贝文件的工具,跑完什么也不会发生,你还以为装好了。这个误会我见过不止一次。

./install执行完,正常会打印驱动安装成功的提示。这一步实际做的是把工具需要的内核模块装进当前系统,让eeupdate64e能绕过普通网卡驱动直接访问 EEPROM。装完之后,退出当前目录,进到 2.2 里说的第二处操作入口:

cd /root/eeupdate/TOOLS/Linux_x64/OEM_Mfg ls -l eeupdate64e

看到这个文件带着x权限位,环境这块就算齐了。接下来是断电插卡:关闭计算机,拔掉电源线,再把 i350 或 xl710 插到 PCIe 插槽上。带电插 PCIe 卡的后果不用多说,轻则枚举异常,重则卡直接报废,这一步没有省事的办法。

提示:插卡前先摸一下机箱金属部分放静电,冬天在干燥机房里这个动作能省下一块卡。

3. i350 改 MAC:单口 /nic=2 与四口 /device=1521 /A 两套写法

3.1 先看 NIC 编号,主板自带那块网口不要动

上电开机,进到OEM_Mfg目录,先不带任何参数跑一次,让工具把机器里能识别的网卡全列出来。

cd /root/eeupdate/TOOLS/Linux_x64/OEM_Mfg ./eeupdate64e

输出里会列出若干个端口,每个端口前面有个 NIC 编号。这里有个必须记住的规则:NIC=1 是 x86 主板自带的网卡,不要动它。主板板载网口和插上去的 i350 用的是同类芯片,工具会把它们排在一起,看着都像目标卡,改错了主板网口,这台烧录机自己就上不了网了。

NIC 编号对应端口能不能动
NIC=1主板板载网口不要动,改完主机自己断网
NIC=2i350 第 1 个千兆口可改
NIC=3 至 NIC=5i350 第 2 至第 4 个千兆口可改

手头这块是四口千兆卡,所以列表里除了主板口,还能看到四个属于 i350 的端口。改之前先在机箱上给每个口贴个编号标签,或者记下网口在挡板上的物理顺序,后面ip l核对时对得上号。这个动作看着多余,等四个口 MAC 都改完、要逐个确认的时候就知道值了。

3.2 单口改 MAC:/nic=2 /mac= 一条命令

单个口改 MAC,一条命令就够。以00E003509820为例,改 i350 的第 1 个口:

# /nic=2 指定端口序号,/mac= 后面跟 12 位十六进制 MAC ./eeupdate64e /nic=2 /mac=00e003509820

几个参数的含义拆开说:

  • /nic=2:目标端口在工具列表里的 NIC 编号,就是 3.1 里看到的那个数字,不是物理口序号。物理第 1 口对应的 NIC 值取决于主板枚举顺序,以实际列表为准。
  • /mac=:12 位十六进制,不带冒号、不带横线,大小写都认。写成00:e0:03:50:98:20工具会报格式错误。

MAC 的取值有一条硬规则:第一个字节的最低位必须是 0,也就是第二个十六进制字符只能是 0、2、4、6、8、A、C、E 之一。这一位是组播标志位,写成奇数就成了组播地址,网卡收不到单播包,表现为链路起来了但 ping 谁都不通。00e003509820的第二个字符是 0,合法。

命令执行成功会打印修改成功的提示。改完必须重启计算机,工具写的是 EEPROM,驱动在加载时读一次,不重启的话ip l看到的还是旧值,容易误判成没改成功。

# 重启后核对 ip l

看对应网口那行的link/ether字段是不是变成了00:e0:03:50:98:20。格式上工具里写的是无分隔符,ip l显示的是带冒号的,两种写法指的是同一个地址,别以为没生效。

3.3 四口批量:mac2.dat 的格式与 /A 参数

四个口一个个改太慢,工具支持按文件批量写。这次改00E003509820到00E003509823四个连续地址,做法是先建一个文本文件,再让工具按文件烧。

cd /root/eeupdate/TOOLS/Linux_x64/OEM_Mfg # 建文件 touch mac2.dat # 编辑,写入起始 MAC 和数量 vim mac2.dat

文件内容只有一行:

00e003509820 [4]

前面是起始 MAC,中括号里的4表示从这个地址开始连续写 4 个,工具自己按 +1 递增,分别落到 4 个口上。中括号和数字之间留一个空格,行尾不要有多余字符,这个文件是按行解析的,多一个空格在某些版本上会解析失败。

# /device=1521 指定 i350 的 PCI Device ID,/A 表示按文件批量写入 ./eeupdate64e /device=1521 /A mac2.dat

参数说明:

参数含义本次取值
/device=按 PCI Device ID 选中所有同型号网卡1521,i350 的 ID
/A按文件批量写 MAC后面直接跟文件名
mac2.dat存放起始地址与数量的文本一行,MAC [数量]

/device=和/nic=的差别值得说清楚:/nic=是「我只动列表里第几个口」,/device=是「我把所有这个型号的卡一起动」。用/device=1521的时候,机器里所有 i350 都会被写,包括主板板载的那块——如果主板网口也是 i350 芯片,它一样会被覆盖。所以批量之前先确认主板网口型号,拿不准就老老实实回到/nic=一个个来,慢一点但不会翻车。

批量写完成后同样要重启。重启后用ip l把四个口逐个对一遍,确认link/ether是 9820、9821、9822、9823 四个连续地址,顺序和物理口一一对应。这一步别偷懒只看第一个口,工具按 NIC 编号顺序写入,物理口顺序如果和枚举顺序不一致,会出现「地址都对、位置错了」的情况,后面接线上架时排查起来很费时间。

注意:批量文件里的 MAC 不能带冒号,也不要在同一个文件里混入不连续的地址段,工具只认「起始地址 + 数量」这一种格式。

4. 固件烧录:i350 的 .eep 与 xl710 的 .bin/.eep 怎么选

4.1 i350 只认 .eep:先 /dump 备份再烧

i350 在固件这一块有个硬限制:只能用.eep格式的文件,不能用手头现成的.bin和.hex。这条不搞清楚,会拿着一堆 bin 文件在命令行前反复试,工具只会回你格式不对。

.eep从哪儿来?从一张已经有固件的同型号卡上导出来。这也是我建议先备份再动手的原因:手上的卡只要还能被工具认到,就有固件可导。

# 导出 NIC=2 这个口的固件,生成 .eep 文件 ./eeupdate64e /nic=2 /dump # 看一眼导出的文件 ls -l *.eep

/dump不带参数,作用是把这个口 EEPROM 里的内容原样读出来存成文件,文件名一般以该口当前 MAC 命名。前面例子里 MAC 是00e003509820,导出来就是00E003509820.eep。这个文件就是后面烧录要用的源文件,先拷到 U 盘或另一台机器上留一份,再往下做。

导出成功,烧录就是一条命令:

# /d= 后面跟要写入的固件文件 ./eeupdate64e /device=1521 /d=00E003509820.eep

/d=是 download 的意思,把文件内容写进 EEPROM。这里用/device=1521是因为同一批卡都是 i350,一次刷完省事;只刷单口就换成/nic=2。烧完重启计算机,重启后 MAC 地址不会变——改固件不影响 MAC,这两个东西在 EEPROM 里是分开的两块区域,先烧固件再改 MAC 或者反过来都行,顺序不影响结果。

4.2 eeprom less 的全新卡:device 从 151F 回到 1521

上面走的是「卡上本来就有固件」的路径。真正麻烦的是一张全新的 i350:EEPROM 里既没有固件也没有 MAC,插进机器,系统根本不把它当网卡认,ip l里看不到任何网口。

# 对着一张空卡跑,工具会明确告诉你 eeprom less ./eeupdate64e # 系统层面也看不到网口 ip l

这时候最容易犯的错是拿/device=1521去烧,命令跑下去没反应或者直接报错。原因是设备 ID 会变:没有固件的 i350,PCI Device ID 是 151F,不是 1521。这个 ID 不是印在卡上的,是芯片在没有加载固件时的默认值,工具认的就是它。

# 空卡要用 151F,不能写 1521 ./eeupdate64e /device=151f /d=00E003509820.eep

烧录成功后重启。重启之后再跑一次./eeupdate64e,会发现这个口的 Device ID 已经变回 1521 了——固件写进去,芯片正常初始化,ID 自然回到正常值。到这一步,卡才算「活过来」,ip l里也能看到网口了。

接下来按第 3 章 3.1、3.2 的做法给它写 MAC。顺序不能反:没有固件的卡,工具连 MAC 区都写不进去,先烧固件是唯一路径。

# 固件烧好、重启之后,再写 MAC ./eeupdate64e /nic=2 /mac=00e003509820 # 重启后核对 ip l

4.3 xl710 的 1572:.bin 慢、.eep 快,新卡烧不了

xl710 的规则和 i350 有两处不同,先记结论:能烧.bin也能烧.eep,但推荐.eep;全新无固件的卡,烧不了。

Device ID 是 1572。MAC 的改法和 i350 完全一致,参考 3.1、3.2、3.3 就行,不用另学一套。差异全在固件上。

# 路径一:用 .bin 文件烧,耗时很久 ./eeupdate64e /device=1572 /d XL710_7p30_SFI_MCTP_CFGID7p2_Quad.bin # 路径二:用 .eep 文件烧,快很多 ./eeupdate64e /device=1572 /d 00E007102958.eep
对比项.bin 文件.eep 文件
来源内网导入,或从已有固件的 xl710 导出从已有固件的 xl710 用/dump导出
烧录耗时非常久,中途像卡死明显快
推荐度应急用,不建议常规走首选

.bin那份为什么慢,我自己的理解是它写的是整块 Flash 镜像,工具要逐段擦写校验,而.eep只写配置区。慢到什么程度?慢到你会怀疑命令挂了,手会不自觉去按 Ctrl+C。千万别按,中途打断会把卡烧成半残,重启后 Device ID 都可能认不出来,那就只能返厂。

.eep的导出方式和 i350 一样,/dump一把就行,文件名以当前 MAC 命名。写命令的时候注意把后缀带上:/d 00E007102958.eep,不要照着某些示例里被截断的样子只写到数字部分,工具找不到文件会直接报错。

至于「全新卡烧不了」这条,是 xl710 和 i350 最大的区别。i350 空卡还能靠 151F 这个 ID 被工具摸到,xl710 的 Flash 里没有初始固件时,工具根本定位不到设备,没有任何命令能救。所以采购 xl710 时一定要确认是带固件的版本,别等到装机才发现手里是一堆烧不进去的裸卡。

烧完同样重启,然后按第 6 章的流程验证。更多指令可以在工具包自带文档里翻,路径一般是eeupdate64e/TOOLS/DOCS/eeupdate.txt,里面把各个参数列得比我这里全。

5. 避坑与排查:eeupdate64e 跑不通时的 5 条记录

5.1 现象:./eeupdate64e: command not found或Permission denied

原因:两种情况混在一起。一是当前目录不对,人在/root/Linux_x64里就敲了./eeupdate64e,那个目录下的文件还没赋权;二是文件确实没有执行位,解压时权限丢了。

解决:先pwd确认自己在/root/eeupdate/TOOLS/Linux_x64/OEM_Mfg,再ls -l eeupdate64e看有没有x。没有就补一刀chmod +x eeupdate64e。如果提示的是command not found而不是Permission denied,八成是文件名敲错了,注意是eeupdate64e不是eeupdata64e,工具名里的a是某些资料里的笔误,实际文件没有它。

5.2 现象:./install显示成功,工具列表里还是空的

原因:驱动装完没有真正加载。./install只是把模块放到位,内核没加载或者被系统的原生网卡驱动抢占了设备,eeupdate64e就看不到目标卡。

解决:先lsmod看模块在不在,再dmesg | tail -50翻一下最近的加载日志,有没有报错或者设备被占用。最省事的办法是装完直接重启一次再跑工具,很多「装完没反应」重启就好了。还有一种情况是插槽没插到位,进 BIOS 看 PCIe 设备列表里有没有这张卡,没有就关机重插。

5.3 现象:MAC 改完重启,ip l里还是旧地址

原因:三个可能。改了 NIC=1,也就是主板板载口,目标卡压根没动;改完没重启,驱动还拿着旧的缓存值;或者是批量写入时文件里的地址段和实际端口数对不上,工具只写了一部分。

解决:先跑一次./eeupdate64e看列表里每个 NIC 对应的 MAC 现在是什么,确认写进去的是不是目标口。如果确实是目标口没变,检查命令里/nic=的数字和物理口对不对得上。批量写入的,把mac2.dat打开看中括号里的数量是不是等于实际端口数,四个口写[3]只会写三个。

5.4 现象:全新 i350 用/device=1521烧固件,报错或者没反应

原因:空卡的 Device ID 是 151F,不是 1521。工具按 ID 匹配设备,1521 匹配不到任何东西。

解决:把命令里的1521换成151f,小写大写都行。烧完重启,再跑一次工具确认 ID 已经变回 1521,然后才去写 MAC。这个顺序不能跳,空卡上直接写 MAC 一定失败。

5.5 现象:xl710 用.bin烧到一半像卡死,Ctrl+C 之后卡彻底认不到

原因:.bin是整片 Flash 镜像,写入和校验时间长,进度条不动是正常现象。中途打断会让 Flash 停在擦除和写入之间,固件区不完整,工具下次连 Device ID 都读不出来。

解决:能救的前提是没断电。重新上电,看工具还能不能列出 1572;能列出来就改用.eep文件重烧一遍,通常能盖回去。列不出来基本就是砖了。预防的办法只有一条:xl710 固件优先用/dump导出的.eep,.bin只在确实拿不到.eep的时候用,并且按下回车之后去泡杯茶,别盯着屏幕。

6. 装完怎么验证:从 ip l 到 ping 通的一条闭环

改完 MAC、烧完固件,命令回显「成功」不算数,得让这张卡真的把包发出去。我一般按下面这条链路走一遍,五步之内能确认卡是活的。

检查项命令期望结果
端口是否被识别ip l能看到目标网口,状态UP或DOWN都正常
MAC 是否写对ip l对应口的link/ether等于设定值
主板网口是否让路ifconfig enp0s31f6 down主机不再从板载口走默认路由
业务口配 IPifconfig enp1s0f0 172.16.225.33无报错,ip l里能看到该地址
连通性ping -c 4 <内网服务器IP>有回包,丢包率 0

网口名字要用ip l里实际看到的,enp0s31f6是主板自带口,enp1s0f0是插上去的 i350 第一个口,不同机器上编号会变,别照抄。

# 1. 先关掉主板自带网口,避免路由走错 ifconfig enp0s31f6 down # 2. 把内网网线插到 i350 的第一个口,先清空地址再配 ifconfig enp1s0f0 0.0.0.0 ifconfig enp1s0f0 172.16.225.33 # 3. 确认地址挂上去了 ip l show enp1s0f0 # 4. ping 内网服务器验证 ping -c 4 172.16.225.1

第 2 步里那条0.0.0.0不是多余动作。网口如果之前被 DHCP 或者别的配置挂过地址,直接覆盖 sometimes 会残留旧路由,先清空再配能避免「IP 配上了但 ping 不通」的假故障。ping 通之后别急着收工,把网线拔了再插一次,再跑一遍ip l,确认 MAC 没有回退——EEPROM 写入成功的卡,断电重连后 MAC 是稳定的;如果一拔一插就变回旧值,说明当时写的是缓存不是 EEPROM,得回去重烧。

xl710 的验证多一步:光口要先插上光转电模块,再按同样的流程配 IP 和 ping。模块没插到位的时候链路灯不亮,ip l里状态一直是DOWN,很容易被误判成固件没烧好。

从那以后我每次烧完卡,不管工具回显多漂亮,都强制走一遍「关板载口 → 配 IP → ping 四个包 → 拔插再确认」这套动作,一次没落过。吃过一次亏:批量刷了四口,工具全绿,上架后两个口不通,回头查是批量文件里数量写少了一位,最后两个口根本没写进去。工具的成功提示只能证明命令执行完了,证明不了卡能用。希望帮到你。

本文还有配套的精品资源,点击获取