英特尔网络适配器 E810 -- 驱动程序加载问题“直接固件加载 * 失败,错误 -2”

英特尔网络适配器 E810 -- 驱动程序加载问题“直接固件加载 * 失败,错误 -2”

英特尔网络适配器 E810-CQDA1 无法加载ice.pkg.起初我怀疑 的路径ice.pkg不正确,我将其放在 旁边ice.ko,但这似乎没有帮助。我不断收到以下错误:Direct firmware load for intel/ice/ddp/ice.pkg failed with error -2

我已经没有办法尝试了。关于如何调试驱动程序加载问题有什么建议吗?非常感谢。

系统信息和连接:

> uname -r
5.4.0-90-generic


> ethtool -i p1p1
driver: ice
version: 0.8.1-k
firmware-version: 2.30 0x80005d1e 0.0.0
expansion-rom-version: 
bus-info: 0000:10:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

> lspci -vvv -s 0000:10:00.0
10:00.0 Ethernet controller: Intel Corporation Device 1592 (rev 02)
    Subsystem: Intel Corporation Device 0001
    Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 68
    Region 0: Memory at e2000000 (64-bit, prefetchable) [size=32M]
    Region 3: Memory at e1000000 (64-bit, prefetchable) [size=64K]
    Expansion ROM at fcf00000 [disabled] [size=1M]
    Capabilities: <access denied>
    Kernel driver in use: ice
    Kernel modules: ice

内核错误日志:

> dmesg | grep "\<ice\>"
[    1.202918] ice: Intel(R) Ethernet Connection E800 Series Linux Driver - version 0.8.1-k
[    1.202919] ice: Copyright (c) 2018, Intel Corporation.
[    1.215600] ice 0000:10:00.0: The driver for the device detected a newer version of the NVM image than expected. Please install the most recent version of the network driver.
[    1.225732] ice 0000:10:00.0: firmware 5.3.7 api 1.7.4 nvm 2.30 0x80005d1e 0.0.0 build 0xa54f09ca
[    1.225770] ice 0000:10:00.0: Direct firmware load for intel/ice/ddp/ice.pkg failed with error -2
[    1.225771] ice 0000:10:00.0: The DDP package file was not found or could not be read. Entering Safe Mode
[    1.225773] ice 0000:10:00.0: Package download failed. Advanced features disabled - Device now in Safe Mode
[    1.252931] ice 0000:10:00.0 p1p1: renamed from eth0

驱动路径:

tree /lib/modules/5.4.0-90-generic/kernel/drivers/net/ethernet/intel/ice/
/lib/modules/5.4.0-90-generic/kernel/drivers/net/ethernet/intel/ice/
├── ddp
│   ├── ice_comms-1.3.30.0.pkg
│   ├── ice_comms-1.3.30.0.zip
│   ├── ice.pkg -> ice_comms-1.3.30.0.pkg
│   ├── Intel_800_series_market_segment_DDP_license.txt
│   └── readme.txt
└── ice.ko

至于为什么我认为这是一个问题,我没有看到数据包进出该接口,并ethtool p1p1说:

......
    Speed: Unknown!
    Duplex: Unknown! (255)
......

与另一个工作实例相比,速度和双工看起来不对,这让我认为驾驶员的行为首先就不正确。当然,另一个原因是dmesg上面的内核错误日志中看到的错误。

参考:

1我获得了 DDP ( ice.pkg)这里,版本是1.3.30。

2我找到了司机 ( ice.ko)这里,构建并加载模块。 modinfo ice显示路径和版本。

3我能够追踪dmesg并看到它打印线。我对之后发生的事情没有太多线索。

答案1

根据自述文件,最简单的尝试是尝试在 /lib/firmware 和/或 /lib/firmware/updates 目录中拥有 DDP 的符号链接

ln -s /lib/modules/5.4.0-90-generic/kernel/drivers/net/ethernet/intel/ice/ice_comms-1.3.30.0.pkg /lib/firmware/ice.pkg

我浏览了 DDP 和驱动程序本身的自述文件。看来你错过了一个步骤,那就是在其中一份文件中不被认为是强制性的,而在另一项中则不清楚。这就像一个基本步骤。

将ice_comms-xxxpkg 文件重命名为ice-xxxxxxxxxxxxxxx.pkg,其中“xxxxxxxxxxxxxxxx”是您要下载软件包的设备的唯一64 位PCI Express 设备序列号(十六进制)。文件名必须包含完整的序列号(包括前导零)并且全部小写。例如,如果 64 位序列号为 b887a3ffffca0568,则文件名将为ice-b887a3ffffca0568.pkg。

要从 PCI 总线地址查找序列号,可以使用以下命令:

# lspci -vv -s af:00.0 | grep -i Serial Capabilities: [150 v1] Device Serial Number b8-87-a3-ff-ff-ca-05-68

您可以使用以下命令来设置不带破折号的序列号格式:

lspci -vv -s af:00.0 | grep -i Serial | awk '{print $7}' | sed s/-//g b887a3ffffca0568

  1. 将重命名的 DDP 软件包文件复制到 /lib/firmware/updates/intel/ice/ddp/。如果该目录尚不存在,请在复制文件之前创建它。

  2. 卸载设备上的所有 PF。

  3. 使用新包重新加载驱动程序。

在主驱动程序的自述文件中,他们指出了已经很明显的

如果驱动程序无法加载DDP包,设备将进入安全模式。安全模式会禁用高级功能和性能功能,仅支持基本流量和最小功能,例如更新 NVM 或下载新驱动程序或 DDP 包。

答案2

正如 Alex 所说,驱动程序似乎无法找到您已加载的 Comms DDP 包(这通常是由于ice.pkg 上的文件格式错误所致)。然而,Alex 的解决方案仅适用于您想要在一个唯一的 NIC(基于其序列号)上加载 DDP 软件包的情况,以下示例展示了如何对主机上的所有 NIC 进行基本安装,而无需获取序列号等。

以最新的Comms DDP包(1.3.37.0)为例:

  1. 从以下位置下载通信 DDP 包这里到您的 Linux 主机
  2. 在您的 Linux 主机上,解压软件包:
    $ unzip 800\ Series\ DDP\ Comms\ Package\ 1.3.37.0.zip
    
  3. 将嵌套包文件进一步解压到ice_comms目录中:
    $ unzip ice_comms-1.3.37.0.zip -d ice-comms/ 
    
  4. 将解压后的所有内容复制到/lib/firmware/updates/intel/ice/ddp/
    $ sudo cp ice-comms/* /lib/firmware/updates/intel/ice/ddp/
    
  5. 重新加载ice驱动程序以接收新包:
    $ sudo modprobe -r ice; sudo modprobe ice
    
  6. 确认dmesg驱动程序已插入新的 DDP 包。

相关内容