Freigeben über


Aktualisieren der Gerätefirmware mit Windows Update

In diesem Artikel wird beschrieben, wie Sie die Firmware eines Wechselgeräts mithilfe des Windows Update (WU)-Diensts aktualisieren. Informationen zum Aktualisieren der Systemfirmware finden Sie auf der Windows UEFI-Firmwareupdateplattform.

Dazu stellen Sie einen Gerätetreiber bereit, der die Firmwarenutzlast enthält. Wenn Sie einen Funktionstreiber für Ihr Gerät bereitstellen, können Sie die Firmwareupdatelogik und Nutzlast zum vorhandenen Treiber hinzufügen oder ein separates Firmwareupdatetreiberpaket bereitstellen. Wenn Ihr Gerät einen von Microsoft bereitgestellten Treiber verwendet, müssen Sie ein separates Firmwareupdatetreiberpaket bereitstellen. In beiden Fällen muss das Firmwareupdatetreiberpaket universell sein.

Weitere Informationen zu universellen Treibern finden Sie unter Verwenden einer universellen INF-Datei. Die Treiberdatei kann KMDF, UMDF 2 oder das Windows-Treibermodell verwenden.

Da WU keine Software ausführen kann, muss der Firmwareupdatetreiber die Firmware zur Installation an Plug & Play (PnP) übergeben.

Treiberaktionen für Firmwareupdates

In der Regel ist der Firmwareupdatetreiber ein einfacher Gerätetreiber, der die folgenden Verfahren implementiert:

  • Beim Start des Geräts oder in der EVT_WDF_DRIVER_DEVICE_ADD Rückruffunktion des Treibers:

    1. Identifizieren Sie das Gerät, an das es angeschlossen ist.

    2. Ermitteln Sie, ob der Treiber über eine Firmwareversion verfügt, die aktueller ist als die Version auf der Firmware, die derzeit auf der Gerätehardware flasht.

    3. Wenn ein Firmwareupdate erforderlich ist, legen Sie einen Ereigniszeitgeber fest, um das Update zu planen.

    4. Andernfalls tun Sie nichts, bis der Treiber erneut gestartet wird.

  • Während der Systemlaufzeit:

    1. Wenn eine Aktualisierung in die Warteschlange gestellt wird, warten Sie, bis eine Reihe von Bedingungen erfüllt ist.

    2. Wenn Bedingungen erfüllt sind, führen Sie das Firmwareupdate auf dem Gerät aus.

Inhalt des Firmwareupdatetreibers

In der Regel enthält das Firmwareupdatetreiberpaket die folgenden Elemente:

  • Universal Driver INF

  • Treiberkatalog

  • Funktionstreiber (.sys oder .dll)

  • Firmwareupdate-Nutzlast binär

Übermitteln Sie Ihr Firmwareupdatepaket als separate Treiberübermittlung.

Hinzufügen der Firmwareupdatelogik zu einem vom Anbieter bereitgestellten Treiber

Der vorhandene Funktionstreiber kann den Firmwareupdatemechanismus implementieren, wie im folgenden Diagramm dargestellt:

Verwenden von Windows Update zum Bereitstellen von Firmwareupdates über vorhandenen Funktionstreiber.

Wenn Sie den Funktionstreiber und den Firmwareupdatetreiber separat aktualisieren möchten, erstellen Sie einen zweiten Geräteknoten, auf dem Sie den Firmwareupdatetreiber installieren möchten. Das folgende Diagramm zeigt, wie ein Gerät zwei separate Geräteknoten aufweisen kann:

Verwenden von Windows Update zum Bereitstellen von Firmwareupdates über einen separaten Geräteknoten.

In diesem Fall müssen die Funktions- und Firmwaregeräteknoten unterschiedliche Hardware-IDs aufweisen, um unabhängig voneinander ausgerichtet zu werden.

