Compartilhar via


Atualização de firmware do dispositivo para dispositivos USB sem usar um co-instalador

Importante

A partir do WDK para Windows 11, versão 22H2, os co-instaladores redistribuíveis do WDF não têm mais suporte. Para aprender como contornar essa alteração, veja Co-instaladores redistribuíveis do WDF não funcionam no artigo Problemas conhecidos do WDK.

Os fornecedores de dispositivos USB usam co-instaladores para atualizar o firmware do dispositivo para dispositivos que usam drivers de dispositivo USB de caixa de entrada. No entanto, os co-instaladores não são compatíveis com o novo padrão "INF Universal", que é um requisito no Windows 10. Isso representa um desafio para o processo de atualização de firmware de dispositivo USB existente. Este artigo descreve um método recomendado para atualizar o firmware de dispositivo USB sem um co-instalador.

Requisitos

Os principais requisitos do processo de atualização de firmware do dispositivo USB são:

  1. Atualização do firmware sem interrupção e sem interação do usuário

  2. Mecanismo de recuperação confiável (por exemplo, sem bloqueio de dispositivos)

  3. Funciona no Windows 7 e posterior

Visão geral

Dispositivos USB como câmeras UVC são lançados com firmware atualizável no campo. Não há nenhum método padrão para atualizar o firmware hoje. Um item comum a todos os mecanismos de atualização existentes é que algum pacote de software personalizado é executado no cliente e baixa o firmware para o dispositivo. Normalmente, como parte do processo de instalação do dispositivo, o conjunto de software de atualização de firmware é instalado. O co-instalador dá início ao processo de atualização de firmware. A ausência de co-instaladores no Windows 10 impede que os fornecedores de dispositivos atualizem o firmware nesses dispositivos no campo.

O método recomendado para contornar a ausência de um co-instalador para o cenário de atualização de firmware de dispositivo USB é usar um driver de filtro inferior para o dispositivo USB que inicia o processo de atualização de firmware. Durante a chamada de AddDevice , o driver de filtro verifica a versão do firmware do dispositivo e atualiza o firmware, se necessário.

Visão geral da atualização do firmware

Quando um dispositivo USB é conectado ao sistema, o driver de caixa de entrada genérico é instalado para o dispositivo. Após a instalação do driver genérico, o sistema operacional consulta o servidor windows update quanto à disponibilidade do pacote de driver específico de qualquer fornecedor e baixa-o e instala o driver. O pacote de driver instalado executa a atualização de firmware.

Há duas maneiras de atualizar o firmware:

  1. Driver de filtro para atualização de firmware

    1. Um fornecedor forneceu um driver de filtro inferior que executa a atualização de firmware.
  2. Driver de dispositivo de atualização de firmware

    1. Um fornecedor forneceu um driver de filtro inferior que coloca o dispositivo no modo de atualização de firmware.

    2. O dispositivo se identifica como um dispositivo de atualização de firmware.

    3. O driver de atualização de firmware fornecido pelo fornecedor é carregado neste dispositivo e atualiza o firmware.

Método 1: driver de filtro de atualização do firmware

Nesse método, um driver de filtro inferior para o driver de dispositivo USB é instalado como parte do processo de atualização do driver. Esse driver de filtro executa a atualização de firmware.

O pacote de atualização do driver no servidor windows update contém:

  • Um driver de filtro inferior WDF para atualização de firmware

  • Um INF de extensão para instalar o driver de filtro inferior WDF de atualização de firmware

  • O arquivo "firmware.bin"

Método de atualização de firmware usando o driver de filtro inferior UMDF.

Durante a instalação do pacote de atualização do driver, a rotina AddDevice do driver de filtro WDF para a atualização do firmware é chamada. Nessa rotina, o driver de filtro do WDF obtém a versão do firmware do dispositivo a partir da chave de registro de hardware do dispositivo. O firmware do dispositivo deve colocar a versão do firmware usando o descritor MSOS na chave do Registro HW do dispositivo.

  1. Se a versão do firmware do dispositivo e a versão de firmware esperada do driver de filtro forem diferentes ou

  2. A versão do firmware não está disponível na chave do Registro HW do dispositivo

    1. Em seguida, o driver de filtro se insere na pilha do dispositivo ao retornar sucesso para o callback AddDevice.
  3. Caso contrário, o driver de filtro não se inserirá na pilha do dispositivo

    1. Como não há necessidade de atualizar o firmware, pois o dispositivo tem o firmware esperado.

