Como reparar a soma de verificação da memória não volátil (NVM) do Intel Ethernet Controller I219-V de um laptop ASUS?

5

Eu tenho um problema com um novo laptop ASUSPRO B8430UA : its Intel Ethernet Connection I219-V não funciona no Linux. Na verdade, eu tentei dois laptops diferentes desse modelo, e ambos tiveram o mesmo problema.

O driver do Linux usado é e1000e , produz as seguintes mensagens durante o Linux (Ubuntu 16.04 ) boot:

$ 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 

Eu tentei instalar a última versão 3.3.4 do e1000e , mas isso não ajudou (eu já maculei o kernel).

Fiz perguntas sobre isso em e1000-devel lista, e foi aconselhado que eu entre em contato com o fabricante do meu laptop, porque "A soma de verificação NVM não é válida" significa que o conteúdo da memória não volátil do meu chip Ethernet está corrompido, ou pelo menos que não coincide com a soma de verificação ( infelizmente, não sou especialista e não posso explicar isso com mais precisão).

Eu fiz a pergunta ao suporte ao cliente da Intel e eles responderam que não cuidam dos sistemas OEM (chips Ethernet on-board nos laptops) e que eu devo entrar em contato com a ASUS:

Unfortunately as your system is OEM our support options are extremely limited. The laptop manufacturer may have altered the software or the hardware and this is why support and drivers for such systems is provided directly by the laptop manufacturer.

Eu entrei em contato com o suporte ao cliente da ASUS, mas eles responderam que não têm ferramentas para verificar ou consertar o conteúdo do NVM e que, se eu encontrar essas ferramentas, eles ficariam felizes em saber disso. Eles também explicaram que eles devem apenas suportar a configuração original de hardware e software, e esse modelo de laptop é vendido com o Windows 7. No Windows 7, minha Ethernet parece funcionar bem. De acordo com o que aprendi, o Windows simplesmente não verifica a soma de verificação da NVM.

Eu descobri que em um caso semelhante em 2011, o problema poderia ser corrigido usando Utilitário de inicialização de conexões Ethernet Intel :

https://thesorcerer.wordpress.com/2011/07/01/guide-intel-82573l-gigabit-ethernet-with-ubuntu-11-04-and-fix-pxe-e05/

No entanto, o AVISO LEGAL no último parágrafo avisa:

You probably need to know that the Intel(R) Ethernet Connections Boot Utility WAS NOT designed to be used with on board (also know as OEM) lan cards (is for the PCI cards) therefore there is no sure way to predict it’s interactions with others on board components like USB or SOUND controllers.

A descrição do BootUtil versão 1.6.13.0 também parece dizer que ela não é exatamente destinada a usar com controladores Ethernet on-board:

The Intel(R) Ethernet Flash Firmware Utility (BootUtil) is a utility that can be used to program the PCI option ROM on the flash memory of supported Intel PCI and PCI-Express-based network adapters, and to update configurations.

[...]

OEMs may provide custom flash firmware images for OEM network adapters. Please refer to the instructions given by OEMs.

Existe, no entanto, um parágrafo que não entendi:

PXE+EFI and iSCSI+EFI image combinations are supported for all OEM generic adapters, however support is limited to devices which support both technologies as discrete images.

Além disso, no comentário 5 em uma edição de 2008 em que o NVM estava sendo corrompida por causa de um driver e1000e bug , é aconselhável:

Please DO NOT run ibautil as some sites on the web suggest to try to fix this issue. It will likely cause you to have to replace your motherboard to get LAN functionality back.

O IBAUTIL é um dos predecessores do BootUtil.

De qualquer forma, decidi executar o BootUtil no Linux sem opções de linha de comando para obter a "lista de todas as portas de rede Intel suportadas encontradas no sistema". Isso é o 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 gostaria de entender o que "FLASH Not Present" significa neste contexto e quais opções eu tenho para corrigir a soma de verificação.

Atualização 1. De acordo com um comentário que recebi da mailing list e1000-devel sobre "FLASH Not Present",

The flash and NVM are two separate items. The flash enables things like PXE booting and iSCSI whereas the NVM stores things like the Network Address.

Atualização 2. Eu encontrei a folha de dados para I219, Seção 10.3.2.2 Checksum Word Calculation diz:

The Checksum word (Word 0x3F, NVM bytes 0x7E and 0x7F) is used to ensure that the base NVM image is a valid image. The value of this word should be calculated such that after adding all the words (0x00- 0x3F) / bytes (0x00-0x7F), including the Checksum word itself, the sum should be 0xBABA. The initial value in the 16 bit summing register should be 0x0000 and the carry bit should be ignored after each addition.

    
por Alexey 24.07.2016 / 12:31

6 respostas

7

Com a ajuda da lista de discussão e1000-devel , aqui é como eu consertei a palavra Checksum NVM usando ethtool .

Basicamente, eu primeiro atualizei o e1000e para ter acesso ao chip Ethernet no Linux, e então usei ethtool para ler um valor da região "checksummed" do NVM do meu I219-V e então para escrever de volta. A operação de escrita corrigiu a soma de verificação.

Para ter acesso ao meu chip Ethernet do Linux, tive que corrigir e1000e para pular a validação da soma de verificação da NVM. No arquivo src/netdev.c , mudei a primeira linha de

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

