SFU-stuurprogramma (Storage Firmware Update)

Het bijwerken van firmware voor NVMe-opslagstations is afhankelijk van hardwareleveranciers om firmware-updatetoepassingen te maken die gebruikmaken van specifieke IOCT's voor firmware-updates die zijn geïntroduceerd in Windows 10. Deze toepassingen worden doorgaans buiten de WU-pijplijn (Windows Update) gedistribueerd. Eindgebruikers moeten bepalen welke opslagschijven zich op hun apparaat bevinden, het juiste hulpprogramma voor de firmware van het opslagstation verkrijgen op de website van een fabrikant en de updates handmatig downloaden en installeren.

Bovendien bevinden apparaten met Windows 10 in de S-modus zich in een verbeterde beveiligingsconfiguratie waarmee gebruikers alleen door Microsoft geverifieerde toepassingen kunnen uitvoeren, waardoor leveranciershulpprogramma's mogelijk geen firmware van stations kunnen bijwerken. Dit handmatige proces resulteert in een lage acceptatie van firmware-updates, verhoogt de ondersteuningskosten en problemen met klanttevredenheid voor hardwarefabrikanten.

Windows 10 in de S-modus werkt uitsluitend met apps uit de Microsoft Store binnen Windows en accessoires die compatibel zijn met Windows 10 in de S-modus. Er is een optie beschikbaar om de S-modus definitief uit te schakelen. Zie voor meer informatie windows.com/SmodeFAQ en overschakelen van de S-modus in Windows.

Het bijwerken van apparaatfirmware met de Windows Update-service (WU) met behulp van een oplossing op basis van stuurprogramma's is beschikbaar voor hardwareleveranciers en vereist dat ze firmware-updatelogica en payload toevoegen aan een bestaand functiestuurprogramma of een afzonderlijk stuurprogramma en pakket voor firmware-updates bieden. Dit scenario resulteert in duplicatieve werkzaamheden tussen hardwarepartners en verhoogt de totale onderhoudskosten van opslagstations. Zie Een Universeel INF-bestand gebruiken voor meer informatie over Universele stuurprogramma's.

Met behulp van windows 10, versie 2004 (os build 19041.488 of hoger) is het mogelijk om NVMe-stationsfirmware bij te werken met behulp van een door Microsoft geleverd stuurprogramma en een hardwareleverancier geleverd firmware-updatepakket. Deze oplossing kan worden gedistribueerd via Windows Update naar doelstations en apparaten met behulp van CHID's (Computer Hardware ID's).

Waarschuwing

Firmware-updates zijn een potentieel riskante onderhoudsbewerking en moeten alleen worden gedistribueerd na grondig testen van de nieuwe firmware-installatiekopie. Het is mogelijk dat nieuwe firmware op niet-ondersteunde hardware de betrouwbaarheid en stabiliteit negatief kan beïnvloeden of zelfs gegevensverlies kan veroorzaken.

Schijfcompatibiliteit

Als u Windows 10 wilt gebruiken om stationsfirmware bij te werken, moet u ondersteunde stations hebben. Windows 10 geeft optionele HLK-vereisten (Hardware Lab Kit) voor NVMe-apparaten op om te zorgen voor algemeen gedrag van apparaten. Deze vereisten beschrijven welke opdrachten een NVMe-opslagstation moeten ondersteunen om firmware updatable te zijn met behulp van de nieuwe windows Update-oplossing.

Neem contact op met de leverancier van uw oplossing voor informatie over of uw hardware ondersteuning biedt voor het bijwerken van de stationsfirmware door Windows.

Windows-apparaat COMPAT-vereisten voor NVMe: Device.Storage.ControllerDrive.NVMe - secties 5.7 en 5.8

Device.Storage.ControllerDrive.NVMe.BasicFunction

Het apparaat moet ten minste één upgradebare firmware-slot hebben.

5.7 Firmware Commit

  • Activering van een firmware-installatiekopie moet worden uitgevoerd zonder dat hiervoor een stroomcyclus van het apparaat is vereist.

  • Het activeringsproces wordt naar verwachting bereikt via een door de host geïnitieerde reset, zoals beschreven in sectie 8.1 van specificatieversie 1.2a.

  • Windows maakt gebruik van doorvoeracties 001b of 010b bij het uitgeven van een opdracht voor het doorvoeren van firmware.

  • Verwachte voltooiingswaarden voor een geslaagde activering zonder stroomcyclus zijn 00h (algemeen succes), 10u of 11u.

  • Als 0Bh wordt geretourneerd als voltooiingsstatus, informeert Windows de gebruiker om een stroomcyclus van het apparaat uit te voeren. Dit wordt ten zeerste afgeraden, omdat het bijwerken van firmware tijdens OS-runtime verhindert en een aanzienlijke onderbreking van de werkbelasting veroorzaakt.

