デバイス レイアウトのカスタマイズ
デバイス レイアウトは、Factory OS デバイスのディスク構成のためのブループリントです。 これは、Microsoft、OEM、および SV のコンテンツがどのように組み合わされて、ファクトリ OS イメージ用のディスク レイアウトが作成されるかを説明しています。 デバイス レイアウトは、XML ファイルを使用して物理ハードウェアについて記述してから、Windows システム キットを使用してデバイス レイアウト パッケージを生成することによって作成されます。
DISM を使用して FFU をフラッシュするには、ターゲット ハードウェアの DevicePath とセクター サイズを含むデバイス レイアウトを使用して FFU を構成する必要があります。
デバイス レイアウトの種類
ファクトリ OS には、次の 2 種類のデバイス レイアウトがあります。
モノリシック デバイス レイアウト
Windows システム キットに含まれるデバイス レイアウトを使用して、ファクトリ OS イメージを作成できます。 これらのレイアウトは、Microsoft によって作成および所有されており、変更することはできません。
分割デバイス レイアウト
ファクトリ OS では、デバイス レイアウトの所有権を Microsoft と OEM の間ではっきり分割できます。 このシナリオでは:
- Microsoft は、仮想ディスクやパーティションなど、必須のデバイス レイアウト要素を指定します。 これらは、「パーティションのレイアウト」で説明されているレイアウト コンポーネントです。
- OEM は、ディスクの物理的特性 (セクター サイズなど) を説明する OEM デバイス レイアウト (DeviceLayoutOEM.xml) ファイルを作成します。また、パーティションや仮想ディスクを追加することもできます。
モノリシック デバイス レイアウトと比較すると、分割レイアウトでは、OEM と SV がデバイスのレイアウトをすばやく作成して、デバイスの立ち上げと OS 開発をテストできるため、共同エンジニアリング時間を短縮できます。
分割デバイス レイアウトのしくみ
分割レイアウトには、次の 2 つの部分があります。
Microsoft が所有および保守するデバイス レイアウト
このレイアウトは、Windows システム キットに含まれており、ファクトリ OS に必要な仮想ディスクとパーティションを構成します。
OEM で作成された DeviceLayoutOEM.xml
このファイルは、デバイスのドライブの特性が記述されており、必要に応じてパーティションを追加することもできます。 このファイルは、Microsoft 所有のデバイス レイアウトを補足するものです。 これら 2 つのレイアウトが組み合わされて、デバイスに合わせて調整されたデバイス レイアウトが作成されます。
開始点として、使用するワークスペースの
%WSKWorkspaceRoot%\OEMCustomization\DeviceLayout
フォルダーに含まれる DeviceLayoutOEM.xml が、既定の Store ID と 512 セクター サイズで事前設定されます。 このファイルは、次の方法でディスク レイアウトに使用できます。- DevicePath を追加する。
- そのセクター サイズが使用するディスクのセクター サイズと一致することを確認する。
これら 2 つのレイアウト ファイルは、イメージの作成時に結合され、デバイスに適用できるデバイス レイアウトが作成されます。
イメージにデバイス レイアウト ファイルを追加する方法の詳細については、「デバイスでカスタム デバイス レイアウトを使用する」を参照してください。
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>
要素 | 必須 | タイプ | 説明 |
---|---|---|---|
店舗 | 省略可能 | 店舗 | 物理ディスクのグループを定義します。 OEMDeviceLayout には、単一の <Stores> 要素のみを含めることができます。 |
SectorSize | 必須 | integer | ディスクのセクター サイズ。 セクター サイズがディスク上のセクター サイズと一致しない場合、フラッシュは失敗します。 |
MergeVersionTag | 省略可能 | Integer | |
UpdateByOSTag | 省略可能。既定値は false です。 | Boolean |
Stores 子要素
<Stores> 要素は、物理ディスクのグループを記述します。 OEM デバイス レイアウトには、<Stores> 要素を 1 つのみ含めることができます。
<Stores>
<Store>
...
</Store>
</Stores>
要素 | 説明 |
---|---|
保存 | <Store> の子要素は、物理ディスクを定義します。 |
Store 子要素
<Store> の子要素は、物理ディスクの属性を定義します。
<Store>
<Id></Id>
<StoreType></StoreType>
<DevicePath></DevicePath>
<SizeInBytes></SizeInBytes>
<Partitions></Partitions>
</Store>
要素 | 必須 | タイプ | 説明 |
---|---|---|---|
id | 必須 | 文字列 (GUID) | Microsoft によって定義されたパーティションを含むディスクを構成する場合は、{5a585bae-900b-41b5-b736-a4cecffc34b4} を使用します。 |
StoreType | 省略可能 | String | ストアに関する人間が判読できる説明を提供します。 イメージの作成には影響しません。 |
DevicePath | 物理ディスクの場合は必須 | String | ストレージ デバイスにマップする EFI_BLOCK_IO_PROTOCOL ハンドルの UEFI デバイス パス。 文字列内の個々の文字置換にワイルドカード (? ) を使用できます。 例: <DevicePath>PciRoot(0x0)/Pci(0x1D,0x0)/Pci(0x0,0x0)/NVMe(0x1,??-??-??-??-??-??-??-??)</DevicePath> 。 |
SizeInBytes | 必須 | 整数型 | - 物理ディスクのサイズ (バイト単位)。 - サイズは 131072 (FFU ブロック サイズ) の倍数である必要があります。 |
メジャー グループ | 省略可能 | メジャー グループ | <Store> ごとに、1 つの <Partitions> 要素のみを使用できます。 パーティションは、<Partitions> の子要素によって定義されます。 |
Partitions 子要素
<Partitions> の子要素は、OEM によって定義されたデバイスのパーティションを記述します。 DeviceLayoutOEM.xml で構成されたパーティションは、Microsoft 所有のデバイス レイアウトによって定義される必須のパーティションに追加されたものです。
<Partitions>
<Partition>
...
</Partition>
</Partitions>
要素 | 必須 | タイプ | 説明 |
---|---|---|---|
パーティション | 省略可能 | パーティション | 物理ディスク上のパーティションを記述します。 |
Partition 子要素
<Partition> の子要素は、デバイス上のパーティションのプロパティを記述します。
<Partition>
<Name></Name>
<Type></Type>
<FileSystem></FileSystem>
<Id></Id>
<TotalBytes></TotalBytes>
<ByteAlignment></ByteAlignment>
</Partition>
要素 | 必須 | タイプ | 説明 |
---|---|---|---|
件名 | 必須 | String | 最大文字数: NTFS ファイルシステムの場合は 36、FAT または FAT32 ファイルシステムの場合は 11。 パーティション名は、デバイス レイアウトのすべての部分に対して一意である必要があります。 |
Type | 必須 | String | GPT パーティションの種類の GUID OEM パーティションの場合は、基本型の {ebd0a0a2-b9e5-4433-87c0-68b6b72699c7} を指定します。このようにすると、デバイスがファクトリ OS を実行している間に、それらのパーティションに \\?\Volume{<partition id>}\ パス経由でアクセスできます。 |
FileSystem | 省略可能 | String | - 許可されている値は NTFS、FAT、FAT32 です。 - 指定しない場合、ボリュームは未フォーマットの RAW パーティションになります。 |
Id | 省略可能 | String | GPT パーティションの種類の GUID。 パーティション ID は、デバイス レイアウトのすべての部分に対して一意である必要があります。 指定しない場合、ランダムな GUID が割り当てられます。 |
TotalBytes | 省略可能 | Integer | - パーティション サイズ (バイト単位) - パーティションは、その親である "Store" で指定された "SizeInBytes" に適合するように、OS および OEM カスタマイズ コンテンツがイメージに追加された後で、サイズ指定される必要があります。 - 値は、131072 (FFU ブロック サイズ) で割り切れる必要があります。 - 最大値は、指定した FileSystem の種類によって決まります。 |
ByteAlignment | 省略可能 | Integer | - シリコン ベンダーによって推奨されているのでない限り、このフィールドは使用しないでください。 - このパーティションの先頭が配置されるべきバイト境界をオーバーライドします。 |
サンプル 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 設定フレームワークを使用して有効化されます。
ディスク構成を反映する DeviceLayoutOEM.xml ファイルを作成します。 この DeviceLayoutOEM.xml ファイルをワークスペースで使用するか、上の空のサンプルを開始点として使用できます。
このファイルをワークスペースに
DeviceLayoutOEM.xml
として保存します。「設定のカスタマイズ」の手順に従って、設定カスタマイズ ファイルを生成して使用します。
- カスタマイズ ファイルに、
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>
- カスタマイズ ファイルに、
OEMInput.xml ファイルの
<DeviceLayoutType>
を更新します。<DeviceLayoutType>GPT_SPACES_SPLIT</DeviceLayoutType>
このようにすると、イメージを生成するときに、構成したレイアウトが使用されます。