for (i = 0; false; i++) {

(O bloco inteiro também pode ser removido ou comentado.)

Em seguida, instalei o módulo corrigido. Do diretório /src que fiz:

sudo make install
sudo modprobe -r e1000e
sudo modprobe e1000e
sudo update-initramfs -u
reboot

Agora, a validação da soma de verificação foi ignorada e a Ethernet começou a funcionar.

Antes de consertar a palavra Checksum, eu examinei o esboço do NVM de I219 apresentado na Seção 10 da Intel. datasheet . O uso da palavra Checksum é explicado na Seção 10.3.2.2.

Eu observei a palavra Checksum antes de gravar no NVM:

$ sudo ethtool -e enp0s31f6 offset 0x7e length 2
Offset      Values
------      ------
0x007e:     60 13 

( enp0s31f6 é o nome da minha interface Ethernet.) Assim, o valor da palavra Checksum errôneo era 0x1360 .

Eu olhei para o despejo de NVM com sudo ethtool -e enp0s31f6 e, em seguida, olhei novamente para o byte no deslocamento 0x10:

$ sudo ethtool -e enp0s31f6 offset 0x10 length 1
Offset      Values
------      ------
0x0010:     ff 

(Aparentemente, qualquer local faria, mas foi-me dito que, no meu caso, o valor no offset 0x10 não era usado, então parecia "mais seguro").

Para gravar no NVM (EEPROM) com ethtool , eu precisava de uma "chave mágica". Eu li desbrotando um Intel Pro / 1000 (e1000) interface de rede e descobri que minha chave mágica era 0x15708086 using lspci -nn :

$ lspci -nn | grep Ethernet
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection I219-V [8086:1570] (rev 21)

Então eu escrevi 0xff de volta para o offset 0x10 no NVM:

$ sudo ethtool -E enp0s31f6 magic 0x15708086 offset 0x10 value 0xff

Depois de comparar os dumps do NVM antes e depois da gravação, pude ver que, como esperado, a única coisa que mudou foi a palavra Checksum:

$ sudo ethtool -e enp0s31f6 offset 0x7e length 2
Offset      Values
------      ------
0x007e:     60 93 

O novo valor, portanto, foi 0x9360 .

Eu inicializei um kernel com e1000e sem patch, e a porta Ethernet funcionou bem.

P.S. Acho um pouco preocupante que somente o bit mais alto na palavra Checksum estivesse errado.

    
por 30.07.2016 / 00:08
5

Eu usei bootutil para Linux da Intel (como sugerido no post de 2011) em uma Intel NIC integrada no meu Asus Z270-A para corrigir esse erro, sem as recompilar e as chaves mágicas discutidas na resposta defendida pelo voto. Funcionou muito bem. Eu baixei a ferramenta do site de download da Intel

chmod +x ./bootutil64e
sudo ./bootutil64e -NIC 1 -defcfg
    
por 22.01.2017 / 02:45
3

Eu estava recebendo o mesmo erro no Fedora 24 do driver e1000e com a placa-mãe ASUS ROG MAXIMUS IX HERO que tem adaptador Intel I219-V NIC.

Eu acho a solução aceita, que requer correção do NVM, muito arriscada. Pode tornar seu hardware inútil.

Uma solução segura é aplicar a configuração padrão à NIC usando Utilitário de inicialização de conexões Ethernet Intel . Ele funciona no Linux, sem necessidade de criar um disco de inicialização:

$ chmod +x bootutil64e
$ sudo ./bootutil64e -NIC=1 -DEFAULTCONFIG

É isso. Basta reiniciar (ou recarregar o driver e1000e manualmente).

    
por 20.03.2017 / 18:55
1

Eu tive o mesmo erro e queria tentar de tudo antes de tocar com bits NVM.

Não tenho certeza se foi isso que resolveu o problema, mas a última coisa que fiz antes de funcionar magicamente novamente foi tentativa de inicializar pela rede com UEFI (IPv4) . Então, alguma magia negra deve ter consertado minha NVM.

Ambiente

  • Mainboard: Asus PRIME Z270-A (BIOS 0701)
  • NIC: 00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I219-V [8086:15b8]
por 14.01.2017 / 14:25
1

tente:

$ sudo ./bootutil64e -NIC=XXX -BOOTENABLE=DISABLED.

Isso deve funcionar nas versões recentes de bootutil64e .

    
por 18.04.2017 / 22:12
0

Minha solução é muito mais simples:

- digite o utilitário UEFI BIOS;
- digite Modo avançado
- navegue até Advanced \ Network Stack Configuration e simplesmente ative a pilha de rede (eu só habilitei o IPv4 para permanecer seguro atrás do meu NAT).

Reinicie e aproveite sua NIC. Aparentemente isso é suficiente para de alguma forma limpar a soma de verificação ruim da NVM. Você pode então voltar e desabilitar a referida pilha.
Esta está sob a versão 8001 do BIOS em uma placa-mãe Asus Prime z270-a (driver e1000e no Arch Linux, kernel 4.9.11-1). < br>
Talvez o que causou este problema foi que eu tentei atualizar o firmware via internet diretamente através do utilitário EZ Flash (e não consegui fazê-lo para os modos DHCP e IP estático). Lembro-me do utilitário perguntando se ele poderia ativar a pilha de rede (que está desativada por padrão) para tentar a atualização.

    
por 12.03.2017 / 23:20