英特尔网络适配器 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。
答案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
将重命名的 DDP 软件包文件复制到 /lib/firmware/updates/intel/ice/ddp/。如果该目录尚不存在,请在复制文件之前创建它。
卸载设备上的所有 PF。
使用新包重新加载驱动程序。
在主驱动程序的自述文件中,他们指出了已经很明显的
如果驱动程序无法加载DDP包,设备将进入安全模式。安全模式会禁用高级功能和性能功能,仅支持基本流量和最小功能,例如更新 NVM 或下载新驱动程序或 DDP 包。
答案2
正如 Alex 所说,驱动程序似乎无法找到您已加载的 Comms DDP 包(这通常是由于ice.pkg 上的文件格式错误所致)。然而,Alex 的解决方案仅适用于您想要在一个唯一的 NIC(基于其序列号)上加载 DDP 软件包的情况,以下示例展示了如何对主机上的所有 NIC 进行基本安装,而无需获取序列号等。
以最新的Comms DDP包(1.3.37.0)为例:
- 从以下位置下载通信 DDP 包这里到您的 Linux 主机
- 在您的 Linux 主机上,解压软件包:
$ unzip 800\ Series\ DDP\ Comms\ Package\ 1.3.37.0.zip
- 将嵌套包文件进一步解压到
ice_comms
目录中:$ unzip ice_comms-1.3.37.0.zip -d ice-comms/
- 将解压后的所有内容复制到
/lib/firmware/updates/intel/ice/ddp/
:$ sudo cp ice-comms/* /lib/firmware/updates/intel/ice/ddp/
- 重新加载ice驱动程序以接收新包:
$ sudo modprobe -r ice; sudo modprobe ice
- 确认
dmesg
驱动程序已插入新的 DDP 包。