Partilhar via


Atualizar o firmware do dispositivo usando o Windows Update

Este artigo descreve como atualizar o firmware de um dispositivo removível ou no chassi usando o serviço Windows Update (WU). Para obter informações sobre como atualizar o firmware do sistema, consulte Plataforma de atualização de firmware UEFI do Windows.

Para fazer isso, você fornecerá um driver de dispositivo que inclui a carga útil do firmware. Se você fornecer um driver de função para seu dispositivo, poderá adicionar a lógica de atualização de firmware e a carga útil ao driver existente ou poderá fornecer um pacote de driver de atualização de firmware separado. Se o dispositivo utilizar um controlador fornecido pela Microsoft, tem de fornecer um pacote de controlador de atualização de firmware separado. Em ambos os casos, o pacote de driver de atualização de firmware deve ser Universal.

Para obter mais informações sobre drivers universais, consulte Usando um arquivo INF universal. O binário do driver pode usar KMDF, UMDF 2 ou o modelo de driver do Windows.

Como o WU não pode executar software, o driver de atualização de firmware deve entregar o firmware ao Plug and Play (PnP) para instalação.

Ações do driver de atualização de firmware

Normalmente, o driver de atualização de firmware é um driver de dispositivo leve que implementa os seguintes procedimentos:

  • No início do dispositivo ou na função de retorno de chamada EVT_WDF_DRIVER_DEVICE_ADD do driver:

    1. Identifique o dispositivo ao qual ele está conectado.

    2. Determine se o driver tem uma versão de firmware mais recente do que a versão no firmware atualmente atualizado no hardware do dispositivo.

    3. Se uma atualização de firmware for necessária, defina um temporizador de eventos para agendar a atualização.

    4. Caso contrário, não faça nada até que o driver seja iniciado novamente.

  • Durante o tempo de execução do sistema:

    1. Se uma atualização estiver na fila, aguarde até que um conjunto de condições seja atendido.

    2. Quando as condições forem atendidas, execute a atualização de firmware no dispositivo.

Conteúdo do driver de atualização de firmware

Normalmente, o pacote de driver de atualização de firmware contém os seguintes itens:

  • Universal Driver INF

  • Catálogo de drivers

  • Driver de função (.sys ou .dll)

  • Binário de carga útil de atualização de firmware

Envie seu pacote de atualização de firmware como um envio de driver separado.

Adicionar lógica de atualização de firmware a um driver fornecido pelo fornecedor

O driver de função existente pode implementar o mecanismo de atualização de firmware, conforme mostrado no diagrama a seguir:

Usando o Windows Update para fornecer atualização de firmware por meio do driver de função existente.

Como alternativa, se você quiser atualizar o driver de função e o driver de atualização de firmware separadamente, crie um segundo nó de dispositivo, no qual você instalará o driver de atualização de firmware. O diagrama a seguir mostra como um dispositivo pode ter dois nós de dispositivo separados:

Usando o Windows Update para fornecer atualização de firmware por meio de um nó de dispositivo separado.

Nesse caso, os nós de dispositivo de função e firmware devem ter IDs de hardware diferentes para serem direcionados independentemente.

Há algumas maneiras de criar um segundo nó de dispositivo. Determinados tipos de dispositivo têm a capacidade de expor um segundo nó de dispositivo em um dispositivo físico, como USB. Você pode usar essa funcionalidade para criar um nó de dispositivo segmentável por WU e instalar um driver de atualização de firmware nele. Muitos tipos de dispositivo, no entanto, não permitem que um único dispositivo físico enumere mais de um nó de dispositivo.

Nesse caso, use uma extensão INF que especifique a diretiva AddComponent para criar um nó de dispositivo que possa ser direcionado pelo Windows Update e instale o driver de atualização de firmware nele. O seguinte trecho de um arquivo INF mostra como você pode fazer isso:

[Manufacturer]
%Contoso%=Standard,NTamd64
[Standard.NTamd64]
%DeviceName%=Device_Install, PCI\DEVICE_ID
[Device_Install.Components]
AddComponent=ComponentName,,AddComponentSection
[AddComponentSection]
ComponentIDs = ComponentDeviceId

No exemplo INF acima, ComponentIDs = ComponentDeviceId indica que o dispositivo filho terá uma ID de hardware de SWC\ComponentDeviceId. Quando instalado, esse INF cria a seguinte hierarquia de dispositivos:

Dispositivo pai, dispositivo principal, dispositivo AddComponent.

Para futuras atualizações de firmware, atualize o INF e o arquivo binário que contém a carga útil do firmware.

Adicionar lógica de atualização de firmware a um driver fornecido pela Microsoft

Para atualizar o firmware para dispositivos que usam um driver fornecido pela Microsoft, você precisa criar um segundo nó de dispositivo, conforme mostrado acima.

Práticas recomendadas

  • No driver de atualização de firmware INF, especifique DIRID 13 para fazer com que o PnP deixe os arquivos no pacote de driver no DriverStore:

    [Firmware_AddReg]
    ; Store location of firmware payload
    HKR,,FirmwareFilename,,"%13%\firmware_payload.bin"
    

    O PnP resolve esse local quando instala o dispositivo. O driver pode então abrir essa chave do Registro para determinar o local da carga útil.

  • Os drivers de atualização de firmware devem especificar as seguintes entradas INF:

    Class=Firmware
    ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
    
  • Para localizar outro nó de dispositivo, o driver de firmware deve percorrer a árvore de dispositivos em relação a si mesmo, não enumerando todos os nós de dispositivo para uma correspondência. Um usuário pode ter conectado várias instâncias do dispositivo, e o driver de firmware só deve atualizar o dispositivo ao qual está associado. Normalmente, o nó do dispositivo a ser localizado é o pai ou irmão do nó do dispositivo no qual o driver de firmware está instalado. Por exemplo, no diagrama acima com dois nós de dispositivo, o driver de atualização de firmware pode procurar um dispositivo irmão para encontrar o driver de função. No diagrama imediatamente acima, o driver de firmware pode procurar o dispositivo pai para encontrar o dispositivo principal com o qual ele precisa se comunicar.

  • O driver deve ser robusto para várias instâncias do dispositivo que está no sistema, possivelmente com várias versões de firmware diferentes. Por exemplo, pode haver uma instância do dispositivo que foi conectada e atualizada várias vezes; Um novo dispositivo pode então ser conectado que é várias versões de firmware antigas. Isso significa que o estado (como a versão atual) deve ser armazenado no dispositivo, e não em um local global.

  • Se houver um método existente para atualizar o firmware (EXE ou coinstalador, por exemplo), você poderá reutilizar amplamente o código de atualização em um driver UMDF.