Condividi tramite


Aggiornamento del firmware del dispositivo Per i dispositivi USB senza usare un co-programma di installazione

Importante

A partire da WDK per Windows 11, versione 22H2, i co-installer ridistribuibili di WDF non sono più supportati. Per informazioni su come risolvere questa modifica, vedere L'articolo sui co-installer ridistribuibili di WDF non funziona nell'articolo sui problemi noti di WDK.

I fornitori di dispositivi USB usano co-installer per aggiornare il firmware del dispositivo per i dispositivi che usano driver di dispositivo USB posta in arrivo. Tuttavia, i co-installer non sono supportati dal nuovo standard "Universal INF", che è un requisito per Windows 10. Ciò costituisce una sfida per il processo di aggiornamento del firmware del dispositivo USB esistente. Questo articolo descrive un metodo consigliato per aggiornare il firmware del dispositivo USB senza un co-programma di installazione.

Requisiti

I requisiti principali del processo di aggiornamento del firmware del dispositivo USB sono:

  1. Aggiornamento facile del firmware senza interazione dell'utente

  2. Meccanismo di recupero affidabile (ad esempio, senza mattoni di dispositivi)

  3. Funziona in Windows 7 e versioni successive

Panoramica

I dispositivi USB come le fotocamere UVC vengono rilasciati con firmware aggiornabile in campo. Attualmente non è disponibile alcun metodo standard per aggiornare il firmware. Un elemento comune a tutti i meccanismi di aggiornamento esistenti è che alcune suite software personalizzate vengono eseguite nel client e scaricano il firmware nel dispositivo. In genere, come parte del processo di installazione del dispositivo, viene installata la suite software di aggiornamento del firmware. L'avvio del co-programma di installazione avvia il processo di aggiornamento del firmware. L'assenza di co-installer in Windows 10 impedisce ai fornitori di dispositivi di aggiornare il firmware in questi dispositivi nel campo.

Il metodo consigliato per aggirare l'assenza di un co-programma di installazione per lo scenario di aggiornamento del firmware del dispositivo USB consiste nell'usare un driver di filtro inferiore al dispositivo USB che avvia il processo di aggiornamento del firmware. Durante la chiamata AddDevice , il driver di filtro controlla la versione del firmware del dispositivo e aggiorna il firmware, se necessario.

Panoramica dell'aggiornamento del firmware

Quando un dispositivo USB è collegato al sistema, il driver della posta in arrivo generico viene installato per il dispositivo. Dopo l'installazione del driver generico, il sistema operativo esegue una query sul server Windows Update per individuare la disponibilità di pacchetti driver specifici del fornitore e la scarica e installa il driver. Il pacchetto driver installato esegue l'aggiornamento del firmware.

È possibile aggiornare il firmware in due modi:

  1. Driver filtro aggiornamento firmware

    1. Un fornitore ha fornito un driver di filtro inferiore che esegue l'aggiornamento del firmware.
  2. Driver di dispositivo di aggiornamento del firmware

    1. Un fornitore ha fornito un driver di filtro inferiore che inserisce il dispositivo in modalità di aggiornamento del firmware.

    2. Il dispositivo enumera come dispositivo di aggiornamento del firmware.

    3. Il fornitore ha fornito i caricamenti del driver di aggiornamento del firmware su questo dispositivo e aggiorna il firmware.

Metodo 1: Driver del filtro di aggiornamento del firmware

In questo metodo, un driver di filtro inferiore per il driver di dispositivo USB viene installato come parte del processo di aggiornamento del driver. Questo driver di filtro esegue l'aggiornamento del firmware.

Il pacchetto di aggiornamento driver nel server Windows Update contiene:

  • Un driver di filtro inferiore di WDF per l'aggiornamento del firmware

  • Estensione INF per installare il driver filtro inferiore di WDF per l'aggiornamento del firmware

  • File "firmware.bin"

Aggiornamento del firmware del metodo del driver di filtro inferiore di UMDF.

Durante l'installazione del pacchetto di aggiornamento driver, viene chiamata la routine AddDevice del driver di filtro WDF update del firmware. Da questa routine, il driver del filtro WDF ottiene per la versione del firmware del dispositivo dalla chiave del Registro di sistema del dispositivo HW. Il firmware del dispositivo deve inserire la versione del firmware usando il descrittore MSOS nella chiave del Registro di sistema HW del dispositivo.

  1. Se la versione del firmware del dispositivo e la versione prevista del driver di filtro sono diverse o

  2. La versione del firmware non è disponibile nella chiave del Registro di sistema HW del dispositivo

    1. Quindi, il driver di filtro si inserisce nello stack di dispositivi restituendo l'esito positivo al callback AddDevice .
  3. In caso contrario, il driver di filtro non si inserisce nello stack di dispositivi

    1. Poiché non è necessario aggiornare il firmware perché il dispositivo ha il firmware previsto.

Quando il callback EVT_WDF_DEVICE_D0_ENTRY del driver di filtro WDF viene chiamato in un secondo momento, il driver di filtro deve registrarsi per le notifiche di modifica dell'interfaccia del dispositivo usando CM_Register_Notification o IoRegisterPlugPlayNotification (UMDF o KMDF) per ascoltare la classe dell'interfaccia dispositivo in cui il dispositivo USB registrerà il dispositivo. Ad esempio, il driver del filtro di aggiornamento del firmware per una fotocamera RGB viene registrato per KSCATEGORY_VIDEO_CAMERA. Quando riceve la notifica, il driver di filtro deve pubblicare un elemento di lavoro che eseguirà l'aggiornamento del firmware.

