Bagikan melalui


Konfigurasi file INF Component Firmware Update (CFU)

Untuk mengonfigurasi file INF kustom untuk CFU, ikuti panduan dalam topik ini untuk memberikan nilai dan pengaturan yang benar untuk file gambar firmware dan perangkat keras Anda.

Catatan

CFU tersedia di Windows 10, versi 2004 (Windows 10 Pembaruan Mei 2020) dan versi yang lebih baru.

Contoh file INF CFU yang disertakan di bawah ini menyediakan titik awal untuk file INF kustom perangkat Anda. INF sampel mengonfigurasi driver kotak masuk CFU (hidcfu.dll) untuk mengaktifkan skenario pembaruan firmware untuk perangkat CFU Hid virtual. Lihat topik simulasi pembaruan firmware perangkat HID virtual CFU untuk detail tentang contoh kode perangkat virtual dan panduan yang mensimulasikan pembaruan firmware pada perangkat HID virtual. Bagian di bawah ini mereferensikan sampel file INF yang disertakan untuk mengilustrasikan konsep konfigurasi yang dibahas dalam topik ini.

File INF Anda yang sebenarnya harus disesuaikan dan dikonfigurasi khusus untuk firmware perangkat dan perangkat keras Anda.

Sebelum Anda mulai

Sumber daya berikut akan membantu Anda mempelajari tentang protokol Pembaruan Firmware Komponen (CFU).

Gambaran Umum

Untuk memperbarui gambar firmware untuk perangkat Anda dengan menggunakan model CFU, Anda harus berharap untuk memenuhi persyaratan berikut:

  • Berikan file INF kustom untuk perangkat Anda. File ini menyediakan informasi ke driver kotak masuk CFU yang mengirim pembaruan firmware ke perangkat. Kami menyarankan agar Anda menyesuaikan sampel file CFU INF yang disediakan di bawah ini dalam topik ini untuk mendukung skenario pembaruan firmware Anda.

  • Perangkat Anda harus dikirim dengan gambar firmware yang sesuai dengan protokol CFU sehingga dapat menerima pembaruan dari driver CFU.

  • Perangkat Anda harus mengekspos dirinya sebagai perangkat HID ke sistem operasi (menjalankan driver kotak masuk CFU) dan mengekspos HID Top-Level Collection (TLC). Driver kotak masuk CFU dimuat pada TLC dan mengirim pembaruan firmware ke perangkat.

Ini memungkinkan Anda untuk melayani perangkat di pasar Anda melalui Windows Update. Untuk memperbarui firmware untuk komponen, Anda menyebarkan gambar pembaruan firmware melalui Windows Update. Ketika driver kotak masuk CFU mendeteksi keberadaan komponen, driver tersebut melakukan tindakan yang diperlukan pada host dan mengirimkan gambar firmware ke komponen utama pada perangkat.

Pembaruan firmware CFU.

