Intel Ethernet Connect I219-V가 ASUSPRO B 노트북의 Linux에서 작동하지 않음, e1000e 드라이버에서 "잘못된 NVM 체크섬" 보고

Intel Ethernet Connect I219-V가 ASUSPRO B 노트북의 Linux에서 작동하지 않음, e1000e 드라이버에서 "잘못된 NVM 체크섬" 보고

질문이 있어요ASUS B8430UA 노트북: Ubuntu 16.04(또는 NixOS 16.03)로 부팅하면 이더넷 포트가 작동하지 않습니다. 사용된 드라이버는e1000e, 다음을 보고합니다.

$ dmesg | grep e1000e
[    5.643760] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    5.643761] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    5.644308] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[    5.877838] e1000e 0000:00:1f.6: The NVM Checksum Is Not Valid
[    5.907340] e1000e: probe of 0000:00:1f.6 failed with error -5

Windows 7에서는 이더넷 포트가 제대로 작동합니다. 인터넷에 연결할 수 있습니다. Windows에 따르면Intel(R) 이더넷 연결 I219-V.

"공식"을 검색했습니다.리눅스 드라이버, 그러나 I219-V를 지원하는 것으로 표시되지 않습니다. 그러나 e1000e는 I218-V를 지원하는 것으로 나열되어 있으며e1000-개발메일링 리스트에는 e1000e가 I219-V를 지원해야 한다고 나와 있습니다. 혹시 모르니 e1000e의 최신 버전인 3.3.4를 사용해 보았지만 "잘못된 NVM 체크섬"이라는 오류가 동일합니다.

I219-V의 비휘발성 메모리의 체크섬이 일치하지 않는 것 같습니다.

같은 모델의 다른 ASUS 노트북을 사용해 보았는데 오류가 동일해서 우발적인 손상은 아닌 것으로 보입니다.

ASUS나 Intel 고객 지원팀 모두 어떤 해결책도 제시하지 못했습니다.

찾았어요인텔 이더넷 연결 시작 유틸리티, 그러나 따르면문서(버전 1.6.13.0의 경우) OEM 온보드 이더넷 카드가 아닌 PCI에서만 작동합니다. 그러나 Intel 네트워크 포트 목록을 인쇄하기 위해 인수 없이 실행하기로 결정했으며 다음과 같은 결과를 얻었습니다.

$ sudo ./bootutil64e

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.6.13.0
Copyright (C) 2003-2016 Intel Corporation

Type BootUtil -? for help

Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
  1   D017C2201F59     0:31.6 Gigabit N/A FLASH Not Present

여기서 "FLASH Not Present"가 무엇을 의미하는지 잘 모르겠습니다.

나는 제안했다질문NVM 체크섬 수정에 관한 SuperUser.SE. 여기에서는 ASUSPRO B8430UA 노트북이나 Intel 이더넷 컨트롤러가 있는 다른 노트북에 이더넷이 작동하는 Linux를 성공적으로 설치하고 "잘못된 NVM 체크섬" 오류가 나타나는지, 어떻게 관리했는지 묻고 싶습니다.

답변1

e1000e드라이버는 Intel 이더넷 컨트롤러를 실행할 수 있는 드라이버입니다 I2xx. 게다가최신 e1000e 드라이버(이 글을 쓰는 시점)I219칩을 실행할 수 있습니다 .

부팅 중 메시지는 The NVM Checksum Is Not Valid이전 드라이버가 로드되지 않도록 하는 것입니다. 다른 운영 체제(특히 MS Windows)에서는 오류가 무시됩니다. 그러나 Linux는 더 엄격한 것 같습니다.

NVM은 체크섬이 필요한 칩의 ROM(읽기 전용 메모리)이며, 이전 버전의 드라이버는 e1000최신 칩의 NVM 내용을 알지 못합니다. 카드는 오류를 무시하는 다른 운영 체제에서 작동하므로 드라이버가 오류를 무시하도록 강제할 수도 있습니다.

