O computador se recusa a inicializar no modo UEFI - dá erro sobre a placa de rede Intel Gigabit

9

Eu apenas tentei inicializar minha máquina no modo UEFI, mas recebi esta mensagem:

the system cannot find the UEFI driver for the add-on network devices [0x10D38086]

Estou usando o Debian Linux, mas não tenho certeza se isso é relevante. Não tenho certeza se meu sistema chegou até a parte do Linux.

Aqui está a saída relevante de lspci para minha placa de rede

0a:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection

A placa-mãe suporta UEFI, eu acho. Aqui está a saída de dmidecode para a placa-mãe.

dmidecode --type 2
# dmidecode 2.12
SMBIOS 2.7 present.

Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
        Manufacturer: ASUSTeK COMPUTER INC.
        Product Name: SABERTOOTH 990FX R2.0
        Version: Rev 1.xx
        Serial Number: 130309723501985
        Asset Tag: To be filled by O.E.M.
        Features:
                Board is a hosting board
                Board is replaceable
        Location In Chassis: To be filled by O.E.M.
        Chassis Handle: 0x0003
        Type: Motherboard
        Contained Object Handles: 0
    
por Faheem Mitha 16.06.2017 / 06:56

2 respostas

19

O problema aqui é que o firmware do seu adaptador de rede, ou a opção ROM , não suporte a UEFI.

Uma placa complementar pode ter seu próprio código executável para uso no ambiente de pré-inicialização. O VBIOS em uma placa de vídeo, usada para inicializar a GPU e exibir no momento da inicialização, é um exemplo de tal opção ROM. Em uma placa de rede, isso geralmente é usado para implementar o PXE . O UEFI normalmente requer que o firmware da placa contenha um driver especialmente criado, mas sua NIC foi feita para sistemas BIOS legados, portanto, ele não contém nenhum desses drivers. Como tal, não funcionará em um sistema UEFI que não use o Módulo de Suporte à Compatibilidade (a camada de compatibilidade de BIOS herdada) e precisa ser atualizado.

Indo mais a fundo, descobri que o código fornecido na mensagem de erro, 0x10D38086 , é o ID PCI da placa de rede. 8086: 10D3 é o Intel Gigabit CT Desktop Adapter .

Uma pesquisa dos downloads disponíveis para este cartão revelou um < um href="https://downloadcenter.intel.com/download/19186/Ethernet-Intel-Ethernet-Connections-Boot-Utility-Preboot-Images-and-EFI-Drivers?product=50395"> atualização de firmware que pode ser instalado na NIC para atualizar a opção ROM para que ela suporte UEFI. Faça o download e extraia Preboot.tar.gz e siga as instruções para atualizar o firmware. De acordo com as notas de versão , a opção ROM inclui os drivers UEFI, que devem corrigir o erro que você está recebendo.

No seu caso, atualize o firmware combo , que fornece suporte a UEFI e PXE:

bootutil64e -up=combo -all -FILE=BootIMG.FLB

A mensagem que o utilitário retorna simplesmente indica qual funcionalidade o firmware existente fornece. Ele será sobrescrito durante o processo de flash; isso é normal.

Depois de ter mostrado o firmware, reinicie o sistema no modo UEFI nativo e veja se funciona. Caso contrário, você precisará substituir o adaptador de rede.

Atualização: você indicou no bate-papo que está recebendo esse erro ao tentar atualizar o firmware:

Connection to QV driver failed - please reinstall it!

Parece que o programa flash do firmware requer que o driver de depuração iQV ( iqvlinux ) funcione. O driver pode ser baixado aqui , mas você precisará compilar e carregar o driver por conta própria. O script install , que é um download separado, é necessário para executar a instalação; não apenas extraia o pacote do driver e execute make .

1 Os drivers EFI também podem estar na partição do sistema EFI ou no firmware UEFI da própria placa-mãe. No entanto, para placas PCI e PCIe, geralmente é fornecido no firmware da placa.

    
por 16.06.2017 / 07:13
2

Obrigado ao @bwDraco pela resposta útil.

Estou adicionando alguns detalhes sobre como esse processo se parece na prática.

Primeiro, eu fiz o download e descompactei Preboot.tar.gz . Aviso - isso não é descompactado em seu próprio diretório, portanto, crie um diretório para ele primeiro.

