Bagikan melalui


Pembaruan firmware perangkat Untuk perangkat USB tanpa menggunakan penginstal bersama

Penting

Dimulai dengan WDK untuk Windows 11, versi 22H2, penginstal bersama yang dapat didistribusikan ulang WDF tidak lagi didukung. Untuk mempelajari cara mengatasi perubahan ini, lihat penginstal turunan WDF tidak dapat berfungsi di artikel masalah yang diketahui WDK.

Vendor perangkat USB menggunakan co-installers untuk memperbarui firmware perangkat yang menggunakan driver perangkat USB bawaan. Namun, penginstal bersama tidak didukung oleh standar "Universal INF" baru, yang merupakan persyaratan pada Windows 10. Ini menimbulkan tantangan untuk proses pembaruan firmware perangkat USB yang ada. Artikel ini menguraikan metode yang direkomendasikan untuk memperbarui firmware perangkat USB tanpa penginstal bersama.

Persyaratan

Persyaratan utama dari proses pembaruan firmware perangkat USB adalah:

  1. Pembaruan firmware tanpa hambatan tanpa interaksi pengguna

  2. Mekanisme pemulihan yang andal (misalnya, memastikan perangkat tidak menjadi tidak berfungsi sepenuhnya)

  3. Bekerja pada Windows 7 dan yang lebih baru

Gambaran Umum

Perangkat USB seperti kamera UVC dirilis dengan firmware yang dapat diperbarui di lapangan. Tidak ada metode standar untuk memperbarui firmware hari ini. Salah satu item yang umum untuk semua mekanisme pembaruan yang ada adalah bahwa beberapa rangkaian perangkat lunak kustom berjalan pada klien dan mengunduh firmware ke perangkat. Biasanya, sebagai bagian dari proses penginstalan perangkat, perangkat lunak pembaruan firmware diinstal. Penginstal tambahan memulai proses pembaruan firmware. Tidak adanya penginstal bersama pada Windows 10 mencegah vendor perangkat memperbarui firmware pada perangkat ini di lapangan.

Metode yang direkomendasikan untuk menghindari tidak adanya penginstal bersama untuk skenario pembaruan firmware perangkat USB adalah dengan menggunakan driver filter yang lebih rendah ke perangkat USB yang memulai proses pembaruan firmware. Selama panggilan AddDevice , driver filter memeriksa versi firmware perangkat dan memperbarui firmware jika perlu.

Gambaran umum pembaruan firmware

Ketika perangkat USB dicolokkan ke sistem, driver kotak masuk generik diinstal untuk perangkat. Setelah penginstalan driver generik, OS meminta server Windows Update untuk ketersediaan paket driver khusus vendor apa pun dan mengunduhnya dan menginstal driver. Paket driver yang diinstal melakukan pembaruan firmware.

Ada dua cara agar firmware dapat diperbarui:

  1. Driver Filter Pembaruan Firmware

    1. Vendor menyediakan driver filter yang lebih rendah yang melakukan pembaruan firmware.
  2. Driver Perangkat Pembaruan Firmware

    1. Vendor menyediakan driver filter yang lebih rendah yang menempatkan perangkat dalam mode pembaruan firmware.

    2. Perangkat terdaftar sebagai perangkat pembaruan firmware.

    3. Vendor memasang driver pembaruan firmware untuk perangkat ini dan memperbarui firmware.

Metode 1: Driver filter untuk pembaruan firmware

Dalam metode ini, driver filter tingkat bawah untuk driver perangkat USB diinstal sebagai bagian dari proses pembaruan driver. Driver filter ini melakukan pembaruan firmware.

Paket pembaruan driver pada server Windows Update berisi:

  • Driver filter bawah WDF untuk pembaruan firmware

  • Ekstensi INF untuk menginstal driver filter bawah WDF pada pembaruan firmware

  • File "firmware.bin"

Firmware memperbarui metode driver filter umdf yang lebih rendah.

Saat menginstal paket pembaruan driver, rutinitas AddDevice dari driver filter WDF untuk pembaruan firmware dipanggil. Dari rutinitas ini, driver filter WDF mendapatkan versi firmware perangkat dari kunci registri HW perangkat. Firmware perangkat harus menempatkan versi firmware menggunakan deskriptor MSOS ke kunci registri HW perangkat.

  1. Jika versi firmware perangkat dan versi firmware yang diharapkan driver filter berbeda, atau

  2. Versi firmware tidak tersedia di kunci registri HW perangkat

    1. Kemudian, driver filter menyisipkan dirinya ke dalam tumpukan perangkat dengan mengembalikan keberhasilan ke panggilan balik AddDevice .
  3. Jika tidak, driver filter tidak akan memasukkan dirinya ke dalam tumpukan perangkat

    1. Karena tidak ada kebutuhan untuk memperbarui firmware karena perangkat memiliki firmware yang diharapkan.

Ketika panggilan balik EVT_WDF_DEVICE_D0_ENTRY driver filter WDF dipanggil di titik selanjutnya, driver filter harus mendaftar untuk pemberitahuan perubahan antarmuka perangkat menggunakan CM_Register_Notification atau IoRegisterPlugPlayNotification (UMDF atau KMDF) untuk mendengarkan kelas antarmuka perangkat tempat perangkat USB mendaftarkan perangkat. Contoh, driver filter pembaruan firmware untuk kamera RGB akan terdaftar di KSCATEGORY_VIDEO_CAMERA. Saat menerima pemberitahuan, driver filter harus memposting item kerja yang akan melakukan pembaruan firmware.

