Compartir a través de


Actualización del firmware del dispositivo para dispositivos USB sin usar un co-instalador

Importante

A partir del WDK para Windows 11, versión 22H2, ya no se admiten los coinstaladores redistribuibles de WDF. Para obtener información sobre cómo abordar este cambio, consulte Los coinstaladores redistribuibles de WDF no funcionan en el artículo Problemas conocidos del WDK.

Los proveedores de dispositivos USB usan co-instaladores para actualizar el firmware de dispositivos que utilizan controladores de dispositivo USB integrados. Sin embargo, los co-instaladores no son compatibles con el nuevo estándar "Universal INF", que es un requisito en Windows 10. Esto supone un desafío para el proceso de actualización de firmware del dispositivo USB existente. En este artículo se describe un método recomendado para actualizar el firmware del dispositivo USB sin un co-instalador.

Requisitos

Los requisitos principales del proceso de actualización de firmware del dispositivo USB son:

  1. Actualización de firmware sin problemas sin interacción del usuario

  2. Mecanismo de recuperación confiable (por ejemplo, sin inutilización de dispositivos)

  3. Funciona en Windows 7 y versiones posteriores

Información general

Los dispositivos USB como las cámaras UVC se liberan con firmware actualizable en el campo. No hay ningún método estándar para actualizar el firmware hoy mismo. Un elemento que es común a todos los mecanismos de actualización existentes es que algunos conjuntos de software personalizados se ejecutan en el cliente y descargan el firmware en el dispositivo. Normalmente, como parte del proceso de instalación del dispositivo, se instala el conjunto de software de actualización de firmware. El co-instalador pone en marcha el proceso de actualización del firmware. La ausencia de co-instaladores en Windows 10 impide que los proveedores de dispositivos actualicen el firmware en estos dispositivos en el campo.

El método recomendado para eludir la ausencia de un co-instalador para el escenario de actualización de firmware del dispositivo USB es usar un controlador de filtro inferior al dispositivo USB que inicia el proceso de actualización de firmware. Durante la llamada a AddDevice , el controlador de filtro comprueba la versión del firmware del dispositivo y actualiza el firmware si es necesario.

Introducción a la actualización de firmware

Cuando se conecta un dispositivo USB al sistema, el controlador genérico de bandeja de entrada se instala para el dispositivo. Después de la instalación del controlador genérico, el sistema operativo consulta el servidor de Windows Update para cualquier disponibilidad específica del paquete de controladores del proveedor y lo descarga e instala el controlador. El paquete de controladores instalado realiza la actualización del firmware.

Hay dos maneras de actualizar el firmware:

  1. Controlador de filtro de actualización de firmware

    1. Un proveedor proporcionó un controlador de filtro inferior que realiza la actualización del firmware.
  2. Controlador de actualización de firmware para dispositivos

    1. Un proveedor proporcionó un controlador de filtro inferior que coloca el dispositivo en modo de actualización de firmware.

    2. El dispositivo se enumera como un dispositivo de actualización de firmware.

    3. El controlador de actualización de firmware proporcionado por el proveedor se carga en este dispositivo y actualiza el firmware.

Método 1: controlador de filtro de actualización de firmware

En este método, parte del proceso de actualización de controladores consiste en instalar un controlador de filtro inferior para el controlador del dispositivo USB. Este controlador de filtro realiza la actualización del firmware.

El paquete de actualización de controladores en el servidor de Windows Update contiene:

  • Un controlador de filtro inferior WDF de actualización de firmware

  • Una extensión INF para instalar el controlador de filtro inferior WDF para la actualización del firmware

  • El archivo "firmware.bin"

El firmware actualiza el método del controlador de filtro inferior de UMDF.

Al instalar el paquete de actualización del controlador, la rutina AddDevice del controlador del filtro WDF de actualización de firmware es llamada. A partir de esta rutina, el controlador de filtro WDF obtiene la versión de firmware del dispositivo desde la clave de registro de hardware del dispositivo. El firmware del dispositivo debe colocar la versión del firmware mediante el descriptor MSOS en la clave del Registro HW del dispositivo.

  1. Si la versión del firmware del dispositivo y la versión del firmware esperada por el controlador de filtro son diferentes o

  2. La versión del firmware no está disponible en la clave del Registro HW del dispositivo.

    1. A continuación, el controlador de filtro se inserta en la pila de dispositivos devolviendo correctamente la devolución de llamada AddDevice .
  3. De lo contrario, el controlador de filtro no se insertará en la pila de dispositivos.

    1. Dado que no es necesario actualizar el firmware, ya que el dispositivo tiene el firmware esperado.

Cuando se invoca la devolución de llamada EVT_WDF_DEVICE_D0_ENTRY del controlador de filtro WDF en un futuro momento, el controlador de filtro debe registrarse para recibir notificaciones de cambio de interfaz de dispositivo utilizando CM_Register_Notification o IoRegisterPlugPlayNotification (UMDF o KMDF) para monitorear la clase de interfaz de dispositivo en la que el dispositivo USB registra el dispositivo. Por ejemplo, el controlador de filtro de actualización de firmware para una cámara RGB se registraría en KSCATEGORY_VIDEO_CAMERA. Al recibir la notificación, el controlador de filtro debe publicar un elemento de trabajo que realizaría la actualización del firmware.

