Aggiornare il firmware del dispositivo usando Windows Update

Questo articolo descrive come aggiornare il firmware di un dispositivo rimovibile o nello chassis usando il servizio Windows Update (WU). Per informazioni sull'aggiornamento del firmware di sistema, vedere Piattaforma di aggiornamento del firmware UEFI di Windows.

A tale scopo, si fornirà un meccanismo di aggiornamento, implementato come driver di dispositivo che include il payload del firmware. Se il dispositivo usa un driver fornito dal fornitore, è possibile aggiungere la logica di aggiornamento del firmware e il payload al driver di funzione esistente oppure fornire un pacchetto di driver di aggiornamento del firmware separato. Se il dispositivo usa un driver fornito da Microsoft, è necessario fornire un pacchetto di driver di aggiornamento del firmware separato. In entrambi i casi, il pacchetto del driver di aggiornamento del firmware deve essere universale.

Per altre informazioni sui driver universali, vedere Introduzione ai driver windows. Il file binario del driver può usare KMDF, UMDF 2 o il modello di driver di Windows.

Poiché WU non è in grado di eseguire software, il driver di aggiornamento del firmware deve assegnare il firmware a Plug and Play (PnP) per l'installazione.

Azioni del driver di aggiornamento del firmware

In genere, il driver di aggiornamento del firmware è un driver di dispositivo leggero che implementa le procedure seguenti:

  • All'avvio del dispositivo o nella funzione di callback del driver EVT_WDF_DRIVER_DEVICE_ADD:

    1. Identificare il dispositivo a cui è collegato.

    2. Determinare se il driver ha una versione del firmware più recente rispetto alla versione del firmware attualmente in flash sull'hardware del dispositivo.

    3. Se è necessario un aggiornamento del firmware, impostare un timer eventi per pianificare l'aggiornamento.

    4. In caso contrario, non fare nulla finché il driver non viene avviato di nuovo.

  • Durante il runtime di sistema:

    1. Se un aggiornamento viene accodato, attendere che venga soddisfatto un set di condizioni.

    2. Quando vengono soddisfatte le condizioni, eseguire l'aggiornamento del firmware nel dispositivo.

Contenuto del driver di aggiornamento del firmware

In genere, il pacchetto del driver di aggiornamento del firmware contiene gli elementi seguenti:

  • Universal Driver INF

  • Catalogo driver

  • Driver di funzione (.sys o .dll)

  • File binario del payload dell'aggiornamento del firmware

Inviare il pacchetto di aggiornamento del firmware come invio di driver separato.

Aggiungere la logica di aggiornamento del firmware a un driver fornito dal fornitore

Il driver di funzione esistente può implementare il meccanismo di aggiornamento del firmware, come illustrato nel diagramma seguente:

Uso di Windows Update per distribuire l'aggiornamento del firmware tramite driver di funzione esistente.

In alternativa, se si vuole aggiornare il driver di funzione e il driver di aggiornamento del firmware separatamente, creare un secondo nodo del dispositivo, in cui si installerà il driver di aggiornamento del firmware. Il diagramma seguente illustra come un dispositivo può avere due nodi di dispositivo separati:

Uso di Windows Update per distribuire l'aggiornamento del firmware tramite un nodo dispositivo separato.

In questo caso, i nodi della funzione e del firmware del dispositivo devono avere ID hardware diversi per essere destinati in modo indipendente.

Esistono alcuni modi per creare un secondo nodo del dispositivo. Alcuni tipi di dispositivo hanno la possibilità di esporre un secondo nodo del dispositivo in un dispositivo fisico, ad esempio USB. È possibile usare questa funzionalità per creare un nodo del dispositivo destinate a WU e installare un driver di aggiornamento del firmware su di esso. Molti tipi di dispositivo, tuttavia, non consentono a un singolo dispositivo fisico di enumerare più di un nodo del dispositivo.

In questo caso, usare un'estensione INF che specifica la direttiva AddComponent per creare un nodo del dispositivo che può essere destinato da Windows Update e installare il driver di aggiornamento del firmware su di esso. Il frammento di codice seguente da un file INF mostra come eseguire questa operazione:

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

Nell'esempio INF precedente indica ComponentIDs = ComponentDeviceId che il dispositivo figlio avrà un ID hardware di SWC\ComponentDeviceId. Quando installato, questo INF crea la gerarchia di dispositivi seguente:

Dispositivo padre, dispositivo primario, dispositivo AddComponent.

Per gli aggiornamenti del firmware futuri, aggiornare il file INF e binario contenente il payload del firmware.

Aggiungere la logica di aggiornamento del firmware a un driver fornito da Microsoft

Per aggiornare il firmware per i dispositivi che usano un driver fornito da Microsoft, è necessario creare un secondo nodo del dispositivo, come illustrato in precedenza.

Procedure consigliate

  • Nel driver di aggiornamento del firmware INF specificare DIRID 13 per consentire a PnP di lasciare i file nel pacchetto driver in DriverStore:

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

    PnP risolve questo percorso quando installa il dispositivo. Il driver può quindi aprire questa chiave del Registro di sistema per determinare la posizione del payload.

  • I driver di aggiornamento del firmware devono specificare le voci INF seguenti:

    Class=Firmware
    ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
    
  • Per individuare un altro nodo del dispositivo, il driver del firmware deve camminare l'albero dei dispositivi rispetto a se stesso, non enumerando tutti i nodi del dispositivo per una corrispondenza. Un utente può avere collegato più istanze del dispositivo e il driver del firmware deve aggiornare solo il dispositivo con cui è associato. In genere, il nodo del dispositivo da individuare è l'elemento padre o pari del nodo del dispositivo in cui è installato il driver del firmware. Ad esempio, nel diagramma precedente con due nodi del dispositivo, il driver di aggiornamento del firmware può cercare un dispositivo di pari livello per trovare il driver di funzione. Nel diagramma immediatamente precedente, il driver del firmware può cercare il dispositivo padre per trovare il dispositivo primario con cui deve comunicare.

  • Il driver deve essere affidabile per più istanze del dispositivo nel sistema, possibilmente con più versioni del firmware diverse. Ad esempio, potrebbe esserci un'istanza del dispositivo connessa e aggiornata più volte; un nuovo dispositivo può quindi essere collegato a diverse versioni del firmware precedenti. Ciò significa che lo stato (ad esempio la versione corrente) deve essere archiviato nel dispositivo e non in una posizione globale.

  • Se è presente un metodo esistente per aggiornare il firmware (EXE o co-installer, ad esempio), è possibile riutilizzare in gran parte il codice di aggiornamento all'interno di un driver UMDF.