Es gibt eine Reihe von Möglichkeiten zum Erstellen eines zweiten Geräteknotens. Bestimmte Gerätetypen können einen zweiten Geräteknoten auf einem physischen Gerät verfügbar machen, z. B. USB. Sie können diese Funktionalität verwenden, um einen geräteknotenzielfähigen Wu zu erstellen und einen Firmwareupdatetreiber darauf zu installieren. Viele Gerätetypen erlauben jedoch nicht, dass ein einzelnes physisches Gerät mehrere Geräteknoten aufzählt.

Verwenden Sie in diesem Fall eine Erweiterung INF, die die AddComponent-Direktive angibt, um einen Geräteknoten zu erstellen, der von Windows Update gezielt werden kann, und installieren Sie den Firmwareupdatetreiber darauf. Der folgende Codeausschnitt aus einer INF-Datei zeigt, wie Sie dazu vorgehen können:

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

Gibt im obigen INF-Beispiel an, ComponentIDs = ComponentDeviceId dass das untergeordnete Gerät eine Hardware-ID von SWC\ComponentDeviceId. Bei der Installation erstellt dieser INF die folgende Gerätehierarchie:

Übergeordnetes Gerät, primäres Gerät, AddComponent-Gerät.

Aktualisieren Sie für zukünftige Firmwareupdates die INF- und Binärdatei, die die Firmwarenutzlast enthält.

Hinzufügen der Firmwareupdatelogik zu einem von Microsoft bereitgestellten Treiber

Zum Aktualisieren der Firmware für Geräte, die einen von Microsoft bereitgestellten Treiber verwenden, müssen Sie wie oben gezeigt einen zweiten Geräteknoten erstellen.

Bewährte Methoden

  • Geben Sie in Ihrem Firmwareupdatetreiber INF DIRID 13 an, damit PnP die Dateien im Treiberpaket im DriverStore verlässt:

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

    PnP löst diesen Speicherort auf, wenn es das Gerät installiert. Der Treiber kann dann diesen Registrierungsschlüssel öffnen, um den Speicherort der Nutzlast zu ermitteln.

  • Firmwareupdatetreiber sollten die folgenden INF-Einträge angeben:

    Class=Firmware
    ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
    
  • Um einen anderen Geräteknoten zu finden, sollte der Firmwaretreiber die Gerätestruktur relativ zu sich selbst durchlaufen, nicht durch Aufzählen aller Geräteknoten für eine Übereinstimmung. Ein Benutzer hat möglicherweise mehrere Instanzen des Geräts angeschlossen, und der Firmwaretreiber sollte nur das Gerät aktualisieren, dem es zugeordnet ist. In der Regel ist der zu findende Geräteknoten das übergeordnete oder gleichgeordnete Element des Geräteknotens, auf dem der Firmwaretreiber installiert ist. Im obigen Diagramm mit zwei Geräteknoten kann der Firmwareupdatetreiber z. B. nach einem gleichgeordneten Gerät suchen, um den Funktionstreiber zu finden. Im diagramm unmittelbar oben kann der Firmwaretreiber nach dem übergeordneten Gerät suchen, um das primäre Gerät zu finden, mit dem er kommunizieren muss.

  • Der Treiber sollte robust für mehrere Instanzen des Geräts sein, das auf dem System vorhanden ist, möglicherweise mit mehreren verschiedenen Firmwareversionen. Es kann z. B. eine Instanz des Geräts geben, das mehrmals verbunden und aktualisiert wurde. ein brandneues Gerät kann dann angeschlossen werden, bei dem mehrere Firmwareversionen alt sind. Dies bedeutet, dass der Zustand (z. B. die aktuelle Version) auf dem Gerät und nicht an einem globalen Speicherort gespeichert werden muss.

  • Wenn es eine vorhandene Methode zum Aktualisieren der Firmware (z. B. EXE oder Co-Installer) gibt, können Sie den Updatecode in einem UMDF-Treiber weitgehend wiederverwenden.