5.8 Firmware Image Download

  • Het apparaat mag I/O niet uitvallen tijdens de downloadfase en zou I/O moeten blijven verwerken.

Zie voor meer informatie de Windows-apparaat COMPAT-vereisten voor Device.Storage.ControllerDrive.NVMe - secties 5.7 en 5.8, die zich bevinden in de onderdelen en Peripherals.pdf in het WHCP_Documents_Windows 11, versie 24H2.zip downloadbestand.

SCSI-id's voor NVMe-opslagschijfstations

Vanaf Windows 10, versie 2004 (os build 19041.488 of hoger), zijn er twee nieuwe id's beschikbaar voor NVMe-opslagschijven met stuurprogramma's die ondersteuning bieden voor de STOR_RICH_DEVICE_DESCRIPTION structuur:

SCSI\t*v(8)p(40)

Waar:

  • t* is een apparaattypecode van variabele lengte.
  • v(8) is een leverancier-id van 8 tekens.
  • p(40) is een product-id van 40 tekens

SCSI\t*v(8)p(40)r(8)

Waar:

  • t* is een apparaattypecode van variabele lengte.
  • v(8) is een leverancier-id van 8 tekens.
  • p(40) is een product-id van 40 tekens
  • r(8) is een revisieniveauwaarde van 8 tekens.

