Udostępnij przez


Aktualizacja oprogramowania układowego urządzenia dla urządzeń USB bez używania współinstalatora

Ważne

Począwszy od zestawu WDK dla systemu Windows 11 w wersji 22H2, instalatory redystrybucyjne pakietu WDF nie są już obsługiwane. Aby dowiedzieć się, jak obejść tę zmianę, zobacz współinstalatory współdystrybucyjne WDF nie działają w artykule WDK znane problemy.

Dostawcy urządzeń USB używają współinstalatorów do aktualizowania oprogramowania układowego dla urządzeń korzystających z wbudowanych sterowników USB. Jednak współinstalatorzy nie są obsługiwane przez nowy standard "Universal INF", który jest wymagany w systemie Windows 10. Stanowi to wyzwanie dla istniejącego procesu aktualizacji oprogramowania układowego urządzenia USB. W tym artykule opisano zalecaną metodę aktualizowania oprogramowania układowego urządzenia USB bez współinstalatora.

Wymagania

Podstawowe wymagania procesu aktualizacji oprogramowania układowego urządzenia USB to:

  1. Bezproblemowa aktualizacja oprogramowania układowego bez interakcji użytkownika

  2. Niezawodny mechanizm odzyskiwania (na przykład uniemożliwiający uszkodzenie urządzeń)

  3. Działa w systemie Windows 7 lub nowszym

Przegląd

Urządzenia USB, takie jak kamery UVC, są wydawane z oprogramowaniem układowym możliwym do aktualizacji w miejscu użytkowania. Obecnie nie ma standardowej metody aktualizacji oprogramowania układowego. Jednym z elementów wspólnych dla wszystkich istniejących mechanizmów aktualizacji jest to, że niektóre niestandardowe pakiety oprogramowania są uruchamiane na kliencie i pobierają oprogramowanie układowe na urządzenie. Zazwyczaj w ramach procesu instalacji urządzenia instalowany jest pakiet aktualizacyjny oprogramowania układowego. Współinstalator uruchamia proces aktualizacji oprogramowania układowego. Brak współinstalatorów w systemie Windows 10 uniemożliwia dostawcom urządzeń aktualizowanie oprogramowania układowego na tych urządzeniach w terenie.

Zalecaną metodą obejścia braku współinstalatora dla scenariusza aktualizacji oprogramowania układowego urządzenia USB jest użycie sterownika filtru dolnego poziomu do urządzenia USB, który inicjuje proces aktualizacji oprogramowania układowego. Podczas wywołania AddDevice sterownik filtru sprawdza wersję oprogramowania układowego urządzenia i jeśli to konieczne, aktualizuje oprogramowanie układowe.

Omówienie aktualizacji oprogramowania układowego

Gdy urządzenie USB jest podłączone do systemu, ogólny sterownik skrzynki odbiorczej jest instalowany dla urządzenia. Po zainstalowaniu sterownika ogólnego system operacyjny wysyła zapytanie do serwera Windows Update pod kątem dostępności pakietu sterowników specyficznego dla dostawcy i pobiera go i instaluje sterownik. Zainstalowany pakiet sterowników wykonuje aktualizację oprogramowania układowego.

Istnieją dwa sposoby aktualizowania oprogramowania układowego:

  1. Sterownik filtru aktualizacji oprogramowania układowego

    1. Dostawca dostarczył niższy sterownik filtru, który wykonuje aktualizację oprogramowania układowego.
  2. Sterownik urządzenia aktualizacji oprogramowania układowego

    1. Dostawca dostarczył niższy sterownik filtru, który umieszcza urządzenie w trybie aktualizacji oprogramowania układowego.

    2. Urządzenie wyświetla się jako urządzenie aktualizacyjne oprogramowania.

    3. Sterownik aktualizacji oprogramowania układowego dostarczony przez dostawcę jest ładowany na tym urządzeniu i aktualizuje oprogramowanie układowe.

Metoda 1. Sterownik filtru aktualizacji oprogramowania układowego

W tej metodzie niższy sterownik filtrowania dla sterownika urządzenia USB jest instalowany jako część procesu aktualizacji sterownika. Ten sterownik filtru wykonuje aktualizację oprogramowania układowego.

Pakiet aktualizacji sterowników na serwerze Windows Update zawiera:

  • Sterownik niższego filtru aktualizacji oprogramowania układowego WDF

  • Rozszerzenie INF do instalowania aktualizacji oprogramowania układowego dolnego sterownika filtru WDF

  • Plik "firmware.bin"

