A Conexão Ethernet Intel I219-V não funciona no Linux em um laptop ASUSPRO B, o driver e1000e reporta: “A soma de verificação da NVM não é válida”

5

Eu tenho um problema com um laptop ASUSPRO B8430UA : quando eu inicializo com o Ubuntu 16.04 (ou NixOS 16.03) a porta Ethernet não funciona. O driver usado é e1000e , informa:

$ 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

Na porta Ethernet do Windows 7 funciona bem: posso conectar-me à Internet. De acordo com o Windows, eu tenho Intel® Ethernet Connection I219-V .

Eu pesquisei por , mas nenhum é listado como suporte I219-V. No entanto, e1000e está listado como suportando I218-V, e eu tenho uma confirmação de e1000-devel lista de discussão que o e1000e deve suportar I219-V. Apenas no caso eu tentei usar a última versão 3.3.4 do e1000e, mas o erro foi o mesmo: "A soma de verificação da NVM não é válida."

Parece, de fato, que há uma incompatibilidade da soma de verificação da memória não volátil do I219-V.

Eu tentei outro laptop ASUS do mesmo modelo, e o erro foi o mesmo, então isso não parece uma corrupção acidental.

Nem o suporte ao cliente da ASUS nem da Intel poderia sugerir qualquer solução.

Eu descobri o Utilitário Intel® Ethernet Connections Boot , mas de acordo com o documentation (para a versão 1.6.13.0) destina-se apenas a placas Ethernet, PCI, não OEM on-board. No entanto, eu decidi executá-lo sem parâmetros apenas para imprimir a lista de portas de rede Intel, e é isso que eu tenho:

$ 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

Eu não entendo muito bem o que significa "FLASH Not Present" aqui.

Eu coloquei uma pergunta no SuperUser.SE sobre como corrigir a soma de verificação da NVM. Aqui estou perguntando se e como alguém conseguiu instalar com êxito o Linux com Ethernet de trabalho em um laptop ASUSPRO B8430UA ou em quaisquer outros laptops com Intel Ethernet Controllers que tiveram o erro "O valor de verificação da NVM não é válido".

    
por Alexey 08.07.2016 / 23:10

3 respostas

2

Consegui corrigir a soma de verificação. Agora Ethernet funciona bem no Linux. Expliquei os detalhes da minha resposta à minha pergunta sobre o SuperUser.SE.

Basicamente, primeiro corrigi e1000e para ignorar a validação da soma de verificação da 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;
    }
}

em src/netdev.c , e depois que eu tive acesso ao chip Ethernet, eu escrevi para sua NVM com ethtool , que automaticamente corrigia a soma de verificação.

    
por 30.07.2016 / 00:26
5

O driver e1000e é o que pode executar os controladores% ethernet I2xx intel. E o o mais recente driver e1000e (até o momento desta publicação) é capaz de executar o chip I219 .

A mensagem The NVM Checksum Is Not Valid durante a inicialização é o que estava impedindo que os drivers antigos fossem carregados. Em outros sistemas operacionais (principalmente no MS Windows), esse erro é ignorado. Mas o Linux parece ser mais rigoroso.

O NVM é uma memória ROM (somente leitura) no chip, que passa por uma soma de verificação, e a versão mais antiga do driver e1000 não estava ciente do conteúdo NVM dos chips mais recentes. Como a placa funciona em outros sistemas operacionais que ignoram o erro, outra possibilidade poderia ter sido forçar o driver a ignorar o erro.

A soma de verificação é executada dentro de nvm.c , embora outros vários modelos apresentem suas próprias funções fix_checksum que são executadas antes de 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 está definido dentro de define.h

#define NVM_SUM                         0xBABA

Se tiver certeza de que a placa é executada (e só falha por causa da soma de verificação da NVM), você pode tentar editar a função de soma de verificação para:

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

E isso forçará a soma de verificação a ser sempre bem-sucedida.

Referências de confiança extras (mais ou menos):

por 11.07.2016 / 04:51
0

Aqui está um guia detalhado   Ubuntu 18.04.1 LTS - suporte para Intel I219-V

  1. Baixar driver de
    link (Testet na versão 3.4.0.2)

  2. Descompacte o arquivo zip na pasta de sua escolha

  3. Mude para o diretório src do driver,
    por exemplo. cd e1000e-3.4.2.1/src/

  4. Certifique-se de que quaisquer drivers e1000e antigos sejam removidos do kernel antes de carregar o novo módulo sudo rmmod e1000e

  5. Compile o módulo do driver: sudo make install

  6. Carregue o módulo usando o comando modprobe: %código% O binário será instalado como: /lib/modules//updates/drivers/net/ethernet/intel/e1000e/e1000e.ko

  7. Verifique se a interface funciona. Digite o seguinte, onde IP_address é o endereço IP de outra máquina na mesma sub-rede que a interface que está sendo testado: ping

  8. Torne o driver persistente sudo modprobe e1000e

Eu acho que é isso que o pkt 8 faz :: .... Nota: Para certas distribuições como (mas não limitado a) RedHat Enterprise Linux 7 e Ubuntu, uma vez que o driver é instalado, o arquivo initrd / initramfs pode precisa ser atualizado para evitar que o sistema operacional carregue versões antigas do driver e1000e.    Para o Ubuntu:     # update-initramfs -u

    
por 08.10.2018 / 18:27