Mengonfigurasi file INF CFU kustom Anda

  1. Dalam file INF kustom Anda, masukkan ID perangkat keras perangkat Anda seperti yang ditunjukkan dalam contoh ini.

    [Standard.NTamd64]
    %CfuVirtualHidDeviceFwUpdate.DeviceDesc%=CfuVirtualHidDeviceFwUpdate, HID\VID_045E&UP:FA00_U:00F5 ; HardwareID for VirtualHidDevice MCU
    

    Pengaturan ID Perangkat Keras INF

    Agar driver kotak masuk CFU berkomunikasi dengan firmware, ID perangkat keras yang ditentukan dalam INF harus cocok dengan apa yang ditentukan dalam konfigurasi deskriptor Hid di firmware.

    Seperti yang ditunjukkan di bawah ini, nilai CfuVirtualHidDeviceFwUpdate.inf cocok dengan nilai yang ditentukan dalam deskriptor Hid driver simulasi firmware virtual.

    [Standard.NTamd64]
    %CfuVirtualHidDeviceFwUpdate.DeviceDesc%=CfuVirtualHidDeviceFwUpdate, HID\VID_045E&UP:FA00_U:00F5
    

    Untuk informasi selengkapnya, lihat kode berikut di g_CfuVirtualHid_HidReportDescriptor (Hid Report Descriptor) di DmfInterface.c.

    0x06, CFU_DEVICE_USAGE_PAGE,        // USAGE_PAGE(0xFA00)
    0x09, CFU_DEVICE_USAGE,             // USAGE(0xF5)
    
  2. Dalam file INF kustom Anda, perbarui entri berikut yang diperlihatkan di sini (termasuk bagian SourceDisksFiles dan CopyFiles ) agar sesuai dengan file dalam pembaruan firmware Anda.

    Misalnya, sampel perangkat CFU Hid virtual mendukung dua komponen (MCU dan Audio). Bagian sampel di bawah ini menentukan file penawaran dan payload untuk komponen-komponen ini.

    ; Specify the location of the firmware offer
    ; and payload file in the registry.
    ; The files are kept in driver store.
    ; When deployed, %13% would be expanded to
    ; the actual path in driver store.
    ;
    ; You can change subkey name under CFU
    ; (for example, "CfuVirtualHidDevice_MCU"),
    ; and specify your own offer
    ; (for example, "CfuVirtualHidDevice_MCU.offer.bin")
    ; and payload (for example, "CfuVirtualHidDevice_MCU.payload.bin")
    ; file name.
    ;
    HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_MCU,Offer,   0x00000000, %13%\CfuVirtualHidDevice_MCU.offer.bin
    HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_MCU,Payload, 0x00000000, %13%\CfuVirtualHidDevice_MCU.payload.bin
    HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_Audio,Offer,   0x00000000, %13%\CfuVirtualHidDevice_Audio.offer.bin
    HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_Audio,Payload, 0x00000000, %13%\CfuVirtualHidDevice_Audio.payload.bin
    
    [SourceDisksFiles]
    CfuVirtualHidDevice_MCU.offer.bin=1
    CfuVirtualHidDevice_MCU.payload.bin=1
    CfuVirtualHidDevice_Audio.offer.bin=1
    CfuVirtualHidDevice_Audio.payload.bin=1
    
    [CfuVirtualHidDeviceFwUpdate.CopyFiles]
    CfuVirtualHidDevice_MCU.offer.bin
    CfuVirtualHidDevice_MCU.payload.bin
    CfuVirtualHidDevice_Audio.offer.bin
    CfuVirtualHidDevice_Audio.payload.bin
    

    Lihat Contoh file CFU INF di bawah ini untuk file sampel CFU INF lengkap.

    Catatan

    Ketika paket diinstal, OS mengganti dengan jalur lengkap ke file sebelum membuat nilai registri %13% . Dengan demikian, driver dapat menghitung registri dan mengidentifikasi semua gambar firmware dan menawarkan file.

    Catatan

    Dalam contoh di atas, "A410A898-8132-4246-AC1A-30F1E98BB0A4", "Penawaran", "Payload" tidak boleh diubah karena driver kotak masuk CFU akan mencari nilai-nilai ini saat runtime.

  3. Dalam file INF kustom Anda, tentukan kemampuan perangkat Anda dengan pengaturan kemampuan nilai registri yang dijelaskan dalam tabel dan contoh bagian INF di bawah ini.

    Driver kotak masuk CFU menyediakan cara untuk menyesuaikan perilaku driver untuk mengoptimalkan skenario tertentu. Pengaturan tersebut dikontrol melalui pengaturan registri, dijelaskan dalam tabel nilai registri CFU di bawah ini.

    Misalnya, driver kotak masuk CFU memerlukan informasi tentang detail penggunaan kemampuan nilai sesuai implementasi firmware. Lihat bagian pengaturan kemampuan nilai INF di bawah ini untuk informasi selengkapnya dan contoh tentang cara melakukannya.

    Anda dapat mengonfigurasi masing-masing nilai registri ini sesuai kebutuhan implementasi firmware Anda.

    Nilai registri CFU

    Nilai Registri Deskripsi
    Penjajaran Atribut Protokol: Apa perataan rekaman bin yang diperlukan untuk konfigurasi ini?

    Selama fase pengiriman payload protokol, driver mengisi banyak buffer Hid dengan payload dan mengirim ke firmware satu per satu.

    Opsi ini mengontrol persyaratan penyelarasan saat mengemas payload.

    Secara default, perataan 8 byte digunakan. Jika tidak ada perataan yang diperlukan, konfigurasikan ini sebagai 1.

    UseHidSetOutputReport 0 - Driver akan menggunakan permintaan Tulis saat mengirim laporan output apa pun.

    1 - Driver akan menggunakan IOCTL_HID_SET_OUTPUT_REPORT untuk mengirim laporan output apa pun.

    Defaultnya adalah 0. Atur ini ke 1 jika transportasi yang mendasar Anda bukan USB (misalnya, HID Over BTH).

    OfferInputValueCapabilityUsageRangeMinimum Minimum Penggunaan Kemampuan Nilai untuk Penanganan Laporan Input Penawaran.
    OfferOutputValueCapabilityUsageRangeMinimum Penggunaan Kemampuan Nilai Minimum untuk Penanganan Laporan Output Penawaran.
    PayloadInputValueCapabilityUsageRangeMinimum Minimum Penggunaan Kemampuan Nilai untuk Penanganan Laporan Input Payload.
    PayloadOutputValueCapabilityUsageRangeMinimum Minimum Penggunaan Kemampuan Nilai untuk Penanganan Laporan Output Payload.
    VersionsFeatureValueCapabilityUsageRangeMinimum Penggunaan Kemampuan Nilai Minimum untuk Penanganan Laporan Fitur Versi.

    Pengaturan kapabilitas nilai INF

    Agar driver kotak masuk CFU berkomunikasi dengan firmware, penggunaan kemampuan nilai yang ditentukan dalam INF harus cocok dengan yang ada dalam konfigurasi deskriptor Hid di firmware.

    Dalam contoh ini, nilai INF cocok dengan nilai yang ditentukan dalam deskriptor Hid driver simulasi firmware virtual.

    [CfuVirtualHidDeviceFwUpdate_HWAddReg]
    ...
    ...
    HKR,,OfferInputValueCapabilityUsageRangeMinimum,0x00010001,0x1A
    HKR,,OfferOutputValueCapabilityUsageRangeMinimum,0x00010001, 0x1E
    HKR,,PayloadInputValueCapabilityUsageRangeMinimum,0x00010001,0x26
    HKR,,PayloadOutputValueCapabilityUsageRangeMinimum,0x00010001,0x31
    HKR,,VersionsFeatureValueCapabilityUsageRangeMinimum,0x00010001, 0x42
    

    Untuk informasi selengkapnya, lihat kode berikut di g_CfuVirtualHid_HidReportDescriptor (Hid Report Descriptor) di DmfInterface.c.

    0x85, REPORT_ID_PAYLOAD_INPUT,      // REPORT_ID(34)
    0x75, INPUT_REPORT_LENGTH,          // REPORT SIZE(32)
    0x95, 0x04,                         // REPORT COUNT(4)
    0x19, PAYLOAD_INPUT_USAGE_MIN,      // USAGE MIN (0x26)
    0x29, PAYLOAD_INPUT_USAGE_MAX,      // USAGE MAX (0x29)
    0x81, 0x02,                         // INPUT(0x02)
    
    0x85, REPORT_ID_OFFER_INPUT,        // REPORT_ID(37)
    0x75, INPUT_REPORT_LENGTH,          // REPORT SIZE(32)
    0x95, 0x04,                         // REPORT COUNT(4)
    0x19, OFFER_INPUT_USAGE_MIN,        // USAGE MIN (0x1A)
    0x29, OFFER_INPUT_USAGE_MAX,        // USAGE MAX (0x1D)
    0x81, 0x02,                         // INPUT(0x02)
    
    0x85, REPORT_ID_PAYLOAD_OUTPUT,     // REPORT_ID(32)
    0x75, 0x08,                         // REPORT SIZE(8)
    0x95, OUTPUT_REPORT_LENGTH,         // REPORT COUNT(60)
    0x09, PAYLOAD_OUTPUT_USAGE,         // USAGE(0x31)
    0x92, 0x02, 0x01,                   // OUTPUT(0x02)
    
    0x85, REPORT_ID_OFFER_OUTPUT,       // REPORT_ID(37)
    0x75, INPUT_REPORT_LENGTH,          // REPORT SIZE(32)
    0x95, 0x04,                         // REPORT COUNT(4)
    0x19, OFFER_OUTPUT_USAGE_MIN,       // USAGE MIN (0x1E)
    0x29, OFFER_OUTPUT_USAGE_MAX,       // USAGE MAX (0x21)
    0x91, 0x02,                         // OUTPUT(0x02)
    
    0x85, REPORT_ID_VERSIONS_FEATURE,   // REPORT_ID(32)
    0x75, 0x08,                         // REPORT SIZE(8)
    0x95, FEATURE_REPORT_LENGTH,        // REPORT COUNT(60)
    0x09, VERSIONS_FEATURE_USAGE,       // USAGE(0x42)
    0xB2, 0x02, 0x01,                   // FEATURE(0x02)
    