Aktualizacja oprogramowania układowego metodą sterownika filtru dolnego UMDF.

Podczas instalowania pakietu aktualizacji sterownika wywoływana jest procedura AddDevice sterownika filtru WDF aktualizacji oprogramowania układowego. Z tej procedury sterownik filtru WDF pobiera z klucza rejestru urządzenia HW wersję oprogramowania układowego urządzenia. Oprogramowanie układowe urządzenia powinno umieścić wersję oprogramowania układowego przy użyciu deskryptora MSOS na klucz rejestru HW urządzenia.

  1. Jeśli wersja oprogramowania układowego urządzenia i oczekiwana wersja oprogramowania układowego sterownika filtru są inne lub

  2. Wersja oprogramowania układowego nie jest dostępna w kluczu rejestru HW urządzenia

    1. Następnie sterownik filtru wstawia się do stosu urządzenia, zwracając powodzenie do wywołania zwrotnego addDevice .
  3. W przeciwnym razie sterownik filtru nie zostanie umieszczony w stosie urządzenia.

    1. Ponieważ nie ma potrzeby aktualizowania oprogramowania układowego, ponieważ urządzenie ma oczekiwane oprogramowanie układowe.

Gdy w późniejszym momencie wywołany zostanie callback EVT_WDF_DEVICE_D0_ENTRY sterownika filtru WDF, sterownik ten musi zarejestrować się na powiadomienia o zmianach interfejsu urządzenia, używając CM_Register_Notification lub IoRegisterPlugPlayNotification (UMDF lub KMDF), aby nasłuchiwać klasy interfejsu urządzenia, do której urządzenie USB się rejestruje. Na przykład sterownik aktualizacji oprogramowania układowego dla kamery RGB zarejestruje się jako KSCATEGORY_VIDEO_CAMERA. Po otrzymaniu powiadomienia sterownik filtru powinien opublikować element roboczy, który wykona aktualizację oprogramowania układowego.

Sterowniki aktualizacji oprogramowania układowego oparte na UMDF mogą używać interfejsów API specyficznych dla urządzenia lub wykonywać transfery sterowania bezpośrednio w celu uzyskania dostępu do urządzenia USB w celu przeprowadzenia aktualizacji oprogramowania układowego. Na przykład sterownik filtru opartego na usłudze UMDF dla aparatu używa interfejsów API aparatu do przeprowadzania aktualizacji oprogramowania układowego.

Sterowniki aktualizacji oprogramowania układowego opartego na usłudze KMDF mogą wysyłać określone przez dostawcę polecenia w celu przeprowadzenia aktualizacji oprogramowania układowego.

Po zakończeniu wgrywania oprogramowania układowego urządzenie musi odłączyć się i ponownie połączyć się z magistralą. Urządzenie jest ponownie wyliczane przy użyciu nowego oprogramowania układowego.

Metoda używania "sterownika filtru aktualizacji oprogramowania układowego" jest zalecana w przypadku urządzeń, które mają wystarczającą ilość zasobów do przechowywania dwóch pełnych obrazów oprogramowania układowego (obrazu aktualizacji i obrazu kopii zapasowej) w pamięci urządzenia. Przyczyną jest to, że podczas pobierania zaktualizowanego oprogramowania układowego wystąpiły błędy, urządzenie może porzucić aktualizację i uruchomić je do oryginalnego oprogramowania układowego. W związku z tym nie uszkodzić urządzenia.

Metoda 2. Aktualizacja oprogramowania układowego sterownika urządzenia

W tej metodzie jako część procesu aktualizacji sterownika instalowany jest sterownik filtru dolnego dla urządzenia USB. Ten sterownik filtru wysyła polecenie do urządzenia w celu ponownego uruchomienia w trybie aktualizacji oprogramowania układowego, gdzie urządzenie uwidacznia interfejs aktualizacji oprogramowania układowego. Sterownik interfejsu aktualizacji oprogramowania układowego ładuje się i wykonuje aktualizację oprogramowania układowego.

Pakiet aktualizacji sterowników na serwerze Windows Update dla urządzenia zawiera:

  1. Sterownik niższego filtru usługi WDF, który umieszcza urządzenie w trybie aktualizacji oprogramowania układowego

  2. Rozszerzenie INF do zainstalowania sterownika filtru niższego poziomu usługi WDF