Los controladores de actualización de firmware basados en UMDF pueden usar las API específicas del dispositivo o emitir las transferencias de control directamente para acceder al dispositivo USB para realizar la actualización del firmware. Por ejemplo, el controlador de filtro basado en UMDF para una cámara usaría las API de cámara para realizar la actualización del firmware.

Los controladores de actualización de firmware basados en KMDF pueden enviar los comandos específicos del proveedor para realizar la actualización de firmware.

Al completar la actualización del firmware, el dispositivo debe desconectarse y volver a conectarse al bus. El dispositivo se vuelve a enumerar con el nuevo firmware.

El método de usar un "controlador de filtro de actualización de firmware", se recomienda para los dispositivos que tienen suficientes recursos para contener dos imágenes de firmware completas (la imagen de actualización y una imagen de copia de seguridad) en la memoria del dispositivo. La razón es si se produjeron errores durante la descarga del firmware actualizado, el dispositivo puede abandonar la actualización y arrancar en su firmware original. Por lo tanto, no se bloquea el dispositivo.

Método 2: controlador de dispositivo de actualización de firmware

En este método, se instala un controlador de filtro inferior en el dispositivo USB como parte del proceso de actualización del controlador. Este controlador de filtro envía un comando al dispositivo para reiniciarse en modo de actualización de firmware, donde el dispositivo expone una interfaz de actualización de firmware. El controlador de la interfaz de actualización de firmware carga y realiza la actualización de firmware.

El paquete de actualización de controladores en el servidor de Windows Update para el dispositivo contiene:

  1. Un controlador de filtro inferior de WDF que coloca el dispositivo en modo de actualización de firmware

  2. Una extensión INF para instalar el controlador de filtro inferior de WDF

Además del paquete de actualización del controlador, hay un paquete de controlador de actualización de firmware del dispositivo independiente en Windows Update, con lo siguiente:

  1. Un controlador de actualización de firmware de dispositivo WDF y su INF, y

  2. El archivo "firmware.bin".

Método de actualización de firmware del controlador WDF.

Al instalar el paquete de actualización del controlador, se llama a la rutina AddDevice del controlador de filtro inferior de WDF. A partir de esta rutina, el controlador de filtro consulta la versión del firmware del dispositivo desde la clave del Registro HW del dispositivo. El firmware del dispositivo, usando el descriptor MSOS o el archivo INF de extensión del dispositivo USB, coloca la "versión de firmware" en la clave de registro de hardware del dispositivo.

  1. Si la versión de firmware del dispositivo y la versión de firmware esperada por el controlador de filtro son diferentes o

  2. La versión del firmware no está disponible en la clave del Registro HW del dispositivo.

  3. A continuación, el controlador de filtros WDF se inserta en la pila de dispositivos.

  4. De lo contrario, el controlador de filtro WDF no se insertará en la pila de dispositivos.

Cuando se llama a la devolución de llamada EVT_WDF_DEVICE_D0_ENTRY del controlador de filtro WDF en un momento posterior, el controlador de filtro emite un comando específico del proveedor al dispositivo que lo coloca en modo de actualización de firmware. El dispositivo se desconecta y vuelve a conectar, exponiendo la interfaz de actualización de firmware.

El sistema enumera la interfaz del dispositivo de actualización de firmware. Para esta interfaz de actualización de firmware, se cargará un controlador WDF personalizado proporcionado por el proveedor, incluido en el paquete de actualización de firmware. Este controlador actualiza el firmware.

Cuando se llama a la devolución de llamada EVT_WDF_DEVICE_D0_ENTRY del controlador de actualización de firmware de WDF en un momento posterior, el controlador debe enviar una tarea de trabajo que realizaría la actualización del firmware.

Al terminar de actualizar el firmware, el dispositivo debe desconectarse y volver a conectarse al bus. El dispositivo se vuelve a enumerar con el nuevo firmware.

Este método se recomienda para los dispositivos que no pueden contener las imágenes de firmware actualizadas y originales debido a la escasez de memoria en el dispositivo. La razón es si se produjeron errores durante la descarga del firmware actualizado, el dispositivo puede abandonar la actualización y arrancar el dispositivo en su modo de actualización de firmware de nuevo y se puede reintentar la actualización de firmware. Así que no se bloquea el dispositivo.

Recuperación

El proceso de actualización del firmware puede producir un error por varios motivos. Si esto sucede, cuando el dispositivo se enumera de nuevo, el controlador de actualización de firmware puede intentar actualizar el firmware de nuevo y puede volver a producir un error y este proceso de actualización podría terminar en un bucle. El controlador de actualización de firmware debe colocar un límite superior en el número de reintentos que puede realizar. Cuando los reintentos de actualización de firmware superan un umbral (por ejemplo, tres reintentos), el controlador de filtro no debe intentar actualizar el firmware de nuevo, hasta que se descargue una nueva versión del controlador desde WU. El controlador de actualización de firmware puede usar el registro para conservar los estados de reintento.

Al final de la actualización del firmware del dispositivo, se recomienda que el dispositivo se restablezca y vuelva a enumerar.

Para ambos métodos de actualización del firmware, se debe detener la función del dispositivo antes de realizar la actualización del firmware. Esto garantiza que no haya ningún identificador abierto para el dispositivo y evita cualquier requisito de reinicio del sistema operativo.

INF de ejemplo

;==============================================================================
; 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"