Freigeben über


Gerätefirmwareupdate für USB-Geräte ohne Verwendung eines Co-Installers

Wichtig

Ab dem WDK für Windows 11, Version 22H2, werden WDF-weiterverteilbare Co-Installer nicht mehr unterstützt. Informationen zum Umgehen dieser Änderung finden Sie im Artikel zu bekannten Problemen im WDF-Artikel "Weiterverteilbare Co-Installer" nicht.

USB-Gerätehersteller verwenden Co-Installer, um die Gerätefirmware für Geräte zu aktualisieren, die USB-Gerätetreiber im Posteingang verwenden. Co-Installer werden jedoch nicht vom neuen Standard "Universal INF" unterstützt, was eine Anforderung für Windows 10 ist. Dies stellt eine Herausforderung für den bestehenden Firmwareupdateprozess für USB-Geräte dar. In diesem Artikel wird eine empfohlene Methode zum Aktualisieren der USB-Gerätefirmware ohne Co-Installer beschrieben.

Anforderungen

Die wichtigsten Anforderungen des Firmwareupdateprozesses für USB-Geräte sind:

  1. Nahtloses Firmwareupdate ohne Benutzerinteraktion

  2. Zuverlässiger Wiederherstellungsmechanismus (z. B. kein Mauerwerk von Geräten)

  3. Funktioniert unter Windows 7 und höher

Übersicht

USB-Geräte wie UVC-Kameras werden mit auf dem Feld aktualisierbarer Firmware veröffentlicht. Es gibt keine Standardmethode, um die Firmware heute zu aktualisieren. Ein Element, das allen vorhandenen Updatemechanismen gemeinsam ist, besteht darin, dass einige benutzerdefinierte Softwaresuite auf dem Client ausgeführt wird und die Firmware auf das Gerät herunterlädt. Im Rahmen des Geräteinstallationsprozesses wird in der Regel die Softwaresuite für die Firmwareaktualisierung installiert. Der Co-Installer startet den Firmwareupdateprozess. Das Fehlen von Co-Installern unter Windows 10 verhindert, dass Gerätehersteller die Firmware auf diesen Geräten im Feld aktualisieren.

Die empfohlene Methode, um das Fehlen eines Co-Installers für das Firmwareupdateszenario für USB-Geräte zu umgehen, besteht darin, einen niedrigeren Filtertreiber für das USB-Gerät zu verwenden, das den Firmwareupdatevorgang startet. Während des AddDevice-Aufrufs überprüft der Filtertreiber die Gerätefirmwareversion und aktualisiert die Firmware bei Bedarf.

Übersicht über firmwareupdates

Wenn ein USB-Gerät an das System angeschlossen ist, wird der generische Posteingangstreiber für das Gerät installiert. Nach der Installation des generischen Treibers fragt das Betriebssystem den Windows Update-Server nach jeder anbieterspezifischen Treiberpaketverfügbarkeit ab und lädt ihn herunter und installiert den Treiber. Das installierte Treiberpaket führt das Firmwareupdate aus.

Es gibt zwei Möglichkeiten, die Firmware zu aktualisieren:

  1. Firmwareupdatefiltertreiber

    1. Ein Anbieter hat einen niedrigeren Filtertreiber bereitgestellt, der das Firmwareupdate durchführt.
  2. Firmwareupdate-Gerätetreiber

    1. Ein Anbieter hat einen niedrigeren Filtertreiber bereitgestellt, der das Gerät in den Firmwareupdatemodus versetzt.

    2. Das Gerät zählt als Firmwareupdategerät auf.

    3. Der Vom Anbieter bereitgestellte Firmwareupdatetreiber wird auf diesem Gerät geladen und die Firmware aktualisiert.

Methode 1: Firmwareupdatefiltertreiber

Bei dieser Methode wird ein niedrigerer Filtertreiber für den USB-Gerätetreiber als Teil des Treiberupdateprozesses installiert. Dieser Filtertreiber führt das Firmwareupdate aus.

Das Treiberupdatepaket auf dem Windows Update-Server enthält:

  • WDF-Treiber für Firmwareupdates mit niedrigerem Filter

  • Eine Erweiterung INF zum Installieren des WDF-Treibers für firmwareupdates niedrigerer Filter

  • Die Datei "firmware.bin"

