SFU(스토리지 펌웨어 업데이트) 드라이버

NVMe 스토리지 드라이브용 펌웨어 업데이트는 Windows 10에 도입된 특정 펌웨어 업데이트 IOCTL 을 활용하는 펌웨어 업데이트 애플리케이션을 만들기 위해 하드웨어 공급업체에 의존해 왔다. 이러한 애플리케이션은 일반적으로 WU(Windows 업데이트) 파이프라인 외부에 배포됩니다. 최종 사용자는 디바이스에 있는 스토리지 디스크를 확인하고, 제조업체의 웹 사이트에서 올바른 스토리지 드라이브 펌웨어 유틸리티를 가져오고, 업데이트를 수동으로 다운로드하고 설치해야 합니다.

또한 S 모드에서 Windows 10을 실행하는 디바이스는 사용자가 Microsoft에서 확인한 애플리케이션만 실행할 수 있도록 하는 향상된 보안 구성에 있으므로 공급업체 유틸리티가 드라이브 펌웨어를 업데이트하지 못할 수 있습니다. 이 수동 프로세스로 인해 펌웨어 업데이트의 채택이 낮아지고, 지원 비용이 증가하고, 하드웨어 제조업체의 고객 만족도 문제가 발생합니다.

참고 항목

S 모드의 Windows 10은 Windows 내 Microsoft Store의 앱과 S 모드의 Windows 10과 호환되는 액세서리에서만 작동합니다. S 모드에서 단방향 스위치를 사용할 수 있습니다. windows.com/SmodeFAQ 자세히 알아보세요.

드라이버 기반 솔루션을 사용하여 WU(Windows 업데이트) 서비스를 사용하여 디바이스 펌웨어를 업데이트하는 것은 하드웨어 공급업체에서 사용할 수 있으며, 기존 함수 드라이버에 펌웨어 업데이트 논리 및 페이로드를 추가하거나 별도의 펌웨어 업데이트 드라이버 및 패키지를 제공해야 합니다. 이 시나리오는 하드웨어 파트너 간에 중복 작업을 수행하고 스토리지 드라이브의 전체 서비스 비용을 증가합니다. 유니버설 드라이버에 대한 자세한 내용은 유니버설 INF 파일 사용을 참조 하세요.

Windows 10 버전 2004(OS 빌드 19041.488 이상)를 활용하면 Microsoft 제공 드라이버 및 하드웨어 공급업체에서 제공하는 펌웨어 업데이트 패키지를 사용하여 NVMe 드라이브 펌웨어를 업데이트할 수 있습니다. 이 솔루션은 WINDOWS 업데이트 통해 CHID(컴퓨터 하드웨어 ID)를 사용하여 대상 드라이브 및 디바이스에 배포할 수 있습니다.

Warning

펌웨어 업데이트는 잠재적으로 위험한 유지 관리 작업이며 새 펌웨어 이미지를 철저히 테스트한 후에만 배포해야 합니다. 지원되지 않는 하드웨어의 새 펌웨어는 신뢰성과 안정성에 부정적인 영향을 미칠 수 있으며, 데이터 손실을 일으킬 수도 있습니다.

드라이브 호환성

Windows 10을 사용하여 드라이브 펌웨어를 업데이트하려면 지원되는 드라이브가 있어야 합니다. 일반적인 디바이스 동작을 보장하기 위해 Windows 10은 NVMe 디바이스에 대한 선택적 HLK(하드웨어 랩 키트) 요구 사항을 지정합니다. 이러한 요구 사항은 NVMe 스토리지 드라이브가 새 Windows 업데이트 기반 솔루션을 사용하여 펌웨어를 설치할 수 있도록 지원해야 하는 명령을 간략하게 설명합니다.

하드웨어에서 드라이브 펌웨어를 업데이트하는 Windows를 지원하는지 여부에 대한 자세한 내용은 솔루션 공급업체에 문의하세요.

NVMe에 대한 Windows 디바이스 COMPAT 요구 사항: Device.Storage.ControllerDrive.NVMe - 섹션 5.7 및 5.8

Device.Storage.ControllerDrive.NVMe.BasicFunction