Driver pembaruan firmware berbasis UMDF dapat menggunakan API khusus perangkat atau mengeluarkan transfer kontrol langsung untuk mengakses perangkat USB untuk melakukan pembaruan firmware. Misalnya, driver filter berbasis UMDF untuk kamera akan menggunakan API Kamera untuk melakukan pembaruan firmware.

Driver pembaruan firmware berbasis KMDF dapat mengirim perintah khusus vendor untuk melakukan pembaruan firmware.

Setelah selesai mem-flash firmware, perangkat harus memutuskan sambungan dan menyambungkan kembali ke bus. Perangkat dijumlahkan ulang dengan firmware baru.

Metode penggunaan "driver filter pembaruan firmware", direkomendasikan untuk perangkat yang memiliki sumber daya yang cukup untuk menyimpan dua gambar firmware lengkap (gambar pembaruan dan gambar cadangan) pada memori perangkat. Alasannya adalah jika ada kegagalan selama mengunduh firmware yang diperbarui, perangkat dapat meninggalkan pembaruan dan boot ke dalam firmware aslinya. Dengan demikian, tidak membuat perangkat menjadi tidak dapat digunakan.

Metode 2: Memperbarui driver perangkat melalui pembaruan firmware

Dalam metode ini, driver filter tingkat bawah ke perangkat USB diinstal sebagai bagian dari proses pembaruan driver. Driver filter ini mengirim perintah ke perangkat untuk memulai ulang dalam mode pembaruan firmware, di mana perangkat mengekspos antarmuka pembaruan firmware. Driver untuk antarmuka pembaruan firmware dimuat dan melakukan pembaruan firmware.

Paket pembaruan driver pada server Windows Update untuk perangkat berisi:

  1. Driver filter WDF tingkat bawah yang menempatkan perangkat dalam mode pembaruan firmware

  2. Ekstensi INF untuk menginstal driver filter tingkat bawah WDF.

Selain paket pembaruan driver, paket Driver Perangkat Pembaruan Firmware terpisah ada di Windows Update, dengan:

  1. Driver perangkat pembaruan firmware WDF dan INF-nya, dan

  2. File "firmware.bin".

Metode pembaruan firmware driver WDF.

Saat menginstal paket pembaruan driver, rutinitas AddDevice dari WDF lower filter driver dipanggil. Dari rutinitas ini, driver filter meminta versi firmware perangkat dari kunci registri HW perangkat. Firmware perangkat menyimpan "versi firmware", menggunakan deskriptor MSOS atau INF ekstensi perangkat USB, ke dalam kunci registri HW perangkat.

  1. Jika versi firmware perangkat dan versi firmware yang diharapkan oleh driver filter berbeda atau

  2. Versi firmware tidak tersedia di kunci registri HW perangkat

  3. Kemudian, driver filter WDF mengintegrasikan dirinya ke dalam tumpukan perangkat.

  4. Jika tidak, driver filter WDF tidak akan menggabungkan dirinya ke dalam tumpukan perangkat

Ketika EVT_WDF_DEVICE_D0_ENTRY panggilan balik driver filter WDF dipanggil pada titik waktu berikutnya, driver filter mengeluarkan perintah khusus vendor ke perangkat yang menempatkannya dalam mode pembaruan firmware. Perangkat terputus dan terhubung kembali, mengekspos antarmuka pembaruan firmware.

Sistem menghitung antarmuka perangkat pembaruan firmware. Driver WDF pembaruan firmware kustom yang disediakan oleh vendor dalam paket pembaruan firmware akan dimuat untuk antarmuka pembaruan firmware ini. Driver ini memperbarui firmware.

Ketika panggilan balik EVT_WDF_DEVICE_D0_ENTRY driver pembaruan firmware WDF dipanggil di titik selanjutnya, driver harus memposting item kerja yang akan melakukan pembaruan firmware.

Setelah selesai mem-flash firmware, perangkat harus memutuskan sambungan dan menyambungkan kembali ke bus. Perangkat di-enumerasi ulang dengan firmware baru.

Metode ini direkomendasikan untuk perangkat yang tidak dapat menahan gambar firmware yang diperbarui dan asli karena kekurangan memori pada perangkat. Alasannya adalah jika ada kegagalan selama mengunduh firmware yang diperbarui, perangkat dapat meninggalkan pembaruan dan boot perangkat ke mode pembaruan firmware-nya lagi dan pembaruan firmware dapat dicoba kembali. Dengan demikian, tidak merusak perangkat.

Pemulihan

Proses pembaruan firmware dapat gagal karena berbagai alasan. Jika itu terjadi, ketika perangkat dijumlahkan lagi, driver pembaruan firmware dapat mencoba memperbarui firmware lagi dan mungkin gagal lagi dan proses pembaruan ini bisa berakhir dalam perulangan. Driver pembaruan firmware harus menempatkan batas atas untuk jumlah percobaan ulang yang dapat dilakukannya. Ketika upaya ulang pembaruan firmware melebihi batas ambang (misalnya, tiga kali mencoba ulang), maka driver filter tidak boleh mencoba memperbarui firmware kembali, sampai versi baru driver diunduh dari Windows Update. Driver pembaruan firmware dapat menggunakan registri untuk mempertahankan status coba lagi.

Di akhir pembaruan firmware perangkat, kami sarankan perangkat mengatur ulang dirinya sendiri dan menghitung ulang.

Kedua metode pembaruan firmware, fungsi perangkat harus dihentikan sebelum melakukan pembaruan firmware. Ini memastikan tidak ada handel terbuka ke perangkat dan menghindari persyaratan hidupkan ulang OS apa pun.

Contoh 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"