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 # 执行安装脚本,加载工具依赖的驱动 ./installchmod +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=2 | i350 第 1 个千兆口 | 可改 |
| NIC=3 至 NIC=5 | i350 第 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 l4.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 | 主机不再从板载口走默认路由 |
| 业务口配 IP | ifconfig 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 四个包 → 拔插再确认」这套动作,一次没落过。吃过一次亏:批量刷了四口,工具全绿,上架后两个口不通,回头查是批量文件里数量写少了一位,最后两个口根本没写进去。工具的成功提示只能证明命令执行完了,证明不了卡能用。希望帮到你。
本文还有配套的精品资源,点击获取