디바이스에는 업그레이드 가능한 펌웨어 슬롯이 하나 이상 있어야 합니다.

5.7 펌웨어 커밋

  • 디바이스의 전원 주기를 요구하지 않고 펌웨어 이미지 활성화를 수행해야 합니다.

  • 정품 인증 프로세스는 사양 버전 1.2a의 섹션 8.1에 설명된 대로 호스트 시작 재설정을 통해 달성될 것으로 예상됩니다.

  • Windows는 펌웨어 커밋 명령을 실행하는 경우 커밋 작업 001b 또는 010b를 활용합니다.

  • 전원 주기 없이 활성화에 필요한 완료 값은 00h(일반 성공), 10h 또는 11h입니다.

  • 0Bh가 완료 상태로 반환되면 Windows는 사용자에게 디바이스의 전원 주기를 수행하도록 알릴 것입니다. OS 런타임에 펌웨어를 업데이트하지 못하게 하고 워크로드가 크게 중단되므로 권장되지 않습니다.

5.8 펌웨어 이미지 다운로드

  • 다운로드 단계 중에 디바이스가 I/O에 실패하지 않아야 하며 I/O를 계속 제공해야 합니다.

자세한 내용은 WHCP_Documents_Windows 11 버전 다운로드 파일에서 사용할 수 있는 구성 요소 및 Peripherals.pdf 있는 Device.Storage.ControllerDrive.NVMe - 섹션 5.7 및 5.8에 대한 Windows 디바이스 COMPAT 요구 사항을 24H2.zip 참조하세요 .

NVMe 스토리지 디스크 드라이브에 대한 SCSI 식별자

Windows 10 버전 2004(OS 빌드 19041.488 이상)부터는 STOR_RICH_DEVICE_DESCRIPTION 구조를 지원하는 드라이버를 사용하여 NVMe 스토리지 디스크 드라이브에 두 개의 새 식별자를 사용할 수 있습니다.

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

여기서

  • t*는 가변 길이의 디바이스 유형 코드입니다.
  • v(8)는 8자 공급업체 식별자입니다.
  • p(40)는 40자 제품 식별자입니다.

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

여기서

  • t*는 가변 길이의 디바이스 유형 코드입니다.
  • v(8)는 8자 공급업체 식별자입니다.
  • p(40)는 40자 제품 식별자입니다.
  • r(8)은 8자 수정 수준 값입니다.

