Intel X520 网卡的 Windows / macOS 驱动方法

书接上文,经过一番研究,我最终决定在淘宝选择了一家售后还不错的店铺购买了一张单口 X520 网卡。

网卡到手后我在 Windows 11 和 macOS Monterey 上进行了尝试,遇到了一些驱动方面的小问题,不过好在最终都解决了,写成此文记录一下。

原理

PCIE 设备的配置信息

这张 Intel X520 是一张典型的使用 PCIE 接口的设备,它使用 PCIE 2.0 x8 接口。根据规定,每一个 PCIE 设备都有一些寄存器用于存放 PCI配置空间,这些数据中包含了一些关键的数据,用于驱动程序访问:

我们需要关心的,主要有这几个字段:

  • Device ID ( DID )
  • Vendor ID ( VID )
  • Subsystem ID ( SSID )
  • Subsystem Vendor ID (SSVD)

Device ID 和 Vendor ID 通常用来区分不同的芯片。例如对于 Intel X520 系列网卡,无论是单口还是双口、原厂还是第三方品牌,它们都使用了相同的 82599ES 芯片,因此 Device ID 均为 10FB,而 Vendor ID 为 8086 (代表 Intel)。

Subsystem ID 和 Subsystem Vendor ID 通常用来区分不同的 PCIE 设备制造商。例如戴尔、浪潮等厂商均可以从 Intel 购买芯片制作自己品牌的 X520 网卡。不仅是万兆网卡,这一现象在众多 PCIE 设备都存在,比较典型如 Killer 1675X 网卡,本质还是一张 Intel AX210。因此我们可以通过这两个字段可以对 PCIE 设备的制造商进行识别。

一般情况下,各种操作系统是通过 Device ID 和 Vendor ID 来识别设备型号,并加载对应的驱动程序的。

当然也有一些特例,例如设备制造商可以检测 Subsystem ID 和 Subsystem Vendor ID 以保证驱动只在自家的设备上运行——如后文中的 Small Tree;或者同一款芯片人为制造不同的 Device ID,以区分家用产品和商用产品——如 Intel 的 I211 和 I219。

不同 PCIE 设备的这几项信息都是公开的,且理论上不应重复,你可以在 The PCI ID Repository 等网站上进行查询已知的 PCIE 设备。

查询方法

以我手头的这张“恒舜”牌 X520 网卡为例,它的信息可以这样获取:

在 Windows 系统,右键点击开始菜单——设备管理器——在“其他设备”中找到带有感叹号的“以太网控制器”(如果已经驱动,则在“网络适配器”中寻找网卡型号)——右键属性——详细信息——设备实例路径。

需要注意的是,Subsystem 的两个 ID 在 Windows 上以 SUBSYS 一个字段显示,其中前 4 位(16 进制)为 Subsystem Vendor ID,后四位为 Subsystem ID。

在 macOS 上,推荐使用 Hackintool 工具查看。在“PCIE 页卡”下可以看到当前设备的所有 PCIE 设备。

Windows 上的驱动安装

通过 Intel 官方搜索设备型号,可以找到驱动的下载页面(由于 X520 产品已经过时,我们只能下载到 Windows 10 版本的驱动)。在 Windows 11 21H2 系统上,直接安装驱动是会失败的,因此需要手动安装驱动。

首先需要安装 7-Zip 等压缩工具,在解压出来的 Wired_driver_XX.X_x64.exe 上点击右键——7-Zip——提取到“与文件同名的目录”。这一步我们可以将 exe 文件的内容解压出来。Intel X520 网卡的驱动就在 PROXGB/Winx64 目录中。由于该型号已经过时,因此 W11WS2022 目录是没有驱动的,需要在更旧版本的目录中寻找驱动,这里推荐使用 NDIS68(每个目录下都有一个 readme.txt 文件,标明了支持哪些型号)。

NDIS68 目录下有许多的 .inf 配置文件,需要查找其中包含 PCI\VEN_8086&DEV_10FB 字样的。如果文件不多可以挨个用记事本打开查找,或使用 VSCode 等工具批量查找。最终应当可以找到 ixn68x64.inf 这个文件。在该文件上点击右键——安装。此时回到设备管理器,在“网络适配器”下应当发现网卡驱动已经生效了。

补充一个知识:对于一些特定的 Intel 网卡会区分家用和商用的版本,例如在 Windows Server 经常无法安装 Intel I211 的网卡驱动,那么可以通过手动安装的方法进行绕过。方法是在设备管理器中——右键属性——更新驱动程序——点击“浏览我的电脑以查找驱动程序”——选择 .inf 配置文件所在的目录——点击“让我从计算机上的可用驱动列表中选取”——下一页——点击“从磁盘安装”——选择 .inf 配置文件——必要的话可以取消勾选“显示兼容硬件”——选择对应的型号并安装。切记不要按照一些教程的方法修改 .inf 配置文件,否则就只能禁用 Windows 的驱动签名检查了,那样会降低系统的安全性。

macOS 上的驱动安装

在 macOS 上的驱动安装略有不同。Intel 官方并没有为其万兆网卡提供官方的驱动支持,好在 Small Tree 这家公司为其使用了 8259x 芯片的网卡编写了 macOS 驱动,该驱动同样可以适配到任何使用 8259x 芯片的网卡上,包括我手头这张 X520。

但是根据 Small Tree 提供的驱动 ,它的文档明确说明了该驱动只会在 Subsystem ID 为 000A 的网卡上运行,因此如果使用 Subsystem ID 不满足要求的话,是无法驱动的。我们需要通过一些办法强行修改它。

修改 EEPROM

这里有 3 种修改方法:

