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.

Per aggiornare il firmware del dispositivo con Windows Update, fornire 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 il driver.
    2. Determinare se il driver ha una versione del firmware più recente rispetto a quella attualmente installata sull'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 desidera aggiornare separatamente il driver di funzione e il driver di aggiornamento del firmware, creare un secondo nodo del dispositivo in cui si installa 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.

I nodi dei dispositivi funzionali e del firmware devono avere ID hardware diversi per essere gestiti separatamente.

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 utilizzare questa funzionalità per creare un nodo dispositivo indirizzabile da WU e installare un driver di aggiornamento 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 tal 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 di INF, ComponentIDs = ComponentDeviceId indica che il dispositivo figlio ha 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, creare un secondo nodo del dispositivo, come illustrato.

Procedure consigliate

  • Nel file INF del driver di aggiornamento del firmware, specificare DIRID 13 per fare in modo che PnP mantenga i file del pacchetto driver all'interno di DriverStore:

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

    Plug and Play (PnP) risolve questa posizione 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 specificano 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 con due nodi dispositivo, il driver di aggiornamento del firmware può cercare un dispositivo fratello per trovare il driver di funzione. Nel diagramma successivo, 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 essere presente un'istanza del dispositivo che è stata connessa e aggiornata più volte. Un dispositivo completamente nuovo potrebbe quindi essere collegato, che ha diverse versioni di firmware vecchie. 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.