Observe que este utilitário suporta vários sistemas operacionais diferentes. No entanto, vou descrever apenas como funciona no Linux, já que não executo mais nada. A documentação principal deste utilitário é DOCS/Adapter_User_Guide.pdf .

A versão Linux deste utilitário são dois executáveis binários, APPS/BootUtil/Linux_x64/bootutil64e (64 bit) e APPS/BootUtil/Linux32$ ls bootutil32 (32 bits). E a documentação para o bootutil é APPS/BootUtil/Docs/bootutil.txt .

Eu então copiei o arquivo APPS/BootUtil/Linux_x64/bootutil64e para /usr/local/bin , embora eu tivesse que torná-lo executável primeiro. Quando eu corri, eu peguei

root@orwell:/home/faheem# bootutil64e -?
Connection to QV driver failed - please reinstall it!

Isso exigiu o download de iqvlinux.tar.gz , que é um arquivo de fontes de módulos do kernel do Linux, do link .

Nota: há um rpm lá, mas tentar convertê-lo em um deb parece bem perdido. E nem parece conter um binário, apenas arquivos de origem e cabeçalhos. Isso não é óbvio, mas também é necessário o script install nesse mesmo diretório. Então corra

sh install

ou similar como usuário (executar um script estranho como root nunca é uma boa ideia), certificando-se de que iqvlinux.tar.gz esteja no mesmo nível que o script install .

Isto dá a saída

faheem@orwell:/usr/local/src/iqvlinux$ sh install
Extracting archive..OK!
make: Entering directory '/usr/local/src/iqvlinux/iqvlinux/src/linux/driver'
make -C /lib/modules/3.16.0-4-amd64/build SUBDIRS=/usr/local/src/iqvlinux/iqvlinux/src/linux/driver modules
make[1]: Entering directory '/usr/src/linux-headers-3.16.0-4-amd64'
make[1]: Entering directory '/usr/src/linux-headers-3.16.0-4-amd64'
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/nalioctldrv.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxnaldriver.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxdriveros_i.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxdriverpci_i.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxdriverdevice_i.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxdrivermemory_i.o
  LD [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/iqvlinux.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/iqvlinux.mod.o
  LD [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/iqvlinux.ko
make[1]: Leaving directory '/usr/src/linux-headers-3.16.0-4-amd64'
make: Leaving directory '/usr/local/src/iqvlinux/iqvlinux/src/linux/driver'
Skipping removing QV driver - it does not exist...
Copying iqvlinux.ko driver file to /lib/modules directory...cp: cannot create regular file ‘/lib/modules/3.16.0-4-amd64/kernel/drivers/net/iqvlinux.ko’: Permission denied                                                                                                                                                  
Error: failed to copy driver (‘/usr/local/src/iqvlinux/iqvlinux/src/linux/driver/iqvlinux.ko’ -> ‘/lib/modules/3.16.0-4-amd64/kernel/drivers/net/iqvlinux.ko’)

Copiar o módulo do kernel no lugar manualmente faz com que o erro desapareça.

Antes de reflashing o cartão, esta é a saída de bootutil64e para o cartão:

Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
  1   001B213916B9    10:00.0 Gigabit YES PXE                           1.3.21

Aqui está a transcrição da sessão do reflashing. A opção de combinação ativa a funcionalidade PXE e UEFI. Observe que é necessário apontar para o local da imagem de inicialização com a opção FILE :

root@orwell:/home/faheem# bootutil64e -up=combo -all -FILE=/usr/local/src/Intel_Network_Card_Boot_Utility/APPS/BootUtil/BootIMG.FLB

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.6.39.1
Copyright (C) 2003-2017 Intel Corporation

Programming flash on port 1 with flash firmware image
Create restore image of NIC 1 before proceeding? (Y)es or (N)o: Y
Y

Saving flash firmware image on port 1 to file 10D34008.FLB...
Filename 10D34008.FLB already exists.
(O)verwrite/proceed or (S)top execution?: O
O
saved

Updating PXE+EFI removes PXE functionality.
Would you like to continue? (Y)es or (N)o: Y
Y
/
Flash update successful

Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
  1   001B213916B9    10:00.0 Gigabit YES UEFI,PXE Enabled              1.5.84
    
por 16.06.2017 / 12:21