Compartir a través de


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

Importante

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

Los proveedores de dispositivos USB usan co-instaladores para actualizar el firmware del dispositivo para los dispositivos que usan controladores de dispositivo USB de bandeja de entrada. 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 ladrillos 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 inicio del co-instalador inicia el proceso de actualización de 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 dispositivo de actualización de firmware

    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, se instala un controlador de filtro inferior al controlador del dispositivo USB como parte del proceso de actualización de controladores. 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 de WDF de actualización de firmware

  • Una extensión INF para instalar el controlador de filtro inferior WDF de actualización de 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, se llama a la rutina AddDevice del controlador de filtro WDF de actualización de firmware. A partir de esta rutina, el controlador de filtro WDF obtiene para la versión de firmware del dispositivo de la clave del Registro HW 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 el controlador de filtro esperan la versión de firmware 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 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 debe registrarse para las notificaciones de cambio de interfaz de dispositivo mediante CM_Register_Notification o IoRegisterPlugPlayNotification (UMDF o KMDF) para escuchar la clase de interfaz de dispositivo en la que el dispositivo USB registrará el dispositivo. Por ejemplo, el controlador de filtro de actualización de firmware para una cámara RGB se registraría para 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 terminar de parpadear el firmware, el dispositivo debe desconectar 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 ladrillo 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 independiente firmware update device Driver en Windows Update, con:

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

  2. El archivo "firmware.bin".

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

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 debe haber colocado la "versión de firmware", mediante el descriptor MSOS o la extensión del dispositivo USB INF, en la clave del Registro HW del dispositivo.

  1. Si la versión del firmware del dispositivo y el controlador de filtro esperaban versiones de firmware 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 filtro 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 desconectará y volverá a conectar, exponiendo la interfaz de actualización de firmware.

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

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

Al terminar de parpadear el firmware, el dispositivo debe desconectar 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. Por lo tanto, no ladrillo 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 la actualización de firmware vuelve a intentar superar 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.

Ambos métodos de actualización de firmware, la función del dispositivo debe detenerse antes de realizar la actualización del firmware. Esto garantiza que no haya ningún identificador abierto para el dispositivo y evite 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"