Umdf-Treibermethode für Firmwareupdates.

Beim Installieren des Treiberupdatepakets wird die AddDevice-Routine des WDF-Filters des Firmwareupdatetreibers aufgerufen. Aus dieser Routine erhält der WDF-Filtertreiber die Firmwareversion des Geräts aus dem HW-Registrierungsschlüssel des Geräts. Die Gerätefirmware sollte die Firmwareversion mit dem MSOS-Deskriptor auf dem HW-Registrierungsschlüssel des Geräts platzieren.

  1. Wenn die Firmwareversion des Geräts und die erwartete Firmwareversion des Filtertreibers unterschiedlich sind, oder

  2. Die Firmwareversion ist im HW-Registrierungsschlüssel des Geräts nicht verfügbar.

    1. Anschließend fügt sich der Filtertreiber selbst in den Gerätestapel ein, indem er erfolgreich zum AddDevice-Rückruf zurückgibt.
  3. Andernfalls fügt sich der Filtertreiber nicht in den Gerätestapel ein.

    1. Da es keine Notwendigkeit gibt, die Firmware zu aktualisieren, da das Gerät über die erwartete Firmware verfügt.

Wenn der EVT_WDF_DEVICE_D0_ENTRY Rückruf des WDF-Filtertreibers zu einem späteren Zeitpunkt aufgerufen wird, muss der Filtertreiber für Änderungsbenachrichtigungen über die Geräteschnittstelle mithilfe von CM_Register_Notification oder IoRegisterPlugPlayNotification (UMDF oder KMDF) registrieren, um die Geräteschnittstellenklasse zu überwachen, bei der das USB-Gerät das Gerät registriert. Beispiel: Der Firmwareupdatefiltertreiber für eine RGB-Kamera würde sich für KSCATEGORY_VIDEO_CAMERA registrieren. Beim Empfangen der Benachrichtigung sollte der Filtertreiber ein Arbeitselement bereitstellen, das das Firmwareupdate ausführt.

UMDF-basierte Firmwareupdatetreiber können die gerätespezifischen APIs verwenden oder die Steuerungsübertragungen direkt ausgeben, um auf das USB-Gerät zuzugreifen, um das Firmwareupdate durchzuführen. Beispielsweise würde der UMDF-basierte Filtertreiber für eine Kamera Kamera-APIs zum Ausführen des Firmwareupdates verwenden.

KMDF-basierte Firmwareupdatetreiber können die herstellerspezifischen Befehle senden, um das Firmwareupdate auszuführen.

Nach Abschluss des Flashings der Firmware muss das Gerät die Verbindung mit dem Bus trennen und erneut herstellen. Das Gerät wird mit neuer Firmware neu aufgezählt.

Die Methode der Verwendung eines "Firmwareupdatefiltertreibers" wird für Geräte empfohlen, die über genügend Ressourcen verfügen, um zwei vollständige Firmwareimages (das Updateimage und ein Sicherungsimage) im Gerätespeicher zu enthalten. Der Grund dafür ist, dass beim Herunterladen der aktualisierten Firmware Fehler aufgetreten sind, kann das Gerät das Update abbrechen und in seine ursprüngliche Firmware starten. Daher wird das Gerät nicht gemauert.

Methode 2: Firmwareupdategerätetreiber

Bei dieser Methode wird ein niedrigerer Filtertreiber auf dem USB-Gerät als Teil des Treiberupdateprozesses installiert. Dieser Filtertreiber sendet einen Befehl an das Gerät, um im Firmwareupdatemodus neu zu starten, wobei das Gerät eine Firmwareupdateschnittstelle verfügbar macht. Der Treiber für die Firmwareupdateschnittstelle wird geladen und führt das Firmwareupdate aus.

Das Treiberupdatepaket auf dem Windows Update-Server für das Gerät enthält:

  1. Ein WDF-Niedrigerer Filtertreiber, der das Gerät im Firmwareupdatemodus platziert

  2. Eine Erweiterungs-INF zum Installieren des WDF-Treibers für niedrigere Filter