nvm.cfix_checksum체크섬은 내부적으로 수행되지만 다른 여러 모델은 이전에 실행하기 위한 자체 기능을 제공합니다 e1000e_validate_nvm_checksum_generic.

s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
        s32 ret_val;
        u16 checksum = 0;
        u16 i, nvm_data;

        for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) {
                ret_val = e1000_read_nvm(hw, i, 1, &nvm_data);
                if (ret_val) {
                        e_dbg("NVM Read Error\n");
                        return ret_val;
                }
                checksum += nvm_data;
        }

        if (checksum != (u16)NVM_SUM) {
                e_dbg("NVM Checksum Invalid\n");
                return -E1000_ERR_NVM;
        }

        return 0;
}

NVM_SUM에 정의되어 있습니다define.h

#define NVM_SUM                         0xBABA

카드가 작동한다고 확신하는 경우(NVM 체크섬으로 인해 실패하는 경우) 체크섬 기능을 다음과 같이 편집해 볼 수 있습니다.

s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
        return 0;
}

그리고 체크섬이 항상 성공하도록 강제합니다.


(다소) 신뢰할 수 있는 추가 참고 자료:

답변2

체크섬을 수정하는 데 성공했습니다. 이더넷은 이제 Linux에서 잘 작동합니다. 내 기사에서 자세한 내용을 설명합니다.답변SuperUser.SE에 대한 내 문제입니다.

e1000e기본적으로 NVM 체크섬 검증을 건너뛰도록 먼저 패치를 했습니다.

for (i = 0;; i++) {
    if (e1000_validate_nvm_checksum(&adapter->hw) >= 0)
        break;
    if (i == 2) {
        dev_err(pci_dev_to_dev(pdev),
            "The NVM Checksum Is Not Valid\n");
        err = -EIO;
        goto err_eeprom;
    }
}

이더넷 칩에 액세스 한 후 src/netdev.cNVM에 기록 ethtool하면 자동으로 체크섬이 수정됩니다.

답변3

Ubuntu 18.04.1 LTS - Intel I219-V 지원에 대한 자세한 가이드는 다음과 같습니다.

  1. 다음에서 드라이버를 다운로드하세요.
    https://downloadcenter.intel.com/download/15817/Intel-Network-Adapter-Driver-for-PCI-E-Gigabit-Network-Connections-under-Linux-?product=71307 (버전 3.4.0.2에서 테스트됨)

  2. 원하는 폴더에 zip 압축을 푼다

  3. 드라이버 src 디렉토리로 변경합니다
    . cd e1000e-3.4.2.1/src/

  4. 새 모듈을 로드하기 전에 커널에서 기존 e1000e 드라이버를 모두 제거했는지 확인하세요. sudo rmmod e1000e

  5. 드라이버 모듈 컴파일: sudo make install

  6. modprobe 명령을 사용하여 모듈을 로드합니다. sudo modprobe e1000e 바이너리는 /lib/modules//updates/drivers/net/ethernet/intel/e1000e/e1000e.ko로 설치됩니다.

  7. 인터페이스가 제대로 작동하는지 확인하십시오. 다음을 입력합니다. 여기서 IP_address는 테스트 중인 인터페이스와 동일한 서브넷에 있는 다른 컴퓨터의 IP 주소입니다.

  8. 운전자가 힘내도록 하세요 sudo dpkg-reconfigure linux-image-$(uname -r)

이것이 pkt 8의 기능인 것 같습니다. ::.... 참고: RedHat Enterprise Linux 7 및 Ubuntu와 같은 일부 배포판의 경우 드라이버를 설치한 후 initrd/initramfs 파일을 업데이트해야 할 수도 있습니다. 방지하기 위해 운영 체제는 e1000e 드라이버의 이전 버전을 로드합니다. 우분투의 경우: # update-initramfs -u

관련 정보