Quando o EVT_WDF_DEVICE_D0_ENTRY callback do driver de filtro do WDF é chamado posteriormente, o driver de filtro deve registrar para receber notificações de alteração de interface do dispositivo usando CM_Register_Notification ou IoRegisterPlugPlayNotification (UMDF ou KMDF) para monitorar alterações na classe de interface do dispositivo na qual o dispositivo USB coloca o dispositivo. Por exemplo, o driver de filtro de atualização de firmware para uma câmera RGB se registraria como KSCATEGORY_VIDEO_CAMERA. Ao receber a notificação, o driver de filtro deve postar um item de trabalho que executaria a atualização de firmware.

Os drivers de atualização de firmware baseados em UMDF podem usar as APIs específicas do dispositivo ou emitir as transferências de controle diretamente para acessar o dispositivo USB para executar a atualização de firmware. Por exemplo, o driver de filtro baseado em UMDF para uma câmera usaria APIs de câmera para executar a atualização de firmware.

Os drivers de atualização de firmware baseados em KMDF podem enviar comandos específicos ao fornecedor para executar a atualização de firmware.

Após a conclusão do flashing do firmware, o dispositivo deve se desconectar e se reconectar ao barramento. O dispositivo é renumerado com novo firmware.

O método de usar um "driver de filtro de atualização de firmware" é recomendado para dispositivos que têm recursos suficientes para manter duas imagens de firmware completas (a imagem de atualização e uma imagem de backup) na memória do dispositivo. O motivo é que, se houver falhas durante o download do firmware atualizado, o dispositivo poderá abandonar a atualização e inicializar em seu firmware original. Portanto, não danificando o dispositivo.

Método 2: driver de dispositivo de atualização do firmware

Nesse método, um driver de filtro inferior para o dispositivo USB é instalado como parte do processo de atualização do driver. Esse driver de filtro envia um comando para o dispositivo para reiniciar no modo de atualização de firmware, em que o dispositivo expõe uma interface de atualização de firmware. O driver da interface de atualização de firmware carrega e executa a atualização de firmware.

O pacote de atualização do driver no servidor windows update para o dispositivo contém:

  1. Um driver de filtro inferior do WDF que coloca o dispositivo em modo de atualização do firmware.

  2. Um arquivo INF de extensão para instalar o driver de filtro inferior do WDF

Além do pacote de atualização do driver, há um pacote separado de driver de dispositivo para atualização de firmware disponível no Windows Update, com:

  1. Um driver de dispositivo para atualização de firmware do WDF e o seu INF

  2. O arquivo "firmware.bin".

Método de driver WDF para atualização de firmware.

Durante a instalação do pacote de atualização do driver, é chamada a rotina AddDevice do driver de filtro inferior do WDF. Nessa rotina, o driver de filtro consulta a versão do firmware do dispositivo da chave do registro de hardware do dispositivo. O firmware do dispositivo registra a "versão do firmware" na chave de registro HW do dispositivo, utilizando o descritor MSOS ou a extensão INF do dispositivo USB.

  1. Se a versão do firmware do dispositivo e as versões de firmware esperadas do driver de filtro forem diferentes ou

  2. A versão do firmware não está disponível na chave do Registro HW do dispositivo

  3. Em seguida, o driver de filtro do WDF se insere na pilha do dispositivo.

  4. Caso contrário, o driver de filtro do WDF não se incorporará à pilha do dispositivo.

Quando o retorno de chamada EVT_WDF_DEVICE_D0_ENTRY do driver de filtro WDF é executado em um momento posterior, o driver de filtro emite um comando específico do fornecedor para o dispositivo, colocando-o no modo de atualização de firmware. O dispositivo se desconecta e se reconecta, expondo a interface de atualização de firmware.

O sistema enumera a interface do dispositivo de atualização de firmware. Um driver WDF de atualização de firmware personalizado fornecido pelo fornecedor, no pacote de atualização de firmware, será carregado para essa interface de atualização de firmware. Esse driver atualiza o firmware.

Quando o EVT_WDF_DEVICE_D0_ENTRY retorno de chamada do driver de atualização de firmware do WDF é chamado posteriormente, o driver deve postar um item de trabalho que executaria a atualização de firmware.

Após a conclusão da gravação do firmware, o dispositivo deve se desconectar e se reconectar ao barramento. O dispositivo é renumerado com novo firmware.

