디바이스 레이아웃 사용자 지정

디바이스 레이아웃은 팩터리 OS 디바이스의 디스크 구성에 대한 청사진입니다. Microsoft, OEM 및 SV 콘텐츠가 함께 작동하여 팩터리 OS 이미지에 대한 디스크 레이아웃을 만드는 방법을 설명합니다. XML 파일을 사용하여 실제 하드웨어를 설명한 다음 Windows 시스템 키트를 사용하여 디바이스 레이아웃 패키지를 생성함으로써 디바이스 레이아웃이 만들어집니다.

DISM을 사용하여 FFU를 플래시하려면 대상 하드웨어의 DevicePath 및 섹터 크기를 포함하는 디바이스 레이아웃으로 FFU를 구성해야 합니다.

디바이스 레이아웃 유형

팩터리 OS에는 두 가지 유형의 디바이스 레이아웃이 있습니다.

  • 모놀리식 디바이스 레이아웃

    Windows 시스템 키트에 포함된 디바이스 레이아웃을 사용하여 팩터리 OS 이미지를 만들 수 있습니다. 이러한 레이아웃은 Microsoft에서 만들고 소유하며 수정할 수 없습니다.

  • 디바이스 레이아웃 분할

    팩터리 OS에서 디바이스 레이아웃 소유권은 Microsoft와 OEM 간에 깔끔하게 분할될 수 있습니다. 이 시나리오에서는

    • Microsoft는 가상 디스크 및 파티션과 같은 필수 디바이스 레이아웃 요소를 지정합니다. 다음은 파티션 레이아웃에 설명된 레이아웃 구성 요소입니다.
    • OEM은 디스크의 실제 특성(예: 섹터 크기)을 설명하는 OEM 디바이스 레이아웃(DeviceLayoutOEM.xml) 파일을 만들고 파티션이나 가상 디스크를 추가할 수도 있습니다.

모놀리식 디바이스 레이아웃과 비교할 때 분할 레이아웃을 사용하면 OEM 및 SV가 디바이스에 대한 레이아웃을 빠르게 만들어 디바이스 가동 및 OS 개발을 테스트할 수 있도록 함으로써 공동 엔지니어링 시간을 줄일 수 있습니다.

분할 디바이스 레이아웃 작동 방식

분할 레이아웃에는 두 부분이 있습니다.

  • Microsoft에서 소유하고 유지 관리하는 디바이스 레이아웃

    이 레이아웃은 Windows 시스템 키트에 포함되어 있으며 팩터리 OS에 필요한 가상 디스크 및 파티션을 구성합니다.

  • OEM-authored DeviceLayoutOEM.xml

    이 파일은 디바이스 드라이브의 특성을 설명하며 필요한 경우 파티션을 추가할 수도 있습니다. 이 파일은 Microsoft 소유 디바이스 레이아웃을 보완합니다. 두 레이아웃이 함께 작동하여 디바이스에 맞는 디바이스 레이아웃을 만듭니다.

    시작점으로 작업 영역의 %WSKWorkspaceRoot%\OEMCustomization\DeviceLayout 폴더에 포함된 DeviceLayoutOEM.xml은 기본 Store ID와 512 섹터 크기로 미리 채워져 있습니다. 다음과 같은 방법으로 디스크 레이아웃에 이 파일을 사용할 수 있습니다.

    • DevicePath 추가.
    • 섹터 크기가 디스크의 섹터 크기와 일치하는지 확인합니다.

이 두 레이아웃 파일은 이미지 만들기 중에 결합되어 디바이스에 적용할 수 있는 디바이스 레이아웃을 만듭니다.

이미지에 디바이스 레이아웃 파일을 추가하는 방법을 알아보려면 디바이스에서 사용자 지정 디바이스 레이아웃 사용을 참조하세요.

OEM 디바이스 레이아웃 파일

다음 XML은 DeviceLayoutOEM.xml 파일을 구성하는 요소를 보여 줍니다. 각 요소는 OEM이 구성할 수 있는 디바이스 레이아웃의 측면을 설명합니다.

