Condividi tramite


Aggiornare il firmware del dispositivo con 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 driver di dispositivo che include il payload del firmware. Se si specifica un driver di funzione per il dispositivo, è possibile aggiungere la logica di aggiornamento del firmware e il payload al driver 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, vedi Uso di un file INF universale. Il file binario del driver può usare KMDF, UMDF 2 o windows Driver Model.

Poiché WU non è in grado di eseguire software, il driver di aggiornamento del firmware deve consegnare 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 sul firmware attualmente lampeggiata nell'hardware del dispositivo.

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

    4. In caso contrario, non eseguire alcuna operazione finché il driver non viene avviato di nuovo.

  • Durante il runtime di sistema:

    1. Se viene accodato un aggiornamento, 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 driver di aggiornamento del firmware contiene gli elementi seguenti:

  • Universal Driver INF

  • Catalogo driver

  • Driver di funzione (.sys o .dll)

  • File binario del payload di 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 il driver di funzione esistente.

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

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

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

Esistono due 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 di destinazione da 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 di destinazione di 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 .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 fare in modo che PnP lasci 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 esaminare l'albero del dispositivo rispetto a se stesso, non enumerando tutti i nodi del dispositivo per una corrispondenza. Un utente potrebbe aver collegato più istanze del dispositivo e il driver del firmware deve aggiornare solo il dispositivo a cui è associato. In genere, il nodo del dispositivo da individuare è l'elemento padre o di pari livello 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 che è stata connessa e aggiornata più volte; un nuovo dispositivo può quindi essere collegato che è 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 esiste 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.