Menyebarkan paket firmware melalui Windows Update

Selanjutnya, sebarkan paket melalui Windows Update.

Untuk informasi tentang penyebaran, lihat Windows 10 Driver Publishing Workflow (unduhan DOCX).

Format file gambar pembaruan firmware

Gambar pembaruan firmware memiliki dua bagian: file penawaran dan file payload. Penawaran berisi informasi yang diperlukan tentang payload untuk memungkinkan komponen utama di perangkat yang menerima pembaruan untuk memutuskan apakah payload dapat diterima. Payload adalah berbagai alamat dan byte yang dapat dikonsumsi komponen utama.

Format penawaran

File penawaran adalah data biner 16-byte yang strukturnya harus cocok dengan format yang ditentukan dalam bagian 5.5.1 dari spesifikasi protokol CFU.

Format payload

File payload adalah file biner yang kumpulan rekamannya disimpan secara berdekatan. Setiap rekaman memiliki format berikut.

Offset Ukuran Nilai Deskripsi
Byte 0 DWORD Alamat Firmware Alamat Little Endian (LSB First) untuk menulis data. Alamatnya berbasis 0. Firmware dapat menggunakan ini sebagai offset untuk menentukan alamat sesuai kebutuhan saat menempatkan gambar dalam memori.
Byte 4 Byte Panjang Panjang data payload.
Byte 5-N Byte Data Byte array data payload.

Status pembaruan firmware

Selama transaksi protokol, driver kotak masuk CFU menulis entri registri untuk menunjukkan status. Tabel ini menjelaskan nama, format nilai, dan arti nilai yang disentuh driver selama berbagai tahap protokol.

  • _ID_ dalam tabel mewakili ID Komponen, yang diambil dari file penawaran. Seperti yang dijelaskan dalam spesifikasi, ID Komponen secara unik mengidentifikasi setiap komponen.

  • Untuk informasi tentang Nilai DWORD, lihat spesifikasinya.

Tahap Lokasi Nama Nilai Reg Nilai (DWORD)
Mulai; Pra Penawaran. {Device Hardware key}\ComponentFirmwareUpdate "IDKomponen CurrentFwVersion" Versi dari perangkat
{Device Hardware key}\ComponentFirmwareUpdate "Id KomponenFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_NOT_STARTED
Menawarkan; Akan mengirim penawaran. {Device Hardware key}\ComponentFirmwareUpdate "IdKomponen OfferFwVersion" Versi yang dikirim (atau akan dikirim) ke perangkat.
Respons Penawaran (Ditolak) {Device Hardware key}\ComponentFirmwareUpdate "IdKomponen FirmwareUpdateStatusRejectReason" Alasan penolakan yang dikembalikan oleh perangkat.
Respons Penawaran (Perangkat Sibuk) {Device Hardware key}\ComponentFirmwareUpdate "Id KomponenFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_BUSY_PROCESSING_UPDATE
Respons Penawaran (Diterima); Akan mengirim Payload. {Device Hardware key}\ComponentFirmwareUpdate "Id KomponenFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_DOWNLOADING_UPDATE
Payload Diterima. {Device Hardware key}\ComponentFirmwareUpdate "Id KomponenFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_PENDING_RESET
Kesalahan pada tahap apa pun. {Device Hardware key}\ComponentFirmwareUpdate "Id KomponenFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_ERROR

Contoh file CFU INF

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;  Copyright (c) Microsoft Corporation.  All rights reserved.
;
;      THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
;      KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
;      IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
;      PURPOSE.
;
; File:
;
:      CfuVirtualHidDeviceFwUpdate.inx
;
; Description:
;
;      Sample INF file for Cfu virtual Hid device firmware update.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[Version]
Signature="$Windows NT$"
Class=Firmware
ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
Provider=%ManufacturerName%
CatalogFile=CfuVirtualHidDeviceFwUpdate.cat
DriverVer = 12/16/2019,11.42.16.703
PnPLockDown=1

[SourceDisksNames]
1= %DiskName%

[DestinationDirs]
CfuVirtualHidDeviceFwUpdate.CopyFiles=13

[Manufacturer]
%ManufacturerName%=Standard,NTamd64

[Standard.NTamd64]
%CfuVirtualHidDeviceFwUpdate.DeviceDesc%=CfuVirtualHidDeviceFwUpdate, HID\VID_045E&UP:FA00_U:00F5 ; HardwareID for VirtualHidDevice MCU

[CfuVirtualHidDeviceFwUpdate.NT]
Include            = HidCfu.inf
Needs              = HidCfu.NT
CopyFiles          = CfuVirtualHidDeviceFwUpdate.CopyFiles

[CfuVirtualHidDeviceFwUpdate.NT.Wdf]
Include            = HidCfu.inf
Needs              = HidCfu.NT.Wdf

[CfuVirtualHidDeviceFwUpdate.NT.HW]
AddReg = CfuVirtualHidDeviceFwUpdate_HWAddReg

[CfuVirtualHidDeviceFwUpdate_HWAddReg]
HKR,,FriendlyName,,%FwUpdateFriendlyName%
HKR,,Alignment,0x00010001, 1                       ; (No Alignment)
HKR,,OfferInputValueCapabilityUsageRangeMinimum,0x00010001,0x1A
HKR,,OfferOutputValueCapabilityUsageRangeMinimum,0x00010001, 0x1E
HKR,,PayloadInputValueCapabilityUsageRangeMinimum,0x00010001,0x26
HKR,,PayloadOutputValueCapabilityUsageRangeMinimum,0x00010001,0x31
HKR,,VersionsFeatureValueCapabilityUsageRangeMinimum,0x00010001, 0x42

; Specify the location of the firmware offer and payload file in the registry.
; The files are kept in the driver store.
; When deployed, %13% would be expanded to the actual path
; in driver store.
;
; You can change subkey name under CFU (e.g. "CfuVirtualHidDevice_MCU"), and specify your own offer
; (e.g. "CfuVirtualHidDevice_MCU.offer.bin") and payload (e.g "CfuVirtualHidDevice_MCU.payload.bin") file name.
;
HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_MCU,Offer,   0x00000000, %13%\CfuVirtualHidDevice_MCU.offer.bin
HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_MCU,Payload, 0x00000000, %13%\CfuVirtualHidDevice_MCU.payload.bin
HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_Audio,Offer,   0x00000000, %13%\CfuVirtualHidDevice_Audio.offer.bin
HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_Audio,Payload, 0x00000000, %13%\CfuVirtualHidDevice_Audio.payload.bin

[SourceDisksFiles]
CfuVirtualHidDevice_MCU.offer.bin=1
CfuVirtualHidDevice_MCU.payload.bin=1
CfuVirtualHidDevice_Audio.offer.bin=1
CfuVirtualHidDevice_Audio.payload.bin=1

[CfuVirtualHidDeviceFwUpdate.CopyFiles]
CfuVirtualHidDevice_MCU.offer.bin
CfuVirtualHidDevice_MCU.payload.bin
CfuVirtualHidDevice_Audio.offer.bin
CfuVirtualHidDevice_Audio.payload.bin

[CfuVirtualHidDeviceFwUpdate.NT.Services]
Include            = HidCfu.inf
Needs              = HidCfu.NT.Services

; =================== Generic ==================================

[Strings]
ManufacturerName="Surface"
CfuVirtualHidDeviceFwUpdate.DeviceDesc = "CfuVirtualHidDevice Firmware Update"
DiskName = "CfuVirtualHidDevice Firmware Update Installation Disk"
FwUpdateFriendlyName= "CfuVirtualHidDevice Firmware Update"

Pemecahan Masalah

  1. Periksa log pra-prosesor pelacakan perangkat lunak (WPP) Windows untuk melihat interaksi sisi driver per komponen.

  2. Periksa log peristiwa untuk setiap kesalahan penting.

  3. Periksa entri registri pembukuan yang dijelaskan dalam status pembaruan firmware yang disediakan oleh driver.

FAQ

Saya memiliki komponen A yang memerlukan pembaruan, bagaimana cara membuat driver CFU mengetahui komponen A?

Anda perlu mengonfigurasi INF driver kotak masuk CFU dengan menggunakan ID perangkat keras TLC yang dibuat oleh komponen A.

Saya memiliki dua komponen: komponen A, dan sub-komponen B. Bagaimana cara membuat driver CFU mengetahui komponen B?

Anda tidak perlu. Driver tidak perlu tahu tentang hierarki komponen. Ini berinteraksi dengan komponen utama.

Bagaimana cara membuat driver mengetahui file firmware saya (penawaran, payload) yang perlu saya kirim ke komponen A saya?

Informasi file firmware diatur dalam INF sebagai nilai registri.

Saya memiliki banyak file firmware, beberapa penawaran, payload, untuk komponen utama A dan subkomponennya. Bagaimana cara membuat driver mengetahui file firmware mana yang dimaksudkan untuk komponen mana?

Informasi file firmware diatur dalam INF sebagai nilai registri.

Saya menggunakan driver untuk pembaruan firmware. Bagaimana cara mengetahui bahwa pembaruan telah berhasil?

Status pembaruan firmware diperbarui oleh driver di registri sebagai bagian dari pembukuan.

Sumber Daya Tambahan:

Pelajari tentang mengembangkan driver Windows dengan menggunakan Windows Driver Foundation (WDF):