I driver di aggiornamento del firmware basati su UMDF possono usare le API specifiche del dispositivo o rilasciare i trasferimenti di controllo direttamente per accedere al dispositivo USB per eseguire l'aggiornamento del firmware. Ad esempio, il driver di filtro basato su UMDF per una fotocamera userebbe le API fotocamera per eseguire l'aggiornamento del firmware.

I driver di aggiornamento del firmware basati su KMDF possono inviare i comandi specifici del fornitore per eseguire l'aggiornamento del firmware.

Al termine del flashing del firmware, il dispositivo deve disconnettersi e riconnettersi al bus. Il dispositivo viene enumerato nuovamente con il nuovo firmware.

Il metodo di utilizzo di un "driver del filtro di aggiornamento del firmware" è consigliato per i dispositivi con risorse sufficienti per contenere due immagini firmware complete (l'immagine di aggiornamento e un'immagine di backup) nella memoria del dispositivo. Il motivo è che se si sono verificati errori durante il download del firmware aggiornato, il dispositivo può abbandonare l'aggiornamento e avviarsi nel firmware originale. Quindi, non mattoni il dispositivo.

Metodo 2: Driver del dispositivo di aggiornamento del firmware

In questo metodo, un driver di filtro inferiore per il dispositivo USB viene installato come parte del processo di aggiornamento del driver. Questo driver di filtro invia un comando al dispositivo per il riavvio in modalità di aggiornamento del firmware, in cui il dispositivo espone un'interfaccia di aggiornamento del firmware. Il driver per l'interfaccia di aggiornamento del firmware carica ed esegue l'aggiornamento del firmware.

Il pacchetto di aggiornamento driver nel server Windows Update per il dispositivo contiene:

  1. Driver filtro inferiore WDF che inserisce il dispositivo in modalità di aggiornamento del firmware

  2. Estensione INF per installare il driver filtro inferiore di WDF

Oltre al pacchetto di aggiornamento driver, in Windows Update è presente un pacchetto di driver di aggiornamento del firmware separato con:

  1. Un driver di dispositivo di aggiornamento del firmware WDF e il relativo INF e

  2. File "firmware.bin".

Aggiornamento del firmware del metodo del driver WDF.

Durante l'installazione del pacchetto di aggiornamento driver, viene chiamata la routine AddDevice del driver di filtro inferiore di WDF. Da questa routine, il driver di filtro esegue una query per la versione del firmware del dispositivo dalla chiave del Registro di sistema HW del dispositivo. Il firmware del dispositivo deve aver inserito la "versione del firmware", usando il descrittore MSOS o l'estensione DEL dispositivo USB INF, sulla chiave del Registro di sistema HW del dispositivo.

  1. Se la versione del firmware del dispositivo e le versioni del firmware previsto del driver di filtro sono diverse o

  2. La versione del firmware non è disponibile nella chiave del Registro di sistema HW del dispositivo

  3. Quindi, il driver di filtro WDF si inserisce nello stack di dispositivi.

  4. In caso contrario, il driver di filtro WDF non si inserisce nello stack di dispositivi

Quando il callback EVT_WDF_DEVICE_D0_ENTRY del driver di filtro WDF viene chiamato in un secondo momento, il driver di filtro invia un comando specifico del fornitore al dispositivo che lo inserisce in modalità di aggiornamento del firmware. Il dispositivo si disconnette e si riconnette, esponendo l'interfaccia di aggiornamento del firmware.

Il sistema enumera l'interfaccia del dispositivo di aggiornamento del firmware. Un driver WDF di aggiornamento del firmware personalizzato fornito dal fornitore, nel pacchetto di aggiornamento del firmware, verrà caricato per questa interfaccia di aggiornamento del firmware. Questo driver aggiorna il firmware.

Quando il callback EVT_WDF_DEVICE_D0_ENTRY del driver di aggiornamento del firmware WDF viene chiamato in un secondo momento, il driver deve registrare un elemento di lavoro che eseguirebbe l'aggiornamento del firmware.

Al termine del flashing del firmware, il dispositivo deve disconnettersi e riconnettersi al bus. Il dispositivo viene enumerato nuovamente con il nuovo firmware.

Questo metodo è consigliato per i dispositivi che non possono contenere le immagini del firmware aggiornate e originali a causa della carenza di memoria nel dispositivo. Il motivo è che se si sono verificati errori durante il download del firmware aggiornato, il dispositivo può abbandonare l'aggiornamento e avviare nuovamente il dispositivo nella modalità di aggiornamento del firmware e l'aggiornamento del firmware può essere ritentato. Quindi, non mattoni il dispositivo.

Ripristino

Il processo di aggiornamento del firmware può non riuscire per vari motivi. In tal caso, quando il dispositivo viene enumerato di nuovo, il driver di aggiornamento del firmware potrebbe tentare di aggiornare di nuovo il firmware e potrebbe non riuscire e questo processo di aggiornamento potrebbe finire in un ciclo. Il driver di aggiornamento del firmware deve mettere un limite superiore al numero di tentativi che può eseguire. Quando i tentativi di aggiornamento del firmware superano una soglia (ad esempio, tre tentativi), il driver di filtro non deve tentare di aggiornare di nuovo il firmware, fino a quando non viene scaricata una nuova versione del driver da WU. Il driver di aggiornamento del firmware può usare il Registro di sistema per rendere persistenti gli stati di ripetizione dei tentativi.

Al termine dell'aggiornamento del firmware del dispositivo, è consigliabile reimpostare il dispositivo stesso ed enumerare nuovamente.

Entrambi i metodi di aggiornamento del firmware, la funzione del dispositivo deve essere arrestata prima di eseguire l'aggiornamento del firmware. In questo modo non ci sono handle aperti per il dispositivo ed evita qualsiasi requisito di riavvio del sistema operativo.

INF di esempio

;==============================================================================
; 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"