인텔 네트워크 어댑터 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
경로와 버전을 표시합니다.
삼dmesg
추적 하고 인쇄된 것을 볼 수 있습니다.이것철사. 나는 다음에 무슨 일이 일어났는지에 대해 별로 아는 바가 없습니다.
답변1
Readme에 따르면 가장 쉬운 방법은 /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 장치 일련 번호(16진수)입니다. 파일 이름은 전체 시퀀스 번호(선행 0 포함)를 포함해야 하며 모두 소문자여야 합니다. 예를 들어 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를 제거합니다.
새 패키지로 드라이버를 다시 로드합니다.
메인 드라이버의 Readme에서는 이미 명백한 내용을 지적하고 있습니다.
드라이버가 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 패키지를 삽입했는지 확인합니다 .