De SCSI\t*v(8)p(40)r(80 identificatie biedt een volledige productnaam (afgestemd op de NVME 1.4-specificatie) en maakt het mogelijk een softwarecomponentknooppunt (SWC) te creëren voor firmware-updates voor NVME-stations die overeenkomen met deze naam (maximaal 40 tekens en een firmware-revisie van 8 tekens).

Zie Id's voor SCSI-apparaten en STOR_RICH_DEVICE_DESCRIPTION voor meer informatie

Details van SFU-oplossing (Storage Firmware Update)

In het volgende diagram biedt Windows 10 zowel het functiestuurprogramma (stornvme.sys) als het stuurprogramma voor firmware-updates (storfwupdate.dll). Als u het door Microsoft geleverde stuurprogramma wilt gebruiken om de FIRMWARE van het NVMe-station bij te werken, zijn er twee afzonderlijke stuurprogrammaverzendingen vereist.

updategegevens voor opslagfirmware.

Pakket 1 - Identiteit maken voor stationsfirmware-update

Dit pakket bevat doorgaans de volgende items:

  • Extensie INF voor het maken van een softwareapparaatknooppunt dat fungeert als de zelfstandige hardware voor het firmware-updatepakket.

  • Stuurprogrammacatalogus

Dien uw EXTENSIE INF-pakket in als een aparte inzending van het stuurprogramma.

Veel apparaattypen staan echter niet toe dat één fysiek apparaat meer dan één apparaatknooppunt toewijst. In dit geval gebruikt u een extensie INF die de AddComponent-instructie specificeert om een apparaatknooppunt te maken waarop Windows Update is gericht en het stuurprogramma voor de firmware-update erop te installeren. In het volgende fragment uit een INF-bestand ziet u hoe u het apparaatknooppunt maakt:

[Manufacturer]
%Contoso%=Standard,NTamd64
[Standard.NTamd64]
%DeviceName%=Device_Install, SCSI\DiskNVMe____StorageIHVabcd
[StorageIHVabcd.Components]
AddComponent= StorageIHVabcd_component,,StorageIHVabcd_ComponentInstall
[StorageIHVabcd_ComponentInstall]
ComponentIDs = StorageIHVabcd-firmware-update

In dit INF-voorbeeld ComponentIDs = StorageIHVabcd-firmware-update geeft aan dat het onderliggende apparaat een hardware-id van SWC\StorageIHVabcd-firmware-update zal hebben. Wanneer deze INF is geïnstalleerd, wordt de volgende apparaathiërarchie gemaakt:

I N F-apparaathiërarchie.

Hieronder vindt u een voorbeeldextensie INF voor het maken van een nieuwe identiteit voor stationsfirmware-updates. Omdat de SCSI\DiskNVMe____StorageIHVabcd-hardware mogelijk niet uniek is voor hardwarefabrikanten, moet de extensie INF GEBRUIKMAKEN van CHID-doel voor distributie.

Pakket 2 - Firmware-updatepakket voor schijven

Dit pakket bevat doorgaans het volgende:

  • Universal driver INF van de klasse firmware

  • Binaire gegevens van firmware-update

  • Stuurprogrammacatalogus

Dien uw firmwarepakket in als afzonderlijke indiening van stuurprogramma's.

Het updatepakket voor stationsfirmware inF is gericht op het nieuwe knooppunt SWC\StorageIHVabcd-firmwareupdate en roept het stuurprogramma voor de windows 10-opslagfirmware-update aan. Om een software-gelijst onderdeel te laten functioneren, moet het bovenliggende apparaat worden gestart. Als u de StorFwUpdate-schijf wilt gebruiken, moeten ontwikkelaars de INF-instructies Include/Needs INF in de sectie DDInstall gebruiken voor elke mogelijke [DDInstall.*] sectie naar de bijbehorende [StorFwUpdate.*] secties, zoals hier wordt getoond, ongeacht of de INF instructies voor die sectie specificeert of niet:

[StorFwUpdateOem.NT]
Include            = StorFwUpdate.inf
Needs              = StorFwUpdate.NT
CopyFiles          = StorFwUpdateOem.CopyFiles

[StorFwUpdateOem.NT.Wdf]
Include            = StorFwUpdate.inf
Needs              = StorFwUpdate.NT.Wdf

[StorFwUpdateOem.NT.Services]
Include            = StorFwUpdate.inf
Needs              = StorFwUpdate.NT.Services

Voor meer informatie, zie Een Onderdeel INF-bestand gebruiken. Hieronder vindt u een voorbeeld van een INF-bestand voor de firmware-update van het NVMe-station. Omdat de software-id SWC\StorageIHVabcd-firmwareupdate mogelijk niet uniek is voor hardwarefabrikanten, moet de INF CHID-doel gebruiken voor Windows Update-distributie.

Het StorFwUpdate-onderdeel voert geen validatie uit (handtekeningverificatie of ontsleuteling) van de binaire payload van de firmware. Als dit functieniveau is vereist, kunnen hardwarepartners hun eigen stuurprogramma voor het bijwerken van opslagfirmware schrijven.

Voorbeeld van firmware-update van opslagstation

Omdat beide INF's CHID's vereisen voor Windows Update-distributie, kunnen hardwarepartners de oplossing lokaal valideren met behulp van PNPUTIL.EXE , zoals hieronder wordt weergegeven.

Behoeften

  • Windows 10, versie 2004 (os build 19041.488 of hoger)

  • Apparaat met NVMe-opslagstation met ingebouwde stornvme.sys-stuurprogramma

  • BINAIRE versie van NVMe-stationsfirmware

  • Correct geschreven INF-bestanden

Huidige versie van NVMe-schijffirmware weergeven

De huidige versie van de NVMe-schijffirmware weergeven:

  1. Open een PowerShell-venster als beheerder.

  2. Typ Get-PhysicalDisk | Get-StorageFirmwareInformation om de huidige versie van de NVMe-schijffirmware weer te geven.

    huidige N V M e-schijffirmwareversie.

Noteer de huidige waarden van ActiveSlotNumber en FirmwareVersionInSlot .

Zie Get-StorageFirmwareInformation voor meer informatie.

Installeer de extensie INF om een nieuwe softwarehardware-identiteit te maken

  1. Ga naar de map op uw systeem met het INF-bestand van het stuurprogramma-uitbreidingspakket. Typ bijvoorbeeld cd .\signed-DiskExtnPackage\.

  2. Controleer of het INF-bestand de informatie bevat voor de drives die u bijwerkt. Zie het INF-bestand met de schijfextensie in dit artikel voor een voorbeeldextensie INF.

  3. Installeer de extensie INF met het Microsoft PnP-hulpprogramma. Typ bijvoorbeeld in een opdrachtprompt pnputil /add-driver .\OEMDiskExtnPackage.inf /installvan de beheerder. Wanneer het nieuwe softwareknooppunt wordt gemaakt als een onderliggend element van een opstartkritiek apparaat, is een herstart vereist om het effect te laten hebben.

     p n p p util opdracht uitvoer.

Het nieuwe SWC-knooppunt (Software Component) weergeven

Het nieuwe SWC-knooppunt en de hardware-id weergeven:

  1. Open het Configuratiescherm in het menu Start van Windows 10 en open Apparaatbeheer.

  2. Selecteer schijfstations in Apparaatbeheer, vouw vervolgens het knooppunt uit en selecteer het schijfstation dat u hebt bijgewerkt.

  3. Nadat u het station hebt geselecteerd dat u hebt bijgewerkt, selecteert u in het ApparaatbeheerWeergave menu Apparaten op verbinding.

  4. Klik op het geselecteerde schijfknooppunt en klik vervolgens om uit te vouwen. Onder de schijfknooppunt ziet u een onderliggend kindcomponent algemeen softwareonderdeel.

  5. Klik met de rechtermuisknop op het onderdeel Algemene software en selecteer Eigenschappen.

  6. Selecteer in het dialoogvenster Eigenschappen het tabblad Details en selecteer daarna Hardware-ID's in de vervolgkeuzelijst Eigenschap om de Hardware-ID voor het algemene softwareonderdeel op het schijfknooppunt weer te geven.

  7. De SWC\* Hardware-id moet overeenkomen met de id die is opgegeven in de Extensie INF.

De firmware-update van de NVMe-schijf weergeven en installeren

  1. Open een PowerShell-venster als beheerder.

  2. Ga naar de map op uw systeem met het INF-bestand van de NVMe-schijffirmware-update. Typ bijvoorbeeld cd .\signed-ihv-firmware\.

  3. Controleer of de schijffirmware-update INF de informatie bevat voor de stations die u bijwerkt. Zie het schijffirmware-INF-bestand in dit artikel voor een voorbeeld van een INF-bestand voor een schijffirmware-update.

  4. Installeer de schijffirmware-update INF met het Microsoft PnP-hulpprogramma. Typ bijvoorbeeld in een opdrachtprompt pnputil /add-driver .\StorFwUpdateIHV.inf /installvan de beheerder.

  5. Open een PowerShell-venster als beheerder.

  6. Typ Get-PhysicalDisk | Get-StorageFirmwareInformation om de bijgewerkte firmwaregegevens van de NVMe-schijf weer te geven.

    N V M e-schijffirmware bijgewerkt.

Bekijk de bijgewerkte informatie over de NVMe-schijffirmware in de waarden ActiveSlotNumber en FirmwareVersionInSlot .

Zie Get-StorageFirmwareInformation voor meer informatie.

De extensie INF en firmwarepakketten implementeren via Windows Update

Valideer eerst de pakketimplementatie via Windows Update met behulp van de publicatie voor testdistributierichtlijnen .

Implementeer vervolgens het pakket via Windows Update met de juiste CHID's.

Zie Windows 10 Driver Publishing Workflow (DOCX download) voor meer informatie over implementatie.

INF-voorbeeld van schijfextensie

Hier volgt een voorbeeld van een INF-bestand met de extensie:

;/*++
;
;  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:
;
;      OEMDiskExtnPackage.inx
;
;  Description:
;
;      INF file for installing the OEMDiskExtnPackage. This will create a SWC\ DevNode
;      which will service as the target HWID for the Disk storage firmware package.
;
;--*/

[Version]
Signature="$Windows NT$"
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider = %ManufacturerName%
ExtensionId = {D91908BD-43FA-411B-92A1-C378AE5AF9FA}
CatalogFile = delta.cat
DriverVer = 08/26/2019,1.0.0.0
PnpLockdown = 1

[SourceDisksNames]
1 = %DiskName%

[Manufacturer]
%ManufacturerName%=Standard,NTamd64

[Standard.NTamd64]
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV1-87B, SCSI\DiskNVMe____StorageIHV1-87B
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV1-87A, SCSI\DiskNVMe____StorageIHV1-87A
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV2_KUS02020, SCSI\DiskNVMe____StorageIHV2_KUS02020
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV3_KBG40ZPZ512G, SCSI\DiskNVMe____KBG40ZPZ512G_IHV300Y9
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV3_KBG40ZPZ512G, SCSI\DiskNVMe____KBG40ZPZ512G_IHV30015

[StorageIHV1-87B.NT]
[StorageIHV1-87B.NT.Components]
AddComponent = StorageIHV1-87B_component,,StorageIHV1-87B_ComponentInstall

[StorageIHV1-87B_ComponentInstall]
ComponentIds=StorageIHV1-87B

[StorageIHV1-87A.NT]
[StorageIHV1-87A.NT.Components]
AddComponent = StorageIHV1-87A_component,,StorageIHV1-87A_ComponentInstall

[StorageIHV1-87A_ComponentInstall]
ComponentIds=StorageIHV1-87A

[StorageIHV2_KUS02020.NT]
[StorageIHV2_KUS02020.NT.Components]
AddComponent = StorageIHV2_KUS02020_component,,StorageIHV2_KUS02020_ComponentInstall

[StorageIHV2_KUS02020_ComponentInstall]
ComponentIds=StorageIHV2_KUS02020

[StorageIHV3_KBG40ZPZ512G.NT]
[StorageIHV3_KBG40ZPZ512G.NT.Components]
AddComponent = StorageIHV3_KBG40ZPZ512G_component,,StorageIHV3_KBG40ZPZ512G_ComponentInstall

[StorageIHV3_KBG40ZPZ512G_ComponentInstall]
ComponentIds=StorageIHV3_KBG40ZPZ512G

;*****************************************
; Strings section
;*****************************************

[Strings]
ManufacturerName = "OEM"
DiskName = "OEM Disk Extn package Installation Disk"
OEMDiskExtnPackage.DeviceDesc = "Disk Extn Package"
OEMDiskExtnPackage.SVCDESC = "Disk Extn Package"

;Non-Localizable
REG_EXPAND_SZ          = 0x00020000
REG_DWORD              = 0x00010001
REG_MULTI_SZ           = 0x00010000
REG_BINARY             = 0x00000001
REG_SZ                 = 0x00000000

SERVICE_KERNEL_DRIVER  = 0x1
SERVICE_ERROR_IGNORE   = 0x0
SERVICE_ERROR_NORMAL   = 0x1
SERVICE_ERROR_SEVERE   = 0x2
SERVICE_ERROR_CRITICAL = 0x3

INF-voorbeeld van schijffirmware

Hier volgt een voorbeeld van een INF-bestand met schijffirmware:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;  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:
;
;      StorageIHV3-Firmware-Update.inx
;
;   Description:
;
;      Driver installation file for firmware update.
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

[SourceDisksNames]
1= %DiskName%

[DestinationDirs]
StorFwUpdateOem.CopyFiles=13

[Manufacturer]
%ManufacturerName%=Standard,NTamd64

[Standard.NTamd64]
%StorFwUpdateOem.DeviceDesc%=StorFwUpdateOem, SWC\StorageIHV3_KBG40ZPZ512G

[StorFwUpdateOem.NT]
Include            = StorFwUpdate.inf
Needs              = StorFwUpdate.NT
CopyFiles          = StorFwUpdateOem.CopyFiles

[StorFwUpdateOem.NT.Wdf]
Include            = StorFwUpdate.inf
Needs              = StorFwUpdate.NT.Wdf

[StorFwUpdateOem.NT.HW]
AddReg = StorFwUpdateOem_HWAddReg

[StorFwUpdateOem_HWAddReg]
HKR,,FriendlyName,,%FwUpdateFriendlyName%

; 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.
;
HKR,0D9EB3D6-6F14-4E8A-811B-F3B19F7ED98A\0,FirmwareImageVersion, 0x00000000, "AEMS0102"
HKR,0D9EB3D6-6F14-4E8A-811B-F3B19F7ED98A\0,FirmwareFileName, 0x00000000, %13%\AEMS0102.sig

[SourceDisksFiles]
AEMS0102.sig=1

[StorFwUpdateOem.CopyFiles]
AEMS0102.sig

[StorFwUpdateOem.NT.Services]
Include            = StorFwUpdate.inf
Needs              = StorFwUpdate.NT.Services

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

[Strings]
ManufacturerName="{Your Manufacturer Name}"
StorFwUpdateOem.DeviceDesc = "Storage Firmware Update (StorageIHV3) 1"
DiskName = "Storage Firmware Update Installation Disk"
FwUpdateFriendlyName= "StorageIHV3 Firmware Update"

Aanvullende bronnen

Identificaties voor SCSI-apparaten

Beschrijving van het apparaat STOR_RICH