Atualização de firmware do dispositivo para dispositivos USB sem usar um coinstalador
Importante
A partir do WDK para Windows 11, versão 22H2, os co-instaladores redistribuíveis do WDF não são mais suportados. Para saber como contornar essa alteração, consulte Os coinstaladores 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 da caixa de entrada. No entanto, os co-instaladores não são suportados pelo novo padrão "Universal INF", que é um requisito no Windows 10. Isso representa um desafio para o processo de atualização de firmware do dispositivo USB existente. Este artigo descreve um método recomendado para atualizar o firmware do dispositivo USB sem um coinstalador.
Requisitos
Os principais requisitos do processo de atualização de firmware do dispositivo USB são:
Atualização de firmware perfeita sem interação do usuário
Mecanismo de recuperação confiável (por exemplo, sem tijolo de dispositivos)
Funciona no Windows 7 e posterior
Visão geral
Dispositivos USB como câmeras UVC são lançados com firmware atualizável em campo. Não há um método padrão para atualizar o firmware hoje. Um item que é 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 pacote de software de atualização de firmware é instalado. O pontapé do co-instalador inicia o processo de atualização do 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 coinstalador para o cenário de atualização de firmware do dispositivo USB é usar um driver de filtro inferior para o dispositivo USB que inicia o processo de atualização de firmware. Durante a chamada 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 de firmware
Quando um dispositivo USB é conectado ao sistema, o driver genérico da caixa de entrada é instalado para o dispositivo. Após a instalação do driver genérico, o sistema operacional consulta o servidor Windows Update para qualquer disponibilidade de pacote de driver específico do fornecedor, baixa-o e instala o driver. O pacote de driver instalado executa a atualização de firmware.
Há duas maneiras de atualizar o firmware:
Driver do filtro de atualização de firmware
- Um fornecedor forneceu um driver de filtro inferior que executa a atualização de firmware.
Driver de dispositivo de atualização de firmware
Um fornecedor forneceu um driver de filtro inferior que coloca o dispositivo no modo de atualização de firmware.
O dispositivo enumera como um dispositivo de atualização de firmware.
O driver de atualização de firmware fornecido pelo fornecedor carrega neste dispositivo e atualiza o firmware.
Método 1: Driver de filtro de atualização de 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. Este driver de filtro executa a atualização de firmware.
O pacote de atualização de driver no servidor Windows Update contém:
Uma atualização de firmware WDF driver de filtro inferior
Uma extensão INF para instalar o driver de filtro inferior WDF de atualização de firmware
O arquivo "firmware.bin"
Ao instalar o pacote de atualização do driver, a rotina AddDevice do driver de filtro WDF de atualização de firmware é chamada. A partir dessa rotina, o driver de filtro WDF obtém para a versão de firmware do dispositivo a partir da chave do Registro HW do dispositivo. O firmware do dispositivo deve colocar a versão do firmware usando o descritor MSOS na chave do Registro HW do dispositivo.
Se a versão do firmware do dispositivo e a versão de firmware esperada do driver de filtro forem diferentes, ou
A versão do firmware não está disponível na chave de registro HW do dispositivo
- Em seguida, o driver de filtro se insere na pilha de dispositivos retornando com êxito para o retorno de chamada AddDevice .
Caso contrário, o driver de filtro não se inserirá na pilha de dispositivos
- Porque não há necessidade de atualizar o firmware, pois o dispositivo tem o firmware esperado.
Quando o retorno de chamada EVT_WDF_DEVICE_D0_ENTRY do driver de filtro WDF é chamado posteriormente, o driver de filtro deve se registrar para notificações de alteração da interface do dispositivo usando CM_Register_Notification ou IoRegisterPlugPlayNotification (UMDF ou KMDF) para ouvir a classe de interface do dispositivo na qual o dispositivo USB registrará o dispositivo. Por exemplo, o driver de filtro de atualização de firmware para uma câmera RGB seria registrado para KSCATEGORY_VIDEO_CAMERA. Ao receber a notificação, o driver de filtro deve lançar 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 ao fornecedor comandos específicos para executar a atualização de firmware.
Após a conclusão do piscamento do firmware, o dispositivo deve se desconectar e se reconectar ao barramento. O dispositivo é reenumerado 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 pode abandonar a atualização e inicializar em seu firmware original. Assim, não emparedar o aparelho.
Método 2: Driver de dispositivo de atualização de 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 reiniciar no modo de atualização de firmware, onde o dispositivo expõe uma interface de atualização de firmware. O driver para a interface de atualização de firmware carrega e executa a atualização de firmware.
O pacote de atualização de driver no servidor Windows Update para o dispositivo contém:
Um driver de filtro inferior WDF que coloca o dispositivo no modo de atualização de firmware
Uma extensão INF para instalar o driver de filtro inferior WDF
Além do pacote de atualização de driver, um pacote separado de driver de dispositivo de atualização de firmware está presente no Windows Update, com:
Um driver de dispositivo de atualização de firmware WDF e seu INF, e
O arquivo "firmware.bin".
Ao instalar o pacote de atualização do driver, a rotina AddDevice do driver de filtro inferior do WDF é chamada. A partir dessa rotina, o driver de filtro consulta a versão do firmware do dispositivo a partir da chave do Registro HW do dispositivo. O firmware do dispositivo deve ter colocado a "versão do firmware", usando o descritor MSOS ou a extensão INF do dispositivo USB, na chave do Registro HW do dispositivo.
Se a versão do firmware do dispositivo e o driver de filtro versões de firmware esperadas forem diferentes ou
A versão do firmware não está disponível na chave de registro HW do dispositivo
Em seguida, o driver de filtro WDF se insere na pilha de dispositivos.
Caso contrário, o driver de filtro WDF não se inserirá na pilha de dispositivos
Quando o retorno de chamada EVT_WDF_DEVICE_D0_ENTRY do driver de filtro WDF é chamado posteriormente, o driver de filtro emite um comando específico do fornecedor para o dispositivo que o coloca no modo de atualização de firmware. O dispositivo será desconectado e reconectado, 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. Este driver atualiza o firmware.
Quando o retorno de chamada EVT_WDF_DEVICE_D0_ENTRY do driver de atualização de firmware WDF é chamado posteriormente, o driver deve postar um item de trabalho que executaria a atualização de firmware.
Após a conclusão do piscamento do firmware, o dispositivo deve se desconectar e se reconectar ao barramento. O dispositivo é reenumerado com novo firmware.
Esse método é recomendado para dispositivos que não podem armazenar as imagens de firmware atualizadas e originais devido à falta de memória no dispositivo. A razão é que, se houve falhas durante o download do firmware atualizado, o dispositivo pode abandonar a atualização e inicializar o dispositivo em seu modo de atualização de firmware novamente e a atualização de firmware pode ser repetida. Assim, não emparedar o aparelho.
Recuperação
O processo de atualização de firmware pode falhar por vários motivos. Se isso acontecer, quando o dispositivo é enumerado novamente, o driver de atualização de firmware pode tentar atualizar o firmware novamente e pode falhar novamente e esse processo de atualização pode acabar em um loop. O driver de atualização de firmware deve colocar um limite superior para o número de tentativas que ele pode executar. Quando a atualização de firmware for repetida além de um limite (por exemplo, três tentativas), o driver de filtro não deverá 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 para persistir os estados de repetição.
No final da atualização do firmware do dispositivo, recomendamos que o dispositivo se redefina e recensee 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 nenhum identificador aberto para o dispositivo e evita qualquer requisito de reinicialização do sistema operacional.
Amostra 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"