Compartir a través de


Actualización del firmware del dispositivo mediante Windows Update

En este artículo se describe cómo actualizar el firmware de un dispositivo extraíble o en chasis mediante el servicio Windows Update (WU). Para obtener información sobre cómo actualizar el firmware del sistema, consulta Plataforma de actualización de firmware de UEFI de Windows.

Para ello, proporcionará un controlador de dispositivo que incluya la carga del firmware. Si proporciona un controlador de función para el dispositivo, puede agregar la lógica de actualización de firmware y la carga al controlador existente, o puede proporcionar un paquete de controladores de actualización de firmware independiente. Si el dispositivo usa un controlador proporcionado por Microsoft, debe proporcionar un paquete de controladores de actualización de firmware independiente. En ambos casos, el paquete del controlador de actualización de firmware debe ser Universal.

Para obtener más información sobre los controladores universales, consulta Usar un archivo INF universal. El archivo binario del controlador puede usar KMDF, UMDF 2 o el modelo de controlador de Windows.

Dado que WU no puede ejecutar software, el controlador de actualización de firmware debe entregar el firmware a Plug and Play (PnP) para la instalación.

Acciones del controlador de actualización de firmware

Normalmente, el controlador de actualización de firmware es un controlador de dispositivo ligero que implementa los procedimientos siguientes:

  • Al iniciar el dispositivo o en la función de devolución de llamada del controlador EVT_WDF_DRIVER_DEVICE_ADD :

    1. Identifique el dispositivo al que está conectado.

    2. Determine si el controlador tiene una versión de firmware más reciente que la versión del firmware actualmente parpadeada en el hardware del dispositivo.

    3. Si es necesaria una actualización de firmware, establezca un temporizador de eventos para programar la actualización.

    4. De lo contrario, no haga nada hasta que el controlador vuelva a iniciarse.

  • Durante el tiempo de ejecución del sistema:

    1. Si se pone en cola una actualización, espere a que se cumpla un conjunto de condiciones.

    2. Cuando se cumplan las condiciones, realice la actualización de firmware en el dispositivo.

Contenido del controlador de actualización de firmware

Normalmente, el paquete del controlador de actualización de firmware contiene los siguientes elementos:

  • INF del controlador universal

  • Catálogo de controladores

  • Controlador de función (.sys o .dll)

  • Archivo binario de carga de actualización de firmware

Envíe el paquete de actualización de firmware como un envío de controlador independiente.

Adición de lógica de actualización de firmware a un controlador proporcionado por el proveedor

El controlador de función existente puede implementar el mecanismo de actualización de firmware, como se muestra en el diagrama siguiente:

Usar Windows Update para entregar la actualización de firmware a través del controlador de funciones existente.

Como alternativa, si desea actualizar el controlador de función y el controlador de actualización de firmware por separado, cree un segundo nodo de dispositivo en el que instalará el controlador de actualización de firmware. En el diagrama siguiente se muestra cómo un dispositivo puede tener dos nodos de dispositivo independientes:

Usar Windows Update para entregar la actualización de firmware a través de un nodo de dispositivo independiente.

En este caso, los nodos de dispositivo de función y firmware deben tener identificadores de hardware diferentes para que se dirijan de forma independiente.

Hay un par de maneras de crear un segundo nodo de dispositivo. Algunos tipos de dispositivos tienen la capacidad de exponer un segundo nodo de dispositivo en un dispositivo físico, como USB. Puede usar esta funcionalidad para crear un nodo de dispositivo dirigido por WU e instalar un controlador de actualización de firmware en él. Sin embargo, muchos tipos de dispositivos no permiten que un único dispositivo físico enumere más de un nodo de dispositivo.

En este caso, use una extensión INF que especifique la directiva AddComponent para crear un nodo de dispositivo al que Windows Update pueda dirigirse e instalar el controlador de actualización de firmware en él. El siguiente fragmento de código de un archivo INF muestra cómo puede hacerlo:

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

En el ejemplo inf anterior, ComponentIDs = ComponentDeviceId indica que el dispositivo secundario tendrá un identificador de hardware de SWC\ComponentDeviceId. Cuando se instala, este INF crea la siguiente jerarquía de dispositivos:

Dispositivo primario, dispositivo principal, Dispositivo AddComponent.

Para futuras actualizaciones de firmware, actualice el archivo INF y binario que contiene la carga del firmware.

Adición de lógica de actualización de firmware a un controlador proporcionado por Microsoft

Para actualizar el firmware de los dispositivos que usan un controlador proporcionado por Microsoft, debe crear un segundo nodo de dispositivo, como se muestra anteriormente.

procedimientos recomendados

  • En el controlador de actualización de firmware INF, especifique DIRID 13 para que PnP deje los archivos en el paquete de controladores en DriverStore:

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

    PnP resuelve esta ubicación cuando instala el dispositivo. A continuación, el controlador puede abrir esta clave del Registro para determinar la ubicación de la carga.

  • Los controladores de actualización de firmware deben especificar las siguientes entradas INF:

    Class=Firmware
    ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
    
  • Para buscar otro nodo de dispositivo, el controlador de firmware debe recorrer el árbol de dispositivos relativo a sí mismo, no enumerando todos los nodos de dispositivo para una coincidencia. Un usuario puede haber conectado varias instancias del dispositivo y el controlador de firmware solo debe actualizar el dispositivo con el que está asociado. Normalmente, el nodo de dispositivo que se va a ubicar es el elemento primario o del mismo nivel del nodo del dispositivo en el que está instalado el controlador de firmware. Por ejemplo, en el diagrama anterior con dos nodos de dispositivo, el controlador de actualización de firmware puede buscar un dispositivo relacionado para buscar el controlador de función. En el diagrama anterior, el controlador de firmware puede buscar el dispositivo primario para encontrar el dispositivo principal con el que necesita comunicarse.

  • El controlador debe ser sólido para varias instancias del dispositivo que se está en el sistema, posiblemente con varias versiones de firmware diferentes. Por ejemplo, puede haber una instancia del dispositivo que se ha conectado y actualizado varias veces; Después, un dispositivo nuevo se puede conectar en el que hay varias versiones de firmware antiguas. Esto significa que el estado (como la versión actual) debe almacenarse en el dispositivo y no en una ubicación global.

  • Si hay un método existente para actualizar el firmware (EXE o co-instalador, por ejemplo), puede reutilizar en gran medida el código de actualización dentro de un controlador UMDF.