<?xml version="1.0" encoding="utf-8"?>
<OEMDeviceLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate/v2">
    <Stores>
        <Store>
            <Id></Id>
            <StoreType></StoreType>
            <DevicePath></DevicePath>
            <SizeInBytes></SizeInBytes>
            <Partitions>
                <Partition>
                    <Name></Name>
                    <Type></Type>
                    <FileSystem></FileSystem>
                    <Id></Id>
                    <TotalBytes></TotalBytes>    
                    <ByteAlignment></ByteAlignment>
                </Partition>
            </Partitions>
        </Store>
    </Stores>
    <SectorSize></SectorSize>
    <MergeVersionTag></MergeVersionTag>
    <UpdateByOSTag></UpdateByOSTag>
</OEMDeviceLayout>

OEMDeviceLayout 참조

OEMDeviceLayout 자식 요소

<OEMDeviceLayout> 요소는 OEM 디바이스 레이아웃의 최상위 요소입니다. OEM 레이아웃의 유일한 필수 요소는 SectorSize입니다.

<OEMDeviceLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate/v2">
    <Stores></Stores>
    <SectorSize></SectorSize>
    <MergeVersionTag></MergeVersionTag>
    <UpdateByOSTag></UpdateByOSTag>
</OEMDeviceLayout>
요소 필수 Type 설명
매장 선택 사항 매장 실제 디스크 그룹을 정의합니다. OEMDeviceLayout에는 단일 <Stores> 요소만 포함될 수 있습니다.
SectorSize 필수 정수 디스크의 섹터 크기입니다. 섹터 크기가 디스크의 섹터 크기와 일치하지 않으면 플래시가 실패합니다.
MergeVersionTag 선택 정수
UpdateByOSTag 선택 사항입니다. 기본값은 false입니다. Boolean

Stores 자식 요소

<Stores> 요소는 실제 디스크 그룹을 설명합니다. OEM 디바이스 레이아웃에는 단일 <Stores> 요소만 있을 수 있습니다.

<Stores>
    <Store>
    ...
    </Store>
</Stores>
요소 설명
스토어 <Store>의 자식 요소는 실제 디스크를 정의합니다.

Store 자식 요소

<Store>의 자식 요소는 실제 디스크의 특성을 정의합니다.

<Store>
    <Id></Id>
    <StoreType></StoreType>
    <DevicePath></DevicePath>
    <SizeInBytes></SizeInBytes>
    <Partitions></Partitions>
</Store>
요소 필수 Type Description
ID 필수 문자열(GUID) Microsoft 필수 파티션이 있는 디스크를 구성하려면 {5a585bae-900b-41b5-b736-a4cecffc34b4}를 사용합니다.
StoreType 선택 문자열 읽을 수 있는 Store 설명을 제공합니다. 이미징에 영향을 미치지 않습니다.
DevicePath 실제 디스크에 필요 문자열 스토리지 디바이스에 매핑되는 EFI_BLOCK_IO_PROTOCOL 핸들의 UEFI 디바이스 경로입니다. 와일드카드(?)는 문자열의 개별 문자 교체에 사용할 수 있습니다. 예: <DevicePath>PciRoot(0x0)/Pci(0x1D,0x0)/Pci(0x0,0x0)/NVMe(0x1,??-??-??-??-??-??-??-??)</DevicePath>.
SizeInBytes 필수 정수 - 실제 디스크의 크기(바이트).
- 크기는 131072(FFU 블록 크기)의 배수여야 합니다.
파티션 선택 사항 파티션 <Store>당 하나의 <Partitions> 요소만 허용됩니다. 파티션은 <Partitions>의 자식 요소로 정의됩니다.

Partitions 자식 요소

<Partitions>의 자식 요소는 디바이스의 OEM 정의 파티션을 설명합니다. DeviceLayoutOEM.xml에 구성된 Partitions는 Microsoft 소유 디바이스 레이아웃에서 정의한 필수 파티션에 추가됩니다.

<Partitions>
    <Partition>
    ...
    </Partition>
</Partitions>
요소 필수 Type 설명
파티션 선택 사항 파티션 실제 디스크의 파티션을 설명합니다.

Partition 자식 요소

<Partition>의 자식 요소는 디바이스의 파티션 속성을 설명합니다.

<Partition>
    <Name></Name>
    <Type></Type>
    <FileSystem></FileSystem>
    <Id></Id>
    <TotalBytes></TotalBytes>    
    <ByteAlignment></ByteAlignment>