Esse método é recomendado para dispositivos que não podem conter as imagens de firmware atualizadas e originais devido à falta de memória no dispositivo. O motivo é que, se houver falhas durante o download do firmware atualizado, o dispositivo poderá abandonar a atualização e inicializar o dispositivo em seu modo de atualização de firmware novamente e a atualização de firmware poderá ser repetida. Portanto, não danificando permanentemente o dispositivo.

Recuperação

O processo de atualização de firmware pode falhar por vários motivos. Se isso acontecer, quando o dispositivo for enumerado novamente, o driver de atualização de firmware poderá tentar atualizar o firmware novamente e poderá falhar novamente e esse processo de atualização poderá acabar em um loop. O driver de atualização de firmware deve colocar um limite superior ao número de tentativas que ele pode executar. Quando as novas tentativas de atualização de firmware excedem um limite (por exemplo, três tentativas), o driver de filtro não deve tentar atualizar o firmware novamente, até que uma nova versão do driver seja baixada do WU. O driver de atualização de firmware pode usar o registro do sistema para manter os estados de tentativa.

No final da atualização de firmware do dispositivo, recomendamos que o dispositivo se reinicie e enumere novamente.

Ambos os métodos de atualização de firmware, a função do dispositivo deve ser interrompida antes de executar a atualização de firmware. Isso garante que não haja identificador aberto para o dispositivo e evita qualquer requisito de reinicialização do sistema operacional.

Exemplo de INF

;==============================================================================
; Microsoft Extension INF for USB Camera Firmware Update UMDF Filter Driver
; Copyright (C) Microsoft Corporation.  All rights reserved.
;==============================================================================

[Version]
Signature="$WINDOWS NT$"
Class=Extension
ClassGUID={e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider=%CONTOSO%
ExtensionId={BC6EE554-271C-48C8-B713-8078833962BD} ; replace with your own GUID
CatalogFile.NT=SampleExtension.cat
DriverVer=08/28/2017,10.0.1700.000
PnpLockdown=1

[SourceDisksFiles]
ContosoFirmwareUpdateFilterDriver.dll=1
ContosoFirmware.bin=1

[SourceDisksNames]
1 = %MediaDescription%

[DestinationDirs]
UMDriverCopy=13
ContosoFirmwareCopy=13
DefaultDestDir = 13

[UMDriverCopy]
ContosoFirmwareUpdateFilterDriver.dll

[ContosoFirmwareCopy]
ContosoFirmware.bin

[Manufacturer]
%CONTOSO% = ContosoFirmwareUpdateFilterDriver,NTamd64.10.0...22000

[ContosoFirmwareUpdateFilterDriver.NTamd64.10.0...22000]
; replace with your camera device VID PID
%ContosoCamera.DeviceDesc% = ContosoFirmwareUpdateFilterDriver_Win11Install, USB\VID_1234&PID_1234&REV_1234

[ContosoFirmwareUpdateFilterDriver_Win11Install]
Include=wudfrd.inf
Needs=wudfrd.NT
CopyFiles=UMDriverCopy, ContosoFirmwareCopy

[ContosoFirmwareUpdateFilterDriver_Win11Install.HW]
Include=wudfrd.inf
Needs=wudfrd.NT.HW

[ContosoFirmwareUpdateFilterDriver.AddReg]
; Load the redirector as an lower filter on this specific device.
; 0x00010008 - FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND
HKR,,"LowerFilters",0x00010008,"WUDFRd"

[ContosoFirmwareUpdateFilterDriver_Win11Install.Services]
Include=wudfrd.inf
Needs=WUDFRD.NT.Services

[ContosoFirmwareUpdateFilterDriver_Win11Install.Wdf]
UmdfService=ContosoFirmwareUpdateFilterDriver, ContosoFirmwareUpdateFilterDriver.UmdfFilter
UmdfServiceOrder=ContosoFirmwareUpdateFilterDriver

[ContosoFirmwareUpdateFilterDriver.UmdfFilter]
UmdfLibraryVersion=2.0.0
ServiceBinary= "%13%\ContosoFirmwareUpdateFilterDriver.dll"

[Strings]
CONTOSO = "Contoso Inc."
ContosoCamera.DeviceDesc = "Contoso Camera Extension"
MediaDescription="Contoso Camera Firmware Update Filter Driver Installation Media"
WudfRdDisplayName = "WDF Reflector Driver"