SCSI\t*v(8)p(40)r(80 식별자는 전체 제품 이름(NVME 1.4 사양에 맞게 정렬됨)을 제공하며 이 이름과 일치하는 NVME 드라이브에 대한 펌웨어 업데이트를 위한 SWC(소프트웨어 구성 요소) 노드를 만들 수 있습니다(최대 40자 및 8자 펌웨어 수정 버전).

자세한 내용은 SCSI 디바이스 및 STOR_RICH_DEVICE_DESCRIPTION 대한 식별자를 참조하세요.

SFU(스토리지 펌웨어 업데이트) 솔루션 세부 정보

다음 다이어그램에서 Windows 10은 함수 드라이버(stornvme.sys)와 펌웨어 업데이트 드라이버(storfwupdate.dll)를 모두 제공합니다. Microsoft 제공 드라이버를 활용하여 NVMe 드라이브 펌웨어를 업데이트하려면 두 개의 별도 드라이버 제출이 필요합니다.

스토리지 펌웨어 업데이트 세부 정보

패키지 1 - 드라이브 펌웨어 업데이트에 대한 ID 만들기

일반적으로 이 패키지에는 다음 항목이 포함됩니다.

  • 펌웨어 업데이트 패키지에 대해 독립적으로 대상으로 지정된 하드웨어 역할을 하는 소프트웨어 디바이스 노드를 만드는 확장 INF

  • 드라이버 카탈로그

확장 INF 패키지를 별도의 드라이버 제출로 제출합니다.

그러나 많은 디바이스 유형에서는 단일 물리적 디바이스가 둘 이상의 디바이스 노드를 열거하는 것을 허용하지 않습니다. 이 경우 AddComponent 지시문을 지정하는 확장 INF를 사용하여 Windows 업데이트 대상으로 하는 디바이스 노드를 만들고 펌웨어 업데이트 드라이버를 설치합니다. INF 파일의 다음 코드 조각은 디바이스 노드를 만드는 방법을 보여줍니다.

[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

이 INF 샘플 ComponentIDs = StorageIHVabcd-firmware-update 에서는 자식 디바이스에 SWC\StorageIHVabcd-firmware-update하드웨어 ID가 있음을 나타냅니다. 설치되면 이 INF는 다음 디바이스 계층 구조를 만듭니다.

I N F 디바이스 계층 구조입니다.

드라이브 펌웨어 업데이트에 대한 새 ID를 만드는 샘플 확장 INF는 아래에 제공됩니다. SCSI\DiskNVMe____StorageIHVabcd 하드웨어는 하드웨어 제조업체에서 고유하지 않을 수 있으므로 확장 INF는 배포를 위해 CHID 대상 지정을 활용해야 합니다.

패키지 2 - 드라이브 펌웨어 업데이트 패키지

일반적으로 이 패키지에는 다음이 포함됩니다.

  • 클래스 펌웨어의 유니버설 드라이버 INF

  • 펌웨어 업데이트 페이로드 이진

  • 드라이버 카탈로그

펌웨어 패키지를 별도의 드라이버 제출로 제출합니다.

드라이브 펌웨어 업데이트 패키지 INF는 새 노드 SWC\StorageIHVabcd-firmwareupdate 를 대상으로 하며 Windows 10 스토리지 펌웨어 업데이트 드라이버를 호출합니다. 소프트웨어 열거형 구성 요소 디바이스가 작동하려면 해당 부모를 시작해야 합니다. StorFwUpdate 드라이브를 사용하려면 개발자는 INF가 해당 섹션에 대한 지시문을 지정하는지 여부에 관계없이 다음과 같이 가능한 [DDInstall.*] 각 섹션에 대해 DDInstall 섹션 [StorFwUpdate.*] 의 Include/Needs INF 지시문을 사용해야 합니다.

[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

자세한 내용은 구성 요소 INF 파일 사용을 참조 하세요. 샘플 NVMe 드라이브 펌웨어 업데이트 INF 파일은 아래에 제공됩니다. SWC\StorageIHVabcd-firmwareupdate 소프트웨어 ID는 하드웨어 제조업체에서 고유하지 않을 수 있으므로 INF는 Windows 업데이트 배포를 위해 CHID 대상을 활용해야 합니다.

StorFwUpdate 구성 요소는 펌웨어 이진 페이로드의 유효성 검사(서명 확인 또는 암호 해독)를 수행하지 않습니다. 이 수준의 기능이 필요한 경우 하드웨어 파트너는 자체 스토리지 펌웨어 업데이트 드라이버를 작성할 수 있습니다.

스토리지 드라이브 펌웨어 업데이트 예제

두 INF 모두 Windows 업데이트 배포에 CHID가 필요하므로 하드웨어 파트너는 아래와 같이 PNPUTIL.EXE 사용하여 로컬에서 솔루션의 유효성을 검사할 수 있습니다.

요구 사항

  • Windows 10 버전 2004(OS 빌드 19041.488 이상)

  • 받은 편지함 stornvme.sys 드라이버를 사용하는 NVMe 스토리지 드라이브가 있는 디바이스

  • NVMe 드라이브 펌웨어 이진

  • 제대로 작성된 INF 파일

현재 NVMe 디스크 펌웨어 버전 보기

현재 NVMe 디스크 펌웨어 버전을 보려면 다음을 수행합니다.

  1. 관리자 권한으로 PowerShell 창을 엽니다.

  2. 현재 NVMe 디스크 펌웨어 버전을 보려면 입력 Get-PhysicalDisk | Get-StorageFirmwareInformation 합니다.

    현재 N V M e 디스크 펌웨어 버전입니다.

현재 ActiveSlotNumberFirmwareVersionInSlot 값을 확인합니다.

자세한 내용은 Get-StorageFirmwareInformation을 참조 하세요.

확장 INF를 설치하여 새 소프트웨어 하드웨어 ID 만들기

  1. 드라이버 확장 패키지 INF 파일이 포함된 시스템의 디렉터리로 이동합니다. 예를 들어 cd .\signed-DiskExtnPackage\을(를) 입력합니다.

  2. 확장 INF 파일에 업데이트 중인 드라이브에 대한 정보가 포함되어 있는지 확인합니다. 예제 확장 INF는 이 문서의 디스크 확장 INF 파일을 참조하세요.

  3. Microsoft PnP 유틸리티를 사용하여 확장 INF를 설치합니다. 예를 들어 관리자 명령 프롬프트에서 .를 입력합니다 pnputil /add-driver .\OEMDiskExtnPackage.inf /install. 새 소프트웨어 노드가 부팅 중요 디바이스의 자식으로 생성되므로 다시 부팅이 적용됩니다.

     p n p util 명령 출력입니다.

새 SWC(소프트웨어 구성 요소) 노드 보기

새 SWC 노드 및 하드웨어 ID를 보려면 다음을 수행합니다.

  1. Windows 10 시작 메뉴 제어판다음 장치 관리자 엽니다.

  2. 장치 관리자 디스크 드라이브를 선택한 다음 노드를 확장하고 업데이트한 디스크 드라이브를 선택합니다.

  3. 업데이트한 드라이브를 선택하면 장치 관리자 보기 메뉴에서 연결로 디바이스를 선택합니다.

  4. 선택한 드라이브 노드를 클릭한 다음 클릭하여 확장합니다. 드라이브 노드 아래에 자식 일반 소프트웨어 구성 요소가 표시됩니다.

  5. 일반 소프트웨어 구성 요소를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  6. 속성 대화 상자 창에서 세부 정보 탭을 선택한 다음 속성 드롭다운 목록에서 하드웨어 ID를 선택하면 드라이브 노드의 일반 소프트웨어 구성 요소에 대한 하드웨어 ID가 표시됩니다.

  7. SWC\* 하드웨어 ID는 확장 INF에 지정된 ID와 일치해야 합니다.

NVMe 디스크 펌웨어 업데이트 보기 및 설치

  1. 관리자 권한으로 PowerShell 창을 엽니다.

  2. NVMe 디스크 펌웨어 업데이트 INF 파일이 포함된 시스템의 디렉터리로 이동합니다. 예를 들어 cd .\signed-ihv-firmware\을(를) 입력합니다.

  3. 디스크 펌웨어 업데이트 INF에 업데이트 중인 드라이브에 대한 정보가 포함되어 있는지 확인합니다. 디스크 펌웨어 업데이트 INF 예제는 이 문서의 디스크 펌웨어 INF 파일을 참조하세요.

  4. Microsoft PnP 유틸리티를 사용하여 디스크 펌웨어 업데이트 INF를 설치합니다. 예를 들어 관리자 명령 프롬프트에서 .를 입력합니다 pnputil /add-driver .\StorFwUpdateIHV.inf /install.

  5. 관리자 권한으로 PowerShell 창을 엽니다.

  6. 업데이트된 NVMe 디스크 펌웨어 정보를 보려면 입력 Get-PhysicalDisk | Get-StorageFirmwareInformation 합니다.

    N V M e 디스크 펌웨어를 업데이트했습니다.

ActiveSlotNumberFirmwareVersionInSlot 값에서 업데이트된 NVMe 디스크 펌웨어 정보를 확인합니다.

자세한 내용은 Get-StorageFirmwareInformation을 참조 하세요.

Windows 업데이트 통해 확장 INF 및 펌웨어 패키지 배포

먼저 테스트 배포 지침에 게시를 사용하여 Windows 업데이트 통해 패키지 배포유효성을 검사합니다.

다음으로, 적절한 CHID를 사용하여 Windows 업데이트 통해 패키지를 배포합니다.

배포에 대한 자세한 내용은 Windows 10 드라이버 게시 워크플로(DOCX 다운로드)를 참조하세요.

디스크 확장 INF 샘플

다음은 확장 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:
;
;      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 샘플

다음은 디스크 펌웨어 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:
;
;      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"

추가 리소스

SCSI 디바이스의 식별자

STOR_RICH_DEVICE_DESCRIPTION