第一种,使用 FakePCIID 仿冒网卡的 Subsystem ID。方法是在 OpenCore 的配置中添加 FakePCIID.kextFakePCIID_Intel_GbX.kext 两个文件即可。这种方法最简单安全性也最高,推荐大部分黑苹果用户使用。

第二种,使用 DOS 系统修改网卡的EEPROM数据。B站的这个视频 有较为详细的方法,不再赘述。但我个人不是非常推荐这种方法,因为 DOS 环境直接修改 16 进制存在误操作的可能,EEPROM 不仅存放有 Subsystem ID 信息,还有许多网卡正常工作所需的数据,一旦改错可能造成网卡“变砖”。

第二种,使用 Linux 系统修改网卡的EEPROM数据。在 这个2016年的帖子 有介绍,使用开源的 ethtool 工具可以更加安全的备份、修改 EEPROM 数据。经过我的测试以下命令可以在 Ubutnu 22.04 中成功:

1. 使用 U 盘引导 Ubutnu 22.04 系统

2. 运行 ip link 命令查找网卡接口,在我的电脑上输入如下:

3: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 90:e2:ba:1a:2b:3c brd ff:ff:ff:ff:ff:f

3. 如果电脑上存在多个网口,可以根据 MAC 地址进行判断,例如 90:e2:ba:1a:2b:3c 应当与网卡上的印刷标签一致。若网卡存在多个网口,将会显示为多个接口,以下命令请分别执行一遍。

4. 运行 sudo ethtool -e enpXsY raw on > enpXsY.bin 备份EEPROM,注意 enpXsY 要根据实际情况填写。

5. 运行 lspci -nn -vvv | grep Ethernet,应当输出网卡的各项信息,假如有多项应只看包含 82599ES 的一项。

04:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)
        Subsystem: Intel Corporation Ethernet Server Adapter X520-1 [8086:0006]

6. 可以看到网卡的 Subsystem ID为 0006

7. 运行 sudo apt install ethtool 安装 ethtool

8. 运行 sudo ethtool -e enpXsY | grep 0x0320,输出如下:

0x0320: 03 00 1f 00 03 00 00 50 03 53 06 00 86 80 a6 10

9. 其中倒数第 9~12 位即为 Subsystem ID,注意其高低位是颠倒的,即 000606 00

10. 多次运行 sudo ethtool -E enpXsY magic 0x<device id><vendor id> offset 0x<offset> value 0x<value> length 1 命令以分别修改高低位,谨慎执行接下来这些命令,它们会修改EEPROM。
第一条命令为 sudo ethtool -E enpXsY magic 0x10fb8086 offset 0x032a value 0x0a length 1
第二条命令为 sudo ethtool -E enpXsY magic 0x10fb8086 offset 0x032b value 0x00 length 1
命令中的 offset 是以 0x0320 为基础,每两个 16 进制为一组计算的, 如果第 8 步的输出格式不对,请立刻停止操作,不要执行这些命令

11. 运行结束后,重新运行 sudo ethtool -e enpXsY | grep 0x0320 检查是否变更成功。

0x0320: 03 00 1f 00 03 00 00 50 03 53 0a 00 86 80 a6 10

12. 最后重启系统

安装 Small Tree 驱动

修改完 Subsystem ID,只需要安装 Small Tree 的驱动即可使用网卡。有两种方法:

1. 打开 驱动下载页面 ,下载对应版本的驱动并安装(注意 Big Sur 以及之后的系统请使用 Catalina 的驱动)

2. 手动提取 SmallTreeIntel8259x.kext 并添加到 OpenCore 中。提取方法是 使用“The Unarchiver”解压 SmallTreeIntel8259x.pkg 安装包——在解压出来的 driver.pkg 上右键——点击“显示包内容“——使用“Archive Utility”解压 Payload 文件——在解压出来的 Library/Extensions 目录中找到 SmallTreeIntel8259x.kext。这种方法更适合专业的黑苹果用户。

最终,可以通过在网卡的“硬件”页面手动修改协商速度,如果能修改为 10Gbase-SR1000baseLX ,即为驱动成功。这种方法即使不插入 SFP+ 模块也是可以查询到的。

关于 HengShun 驱动

由于我购买的这张网卡是“恒舜”牌的,客服额外提供了名为 HengShunIntelx520.pkg 的驱动,这让我非常的好奇,难道是“恒舜”额外为 X520 编写了一套自己的驱动吗?

因此我对它的安装包同样做了解压,最终获得了一个 HengShunIntelx520.kext 文件。然后运行 diff HengShunIntelx520.kext SmallTreeIntel8259x.kext,会发现两张除了文件名不一样内容是完全一样的,也就是说所谓 HengShun 驱动其实就是 Small Tree 驱动改了个名字。

非常讽刺的是,“恒舜”的 readme 里居然还写着“此驱动只适用于Hengshun品牌万兆网卡,驱动根据Hengshun(恒舜)网卡功率电路参数设计,其它品牌使用此驱动会造成计算机硬件损坏,请慎用!”,实在是搞笑。真相难道不是“此驱动只适用于 Small Tree 品牌的万兆网卡”,而“恒舜”只是把 Subsystem ID 改了就能以兼容黑苹果的名义多卖二十多块钱吗?“恒舜”这样写无非就是想忽悠小白认为只有他家的网卡有特殊的驱动以获取更大的利益罢了。

因此对于“恒舜”的网卡,我只推荐购买最便宜的款式,并主要为了享受 3 年质保。如果对质保没有要求的不如去咸鱼找找更便宜的卖家。

总结

通过使用上文的方法,我成功在我的 Windows 11 / macOS Monterey 上驱动了这张 X520 网卡。

在过程中我查询了很多中英文资料,发现互联网上并没有比新且完整的教程,故做了一些研究,编写此文,希望可以帮助到需要的人。

文章评论: