Configuration du fichier INF de mise à jour du microprogramme de composant (CFU)
Pour configurer un fichier INF personnalisé pour CFU, suivez les instructions de cette rubrique afin de fournir les valeurs et paramètres appropriés pour vos fichiers image de microprogramme et votre périphérique matériel.
Notes
CFU est disponible dans Windows 10, version 2004 (Windows 10 mise à jour de mai 2020) et versions ultérieures.
L’exemple de fichier INF CFU inclus ci-dessous fournit un point de départ pour le fichier INF personnalisé de votre appareil. L’exemple INF configure le pilote de boîte de réception CFU (hidcfu.dll) pour activer le scénario de mise à jour du microprogramme pour un appareil Hid CFU virtuel. Pour plus d’informations sur l’exemple de code d’appareil virtuel et la procédure pas à pas qui simule la mise à jour du microprogramme sur un appareil HID virtuel, consultez la rubrique simulation de mise à jour du microprogramme d’appareil HID virtuel. Les sections ci-dessous font référence à l’exemple de fichier INF inclus pour illustrer les concepts de configuration abordés dans cette rubrique.
Votre fichier INF réel doit être personnalisé et configuré spécifiquement pour le microprogramme et le matériel de votre appareil.
Avant de commencer
Les ressources suivantes vous aideront à en savoir plus sur le protocole CFU (Component Firmware Update).
Présentation de la mise à jour du microprogramme du composant
Vidéo WinHEC 2018 sur la mise à jour du microprogramme du composant
La spécification du protocole CFU (Component Firmware Update) décrit un protocole HID générique pour mettre à jour le microprogramme des composants présents sur un PC ou des accessoires. La spécification permet à un composant d’accepter le microprogramme sans interrompre le fonctionnement de l’appareil pendant un téléchargement.
L’exemple de mise à jour du microprogramme CFU contient un exemple de code source de microprogramme pour l’implémentation du protocole CFU.
L’outil autonome CFU peut être utilisé pour tester la mise à jour de votre microprogramme sur votre appareil pendant le développement et avant de le charger sur Windows Update.
Vue d’ensemble
Pour mettre à jour l’image de microprogramme de votre appareil à l’aide du modèle CFU, vous devez vous attendre à répondre aux exigences suivantes :
Fournissez un fichier INF personnalisé pour votre appareil. Ce fichier fournit des informations au pilote de boîte de réception CFU qui envoie la mise à jour du microprogramme à l’appareil. Nous vous recommandons de personnaliser l’exemple de fichier INF CFU fourni ci-dessous dans cette rubrique pour prendre en charge vos scénarios de mise à jour de microprogramme.
Votre appareil doit être fourni avec une image de microprogramme conforme au protocole CFU afin qu’il puisse accepter une mise à jour à partir du pilote CFU.
Votre appareil doit s’exposer en tant que périphérique HID au système d’exploitation (exécutant le pilote de boîte de réception CFU) et exposer une collection de Top-Level HID (TLC). Le pilote de boîte de réception CFU se charge sur le TLC et envoie la mise à jour du microprogramme à l’appareil.
Cela vous permet de traiter vos appareils sur le marché via Windows Update. Pour mettre à jour le microprogramme d’un composant, vous déployez l’image de mise à jour du microprogramme via Windows Update. Lorsque le pilote de boîte de réception CFU détecte la présence d’un composant, il effectue les actions nécessaires sur l’hôte et transmet l’image du microprogramme au composant principal sur l’appareil.
Configurer votre fichier INF CFU personnalisé
Dans votre fichier INF personnalisé, insérez les ID matériels de vos appareils comme indiqué dans cet exemple.
[Standard.NTamd64] %CfuVirtualHidDeviceFwUpdate.DeviceDesc%=CfuVirtualHidDeviceFwUpdate, HID\VID_045E&UP:FA00_U:00F5 ; HardwareID for VirtualHidDevice MCU
Paramètres d’ID matériel INF
Pour que le pilote de boîte de réception CFU communique avec le microprogramme, l’ID matériel spécifié dans l’INF doit correspondre à ce qui est spécifié dans la configuration du descripteur Hid dans le microprogramme.
Comme indiqué ci-dessous, les valeurs CfuVirtualHidDeviceFwUpdate.inf correspondent aux valeurs spécifiées dans le descripteur Hid du pilote de simulation de microprogramme virtuel.
[Standard.NTamd64] %CfuVirtualHidDeviceFwUpdate.DeviceDesc%=CfuVirtualHidDeviceFwUpdate, HID\VID_045E&UP:FA00_U:00F5
Pour plus d’informations, reportez-vous au code suivant dans g_CfuVirtualHid_HidReportDescriptor (Hid Report Descriptor) dans DmfInterface.c.
0x06, CFU_DEVICE_USAGE_PAGE, // USAGE_PAGE(0xFA00) 0x09, CFU_DEVICE_USAGE, // USAGE(0xF5)
Dans votre fichier INF personnalisé, mettez à jour les entrées suivantes affichées ici (y compris les sections SourceDisksFiles et CopyFiles) pour qu’elles correspondent aux fichiers de votre mise à jour du microprogramme.
Par exemple, l’exemple d’appareil Hid CFU virtuel prend en charge deux composants (MCU et Audio). L’exemple de section ci-dessous spécifie les fichiers d’offre et de charge utile pour ces composants.
; 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
Consultez l’exemple de fichier INF CFU ci-dessous pour obtenir l’exemple de fichier INF CFU complet.
Notes
Lorsque les packages sont installés, le système d’exploitation remplace le
%13%
par le chemin d’accès complet aux fichiers avant de créer les valeurs de Registre. Ainsi, le pilote peut énumérer le registre et identifier tous les fichiers d’image et d’offre du microprogramme.Notes
Dans l’exemple ci-dessus, « A410A898-8132-4246-AC1A-30F1E98BB0A4 », « Offre », « Charge utile » ne doit pas être modifié, car le pilote de boîte de réception CFU recherche ces valeurs au moment de l’exécution.
Dans votre fichier INF personnalisé, spécifiez les fonctionnalités de votre appareil avec les paramètres de fonctionnalité de valeur de Registre décrits dans le tableau et l’exemple de section INF ci-dessous.
Le pilote de boîte de réception CFU permet de personnaliser le comportement du pilote afin d’optimiser certains scénarios. Ces paramètres sont contrôlés par le biais des paramètres du Registre, décrits dans le tableau des valeurs de Registre CFU ci-dessous.
Par exemple, le pilote de boîte de réception CFU nécessite des informations sur les détails d’utilisation de la fonctionnalité de valeur conformément à l’implémentation du microprogramme. Pour plus d’informations et un exemple sur la procédure à suivre, consultez la section Paramètres de capacité de valeur INF ci-dessous.
Vous pouvez configurer chacune de ces valeurs de Registre en fonction de vos besoins d’implémentation de microprogramme.
Valeurs du Registre CFU
Valeur de Registre Description Alignment Attribut de protocole : quel est l’alignement des enregistrements bin requis pour cette configuration ? Pendant la phase d’envoi de charge utile du protocole, le pilote remplit de nombreuses mémoires tampons Hid avec la charge utile et les envoie au microprogramme une par une.
Cette option contrôle l’exigence d’alignement lors de l’empaquetage de la charge utile.
Par défaut, l’alignement de 8 octets est utilisé. Si aucun alignement n’est requis, configurez-le sur 1.
UseHidSetOutputReport 0 - Le pilote utilisera la demande d’écriture lors de l’envoi d’un rapport de sortie. 1 - Le pilote utilisera IOCTL_HID_SET_OUTPUT_REPORT pour envoyer n’importe quel rapport de sortie.
La valeur par défaut est 0. Définissez cette valeur sur 1 si votre transport sous-jacent n’est pas USB (par exemple, HID Over BTH).
OfferInputValueCapabilityUsageRangeMinimum Valeur minimale de l’utilisation de la fonctionnalité pour la gestion des rapports d’entrée d’offre. OfferOutputValueCapabilityUsageRangeMinimum Valeur minimale de l’utilisation de la fonctionnalité pour la gestion des rapports de sortie d’offre. PayloadInputValueCapabilityUsageRangeMinimum Valeur d’utilisation minimale de la fonctionnalité pour la gestion des rapports d’entrée de charge utile. PayloadOutputValueCapabilityUsageRangeMinimum Valeur d’utilisation minimale de la fonctionnalité pour la gestion des rapports de sortie de charge utile. VersionsFeatureValueCapabilityUsageRangeMinimum Valeur d’utilisation minimale de la fonctionnalité pour la gestion des rapports de fonctionnalités de version. Paramètres de la fonctionnalité de valeur INF
Pour que le pilote de boîte de réception CFU communique avec le microprogramme, les utilisations de la fonctionnalité de valeur spécifiées dans l’INF doivent correspondre à celles de la configuration du descripteur Hid dans le microprogramme.
Dans cet exemple, les valeurs INF correspondent aux valeurs spécifiées dans le descripteur Hid du pilote de simulation de microprogramme virtuel.
[CfuVirtualHidDeviceFwUpdate_HWAddReg] ... ... HKR,,OfferInputValueCapabilityUsageRangeMinimum,0x00010001,0x1A HKR,,OfferOutputValueCapabilityUsageRangeMinimum,0x00010001, 0x1E HKR,,PayloadInputValueCapabilityUsageRangeMinimum,0x00010001,0x26 HKR,,PayloadOutputValueCapabilityUsageRangeMinimum,0x00010001,0x31 HKR,,VersionsFeatureValueCapabilityUsageRangeMinimum,0x00010001, 0x42
Pour plus d’informations, reportez-vous au code suivant dans g_CfuVirtualHid_HidReportDescriptor (Hid Report Descriptor) dans 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)
Déployer le package de microprogramme via Windows Update
Ensuite, déployez le package via Windows Update.
Pour plus d’informations sur le déploiement, consultez workflow de publication de pilote Windows 10 (téléchargement DOCX).
Format du fichier image de mise à jour du microprogramme
L’image de mise à jour du microprogramme comprend deux parties : un fichier d’offre et un fichier de charge utile. L’offre contient les informations nécessaires sur la charge utile pour permettre au composant principal de l’appareil qui reçoit la mise à jour de décider si la charge utile est acceptable. La charge utile est une plage d’adresses et d’octets que le composant principal peut consommer.
Format de l’offre
Le fichier d’offre est une donnée binaire de 16 octets dont la structure doit correspondre au format spécifié dans la section 5.5.1 de la spécification du protocole CFU.
Format de charge utile
Le fichier de charge utile est un fichier binaire qui est une collection d’enregistrements stockés contiguëment. Chaque enregistrement est au format suivant.
Offset | Taille | Valeur | Description |
---|---|---|---|
Octet 0 | DWORD | Adresse du microprogramme | Adresse Little Endian (LSB First) pour écrire les données. L’adresse est basée sur 0. Le microprogramme peut l’utiliser comme décalage pour déterminer l’adresse en fonction des besoins lors de la mise en mémoire de l’image. |
Octet 4 | Byte | Longueur | Longueur des données de charge utile. |
Octet 5-N | Octets | Données | Tableau d’octets de données de charge utile. |
État de la mise à jour du microprogramme
Pendant la transaction de protocole, le pilote de boîte de réception CFU écrit des entrées de Registre pour indiquer le status. Ce tableau décrit le nom, le format des valeurs et la signification des valeurs que le pilote touche au cours des différentes étapes du protocole.
_ID_ dans la table représente l’ID de composant, qui est récupéré à partir du fichier d’offre. Comme décrit dans la spécification, l’ID de composant identifie chaque composant de manière unique.
Pour plus d’informations sur la valeur DWORD, reportez-vous à la spécification.
Étape | Emplacement | Reg Value Name | Valeur (DWORD) |
---|---|---|---|
Commencer; Pré-offre. | {Clé matérielle de l’appareil}\ComponentFirmwareUpdate | «ID decomposant CurrentFwVersion » | Version à partir de l’appareil |
{Clé matérielle de l’appareil}\ComponentFirmwareUpdate | « FirmwareUpdateStatusde l’IDde composant » | FIRMWARE_UPDATE_STATUS_NOT_STARTED | |
Offerte; Sur le point d’envoyer une offre. | {Clé matérielle de l’appareil}\ComponentFirmwareUpdate | « Iddecomposant OfferFwVersion » | Version envoyée (ou sur le point d’être envoyée) à l’appareil. |
Réponse de l’offre (rejetée) | {Clé matérielle de l’appareil}\ComponentFirmwareUpdate | « Firmware FirmwareUpdateStatusRejectReason del’IDde composant » | Raison du rejet retourné par l’appareil. |
Réponse de l’offre (appareil occupé) | {Clé matérielle de l’appareil}\ComponentFirmwareUpdate | « FirmwareUpdateStatusde l’IDde composant » | FIRMWARE_UPDATE_STATUS_BUSY_PROCESSING_UPDATE |
Réponse à l’offre (acceptée) ; Sur le point d’envoyer la charge utile. | {Clé matérielle de l’appareil}\ComponentFirmwareUpdate | « FirmwareUpdateStatusde l’IDde composant » | FIRMWARE_UPDATE_STATUS_DOWNLOADING_UPDATE |
Charge utile acceptée. | {Clé matérielle de l’appareil}\ComponentFirmwareUpdate | « FirmwareUpdateStatusde l’IDde composant » | FIRMWARE_UPDATE_STATUS_PENDING_RESET |
Erreur à tout moment. | {Clé matérielle de l’appareil}\ComponentFirmwareUpdate | « FirmwareUpdateStatusde l’IDde composant » | FIRMWARE_UPDATE_STATUS_ERROR |
Exemple de fichier INF CFU
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; 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"
Dépannage
Consultez les journaux du préprocesseur de trace logicielle (WPP) Windows pour voir l’interaction côté pilote par composant.
Recherchez les erreurs critiques dans les journaux des événements.
Vérifiez les entrées de registre de comptabilité décrites dans la mise à jour du microprogramme status fournies par le pilote.
Forum aux questions
J’ai un composant A qui a besoin d’une mise à jour. Comment puis-je faire en sorte que le pilote CFU prenne en compte le composant A ?
Vous devez configurer l’INF du pilote de boîte de réception CFU à l’aide de l’ID matériel du TLC créé par le composant A.
J’ai deux composants : le composant A et un sous-composant B. Comment faire pour que le pilote CFU prenne en compte le composant B ?
Vous n’en avez pas besoin. Le pilote n’a pas besoin de connaître la hiérarchie des composants. Il interagit avec le composant principal.
Comment puis-je informer le pilote de mes fichiers de microprogramme (offre, charge utile) que je dois envoyer à mon composant A ?
Les informations du fichier de microprogramme sont définies dans l’INF en tant que valeurs de Registre.
J’ai de nombreux fichiers de microprogramme, plusieurs offres, une charge utile, pour main composant A et ses sous-composants. Comment faire pour que le pilote sache quel fichier de microprogramme est destiné à quel composant ?
Les informations du fichier de microprogramme sont définies dans l’INF en tant que valeurs de Registre.
J’utilise le pilote pour les mises à jour du microprogramme. Comment faire savez qu’une mise à jour a réussi ?
La mise à jour du microprogramme status est mise à jour par le pilote dans le Registre dans le cadre de la comptabilité.
Ressources supplémentaires
En savoir plus sur le développement de pilotes Windows à l’aide de Windows Driver Foundation (WDF) :
Développement de pilotes avec Windows Driver Foundation, écrit par Penny Orwick et Guy Smith