Zusätzlich zum Treiberupdatepaket ist ein separates FirmwareUpdate Device Driver-Paket unter Windows Update vorhanden, mit:

  1. Ein WDF-Firmwareupdategerätetreiber und dessen INF und

  2. Die Datei "firmware.bin".

WDF-Treibermethode für Firmwareupdates.

Beim Installieren des Treiberupdatepakets wird die AddDevice-Routine des WDF-Niedrigerfiltertreibers aufgerufen. Aus dieser Routine fragt der Filtertreiber die Gerätefirmwareversion vom HW-Registrierungsschlüssel des Geräts ab. Die Gerätefirmware sollte die "Firmwareversion" unter Verwendung des MSOS-Deskriptors oder der INF-Erweiterung des USB-Geräts auf dem HW-Registrierungsschlüssel des Geräts platziert haben.

  1. Wenn die Gerätefirmwareversion und der erwartete Filtertreiber Firmwareversionen unterschiedlich sind oder

  2. Die Firmwareversion ist im HW-Registrierungsschlüssel des Geräts nicht verfügbar.

  3. Anschließend fügt sich der WDF-Filtertreiber selbst in den Gerätestapel ein.

  4. Andernfalls fügt sich der WDF-Filtertreiber nicht selbst in den Gerätestapel ein.

Wenn der EVT_WDF_DEVICE_D0_ENTRY Rückruf des WDF-Filtertreibers zu einem späteren Zeitpunkt aufgerufen wird, gibt der Filtertreiber einen anbieterspezifischen Befehl für das Gerät aus, das ihn im Firmwareupdatemodus platziert. Das Gerät wird getrennt und erneut verbunden, wodurch die Firmwareupdateschnittstelle verfügbar ist.

Das System listet die Firmwareupdategeräteschnittstelle auf. Ein vom Anbieter bereitgestellter benutzerdefinierter WDF-Treiber für Firmwareupdates wird für diese Firmwareupdateschnittstelle geladen. Dieser Treiber aktualisiert die Firmware.

Wenn der EVT_WDF_DEVICE_D0_ENTRY Rückruf des WDF-Firmwareupdatetreibers zu einem späteren Zeitpunkt aufgerufen wird, muss der Treiber eine Arbeitsaufgabe bereitstellen, die das Firmwareupdate ausführen würde.

Nach Abschluss des Flashings der Firmware muss das Gerät die Verbindung mit dem Bus trennen und erneut herstellen. Das Gerät wird mit neuer Firmware neu aufgezählt.

Diese Methode wird für Geräte empfohlen, die die aktualisierten und ursprünglichen Firmwareimages aufgrund eines Speichermangels auf dem Gerät nicht enthalten können. Der Grund dafür ist, dass beim Herunterladen der aktualisierten Firmware Fehler aufgetreten sind, kann das Gerät das Update abbrechen und das Gerät erneut in den Firmwareupdatemodus starten, und das Firmwareupdate kann erneut versucht werden. Daher wird das Gerät nicht gemauert.

Wiederherstellung

Der Firmwareupdateprozess kann aus verschiedenen Gründen fehlschlagen. Wenn das Gerät erneut aufgezählt wird, versucht der Firmwareupdatetreiber möglicherweise erneut, die Firmware erneut zu aktualisieren, und schlägt möglicherweise erneut fehl, und dieser Updatevorgang könnte in einer Schleife enden. Der Firmwareupdatetreiber muss eine Obergrenze für die Anzahl der Wiederholungen festlegen, die er ausführen kann. Wenn die Firmwareupdate-Wiederholungen einen Schwellenwert überschreiten (z. B. drei Wiederholungen), sollte der Filtertreiber nicht erneut versuchen, die Firmware zu aktualisieren, bis eine neue Version des Treibers von WU heruntergeladen wird. Der Firmwareupdatetreiber kann die Registrierung verwenden, um die Wiederholungszustände beizubehalten.

Am Ende des Gerätefirmwareupdates wird empfohlen, dass sich das Gerät selbst zurücksetzen und erneut aufzählt.

Beide Methoden des Firmwareupdates müssen vor dem Ausführen des Firmwareupdates beendet werden. Dadurch wird sichergestellt, dass es kein offenes Handle für das Gerät gibt und keine Betriebssystemneustartanforderung erforderlich ist.

Beispiel-INF

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