Oprócz pakietu aktualizacji sterowników, w usłudze Windows Update znajduje się oddzielny pakiet sterownika urządzenia do aktualizacji oprogramowania układowego z:

  1. Sterownik urządzenia aktualizacji oprogramowania układowego WDF i jego INF oraz

  2. Plik "firmware.bin".

Metoda aktualizacji oprogramowania układowego sterownika WDF.

Podczas instalowania pakietu aktualizacji sterowników wywoływana jest procedura AddDevice sterownika niższego filtru WDF. Z tej procedury sterownik filtru wysyła zapytania dotyczące wersji oprogramowania układowego urządzenia z klucza rejestru HW urządzenia. Oprogramowanie układowe urządzenia umieszcza "wersję oprogramowania układowego" na kluczu rejestru sprzętowego urządzenia, używając deskryptora MSOS lub rozszerzenia INF urządzenia USB.

  1. Jeśli wersja oprogramowania układowego urządzenia i oczekiwane wersje oprogramowania układowego sterownika filtru są inne lub

  2. Wersja oprogramowania układowego nie jest dostępna w kluczu rejestru HW urządzenia

  3. Następnie sterownik filtru WDF zostaje wstawiony do stosu urządzenia.

  4. W przeciwnym razie sterownik filtru WDF nie zostanie wstawiony do stosu urządzenia.

Gdy wywołanie zwrotne EVT_WDF_DEVICE_D0_ENTRY sterownika filtru WDF następuje w późniejszym momencie, sterownik filtru wysyła polecenie specyficzne dla dostawcy do urządzenia, co umieszcza je w trybie aktualizacji oprogramowania układowego. Urządzenie rozłącza się i ponownie nawiązuje połączenie, odsłaniając interfejs aktualizacji oprogramowania układowego.

System wylicza interfejs urządzenia aktualizacji oprogramowania układowego. Niestandardowy sterownik WDF aktualizacji oprogramowania układowego dostarczony przez dostawcę w pakiecie aktualizacji oprogramowania układowego zostanie załadowany dla tego interfejsu aktualizacji oprogramowania układowego. Ten sterownik aktualizuje oprogramowanie układowe.

Gdy później zostanie wywołane wywołanie zwrotne EVT_WDF_DEVICE_D0_ENTRY sterownika aktualizacji firmware WDF, sterownik musi zainicjować zadanie robocze, które wykona aktualizację firmware.

Po zakończeniu wgrywania oprogramowania układowego urządzenie musi odłączyć się i ponownie połączyć się z magistralą. Urządzenie jest ponownie wyliczane przy użyciu nowego oprogramowania układowego.

Ta metoda jest zalecana w przypadku urządzeń, które nie mogą przechowywać zaktualizowanych i oryginalnych obrazów oprogramowania układowego z powodu braku pamięci na urządzeniu. Przyczyną jest to, że wystąpiły błędy podczas pobierania zaktualizowanego oprogramowania układowego, urządzenie może porzucić aktualizację i ponownie uruchomić urządzenie w trybie aktualizacji oprogramowania układowego, a aktualizacja oprogramowania układowego może zostać ponowiona. W związku z tym nie uszkodzić urządzenia.

Odzyskiwanie

Proces aktualizacji oprogramowania układowego może zakończyć się niepowodzeniem z różnych powodów. Jeśli tak się stanie, gdy urządzenie zostanie ponownie wyliczone, sterownik aktualizacji oprogramowania układowego może spróbować ponownie zaktualizować oprogramowanie układowe i może zakończyć się niepowodzeniem, a ten proces aktualizacji może zakończyć się w pętli. Sterownik aktualizacji oprogramowania układowego musi wprowadzić górny limit liczby ponownych prób, które może wykonać. Gdy ponowne próby aktualizacji oprogramowania układowego przekraczają próg (na przykład trzy ponawianie prób), sterownik filtru nie powinien ponownie aktualizować oprogramowania układowego, dopóki nie zostanie pobrana nowa wersja sterownika z usługi WU. Sterownik aktualizacji oprogramowania układowego może używać rejestru do utrwalania stanów ponawiania prób.

Na końcu aktualizacji oprogramowania układowego urządzenia zalecamy zresetowanie samego urządzenia i ponowne wyliczenie.

Przy obu metodach aktualizacji oprogramowania układowego, należy zatrzymać funkcję urządzenia przed przeprowadzeniem aktualizacji. Dzięki temu nie ma otwartego dojścia do urządzenia i nie jest wymagane ponowne uruchomienie systemu operacyjnego.

Przykładowa informacja

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