</Partition>
요소 필수 Type Description
이름 필수 문자열 최대 문자 수: NTFS 파일 시스템의 경우 36자, FAT 또는 FAT32 파일 시스템의 경우 11자. Partition 이름은 디바이스 레이아웃의 모든 부분에서 고유해야 합니다.
유형 필수 문자열 GPT 파티션 유형에 대한 GUID
OEM 파티션에 대한 기본 유형 {ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}을 지정하여 디바이스가 팩터리 OS를 실행하는 동안 \\?\Volume{<partition id>}\ 경로를 통해 액세스할 수 있도록 합니다.
FileSystem 선택 문자열 - 허용되는 값은 {NTFS, FAT, FAT32}입니다.
- 지정하지 않으면 볼륨이 포맷되지 않은 RAW 파티션이 됩니다.
Id 선택 문자열 GPT 파티션 유형에 대한 GUID입니다. 파티션 ID는 디바이스 레이아웃의 모든 부분에서 고유해야 합니다. 지정하지 않으면 임의의 GUID가 할당됩니다.
TotalBytes 선택 정수 - 파티션 크기(바이트).
- 파티션은 OS 및 OEM 사용자 지정 콘텐츠가 이미지에 추가된 후 부모 "Store"에 지정된 "SizeInBytes"에 맞도록 크기가 조정되어야 합니다.
- 값은 131072(FFU 블록 크기)로 나눌 수 있어야 합니다.
- 최댓값은 지정된 파일 시스템 유형에 따라 결정됩니다.
ByteAlignment 선택 정수 - 실리콘 공급업체에서 권장하지 않는 한 이 필드를 사용하지 마세요.
- 이 파티션의 시작이 정렬되어야 하는 바이트 경계를 재정의합니다.

샘플 OEM 레이아웃

다음은 2개의 파티션과 512 섹터 크기가 있는 실제 디스크에 대한 샘플 OEM 디바이스 레이아웃입니다.

<?xml version="1.0" encoding="utf-8"?>
<OEMDeviceLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate/v2">
    <Stores>
        <Store>
            <Id>{5a585bae-900b-41b5-b736-a4cecffc34b4}</Id>
            <StoreType>Default</StoreType>
            <DevicePath>VenHw(8D90D477-39A3-4A38-AB9E-586FF69ED051)</DevicePath>
            <SizeInBytes>4294967296</SizeInBytes>            
            <Partitions>
                <Partition>
                    <Name>OEM1</Name>
                    <Type>{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}</Type>
                    <FileSystem>FAT32</FileSystem>
                    <TotalBytes>134217728</TotalBytes>
                </Partition>
                <Partition>
                    <Name>OEM2</Name>
                    <Type>{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}</Type>
                    <FileSystem>FAT32</FileSystem>
                    <TotalBytes>67108864</TotalBytes>
                </Partition>
            </Partitions>
        </Store>
    </Stores>
    <SectorSize>512</SectorSize>
    <MergeVersionTag>1</MergeVersionTag>
</OEMDeviceLayout>

디바이스에서 사용자 지정 디바이스 레이아웃 사용

DeviceLayoutOEM.xml 파일을 만든 후 이를 사용하여 팩터리 OS 디바이스의 디스크 레이아웃을 구성할 수 있습니다. OEM 디바이스 레이아웃은 팩터리 OS 설정 프레임워크를 통해 사용하도록 설정됩니다.

  1. 디스크 구성을 반영하는 DeviceLayoutOEM.xml 파일을 작성합니다. 작업 영역에서 DeviceLayoutOEM.xml 파일을 사용하거나 위의 빈 샘플을 시작점으로 사용할 수 있습니다.

  2. 작업 영역에 파일을 DeviceLayoutOEM.xml로 저장합니다.

  3. 설정 사용자 지정의 프로세스에 따라 설정 사용자 지정 파일을 생성하고 사용합니다.

    • 사용자 지정 파일에 splitlayoutfile이라는 설정이 표시됩니다. 이 설정 값을 파일 경로로 설정합니다.
    <Customization Name="splitlayoutfile">
        <ReadOnlyMetadata Description="oem/sv-owned split layout file. (file must be named DeviceLayoutOEM.xml)" Type="FILE" DefaultValue="" SupportedExtensions="xml" />
        <Value>C:\Workspace\OEMCustomization\DeviceLayout\DeviceLayoutOEM.xml</Value>
    </Customization>
    
  4. OEMInput.xml 파일에서 <DeviceLayoutType>을 업데이트합니다.

    <DeviceLayoutType>GPT_SPACES_SPLIT</DeviceLayoutType>
    
  5. 이미지를 생성하면 구성한 레이아웃이 사용됩니다.