Windows ユニバーサル OEM パッケージの作成
Windows IoT Core バージョン 1709 では、Windows Universal OEM パッケージ化標準がサポートされています。
この新しいパッケージ化スキーマは、今後さらに多くの種類のデバイスに対応できるように構築されています。 従来のパッケージ化標準 (pkg.xml) を使用して IoT Core デバイス用のパッケージをビルド済みで、それを IoT デバイスに使用したい場合は、新しいパッケージ化標準に変換できます。
パッケージ
パッケージは、IoT Core イメージの作成に使用される論理的な構成要素です。
- 追加するものがすべてパッケージ化されます。 そのデバイスに追加するすべてのドライバー、ライブラリ、レジストリ設定、システム ファイル、カスタマイズが、パッケージに格納されます。 各項目の内容と場所は、パッケージ定義ファイル (*.wm.xml) 内で一覧表示されます。
- 信頼されたパートナーがパッケージを更新できます。 デバイス上のすべてのパッケージは、ユーザーまたは信頼されたパートナーによって署名されます。 これにより、OEM、ODM、開発者、Microsoft が連携して、相互の作業を損なうことなく、デバイスにセキュリティと機能の更新プログラムを提供できます。
- パッケージはバージョン管理されます。 これにより、更新が容易になり、システム復元の信頼性が向上します。
パッケージは、次の 3 つのカテゴリに大きく分けられます。
- OS キット パッケージ: コアとなる Windows オペレーティング システムが含まれます
- SoC ベンダーの事前ビルド済みパッケージ: チップセットをサポートするドライバーとファームウェアが含まれます
- OEM パッケージ: デバイス固有のドライバーとカスタマイズが含まれます
これらのパッケージをデバイス用のイメージに結合する方法については、こちらをご覧ください。
新しい空のパッケージを作成して作業を開始する
Windows ADK for Windows 10 Version 1709 と、「Windows IoT Core のカスタマイズに必要なツールの入手」および「ラボ 1a: 基本的なイメージの作成」で説明されているその他のツールおよびテスト証明書をインストールします。
テキスト エディターを使用して、次のテンプレートに基づく新しいパッケージ定義ファイル (Windows マニフェスト ファイルとも呼ばれます) を作成します。 wm.xml 拡張子を使用してファイルを保存します。
<?xml version='1.0' encoding='utf-8' standalone='yes'?> <identity xmlns="urn:Microsoft.CompPlat/ManifestSchema.v1.00" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MediaService" namespace="Media" owner="OEM" > </identity>
空のパッケージ ファイル (*.cab) を作成します。 ファイル名は、ファイルの所有者、名前空間、および名前に基づいて作成されます。
c:\oemsample>pkggen myPackage.wm.xml /universalbsp Directory of c:\oemsample 04/03/2017 05:56 PM <DIR> . 04/03/2017 05:56 PM <DIR> .. 04/03/2017 05:43 PM 333 myPackage.wm.xml 04/03/2017 05:56 PM 8,239 OEM-Media-MediaService.cab
パッケージにコンテンツを追加する
パッケージのコンテンツは、パッケージ定義ファイル内でXML 要素のリストとして編成されます。
次の例は、パッケージにいくつかのファイルとレジストリ設定を追加する方法を示しています。 この例では、パッケージを生成するたびに更新することができる変数 (_RELEASEDIR) を定義します。
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<identity
xmlns="urn:Microsoft.CompPlat/ManifestSchema.v1.00"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="MediaService"
namespace="Media"
owner="OEM"
>
<files>
<file source="$(_RELEASEDIR)\MediaService.dll"/>
</files>
<regKeys>
<regKey keyName="$(hklm.software)\OEMName\MediaService">
<regValue
name="StringValue"
type="REG_SZ"
value="MediaService"
/>
<regValue
name="DWordValue"
type="REG_DWORD"
value="0x00000020"
/>
</regKey>
</regKeys>
</identity>
pkggen.exe ツールを実行する
PkgGen.exe [project] /universalbsp ...
[project]··········· Full path to input file : .wm.xml, .pkg.xml, .man
Values:<Free Text> Default=NULL
[universalbsp]······ Convert wm.xml BSP package to cab
Values:<true | false> Default=False
[variables]········· Additional variables used in the project file,syntax:<name>=<value>;<name>=<value>;....
Values:<Free Text> Default=NULL
[cpu]··············· CPU type. Values: (x86|arm|arm64|amd64)
Values:<Free Text> Default="arm"
[languages]········· Supported language identifier list, separated by ';'
Values:<Free Text> Default=NULL
[version]··········· Version string in the form of <major>.<minor>.<qfe>.<build>
Values:<Free Text> Default="1.0.0.0"
[output]············ Output directory for the CAB(s).
Values:<Free Text> Default="CurrentDir"
例:
c:\oemsample>pkggen myPackage.wm.xml /universalbsp /variables:"_RELEASEDIR=c:\release"
ドライバー コンポーネントを追加する
パッケージ定義ファイル内で、driver 要素を使用してドライバーを挿入します。 相対パスを使用することをお勧めします。通常、これが INF ソース パスを記述するための最も簡単な方法です。
<drivers>
<driver>
<inf source="$(_RELEASEDIR)\Media.inf"/>
</driver>
</drivers>
既定のファイル インポート パスが INF ソース パスと等しくない場合は、defaultImportPath 属性を使用できます。 次の例では、INF は現在のディレクトリ内にありますが、インポートするファイルは $(_RELEASEDIR) に対して相対的です。
<drivers>
<driver defaultImportPath="$(_RELEASEDIR)">
<inf source="Media.inf"/>
</driver>
</drivers>
インポートするファイルが INF での定義方法に対して相対的でない場合は、ファイルのオーバーライドを適用できます。 これは推奨されていませんが、特殊なケースのために用意されています。
<drivers>
<driver>
<inf source="Media.inf"/>
<files>
<file name="mdr.sys" source="$(_RELEASEDIR)\path1\mdr.sys" />
<file name="mdr.dll" source="$(_RELEASEDIR)\path2\mdr.dll" />
</files>
</driver>
</drivers>
サービス コンポーネントを追加する
パッケージ定義ファイル内で、service 要素 (およびその子要素と属性) を使用して、システム サービスを定義してパッケージ化します。
<service
dependOnService="AudioSrv;AccountProvSvc"
description="@%SystemRoot%\system32\MediaService.dll,-201"
displayName="@%SystemRoot%\system32\MediaService.dll,-200"
errorControl="normal"
imagePath="%SystemRoot%\system32\svchost.exe -k netsvcs"
name="MediaService"
objectName="LocalSystem"
requiredPrivileges="SeChangeNotifyPrivilege,SeCreateGlobalPrivilege"
sidType="unrestricted"
start="delayedAuto"
startAfterInstall="none"
type="win32UserShareProcess"
>
WOW パッケージをビルドしてフィルター処理する
ゲストまたは WOW パッケージ (64 ビット デバイス上で実行される 32 ビット パッケージ) をビルドするには、buildWow="true" 属性を myPackage.wm.wml に追加します。
<identity
xmlns="urn:Microsoft.CompPlat/ManifestSchema.v1.00"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="MediaService"
namespace="Media"
owner="OEM"
buildWow="true"
>
これで、PkgGen.exe を実行すると、ホスト パッケージごとに 1 つの WOW パッケージが生成されるようになります。
04/05/2017 07:59 AM 11,870 OEM-Media-MediaService.cab
04/05/2017 07:59 AM 10,021 OEM-Media-MediaService_Wow_arm64.arm.cab
通常、64 ビット デバイスに対しては、そのホスト 64 ビット パッケージと、そのゲスト 32 ビット パッケージまたは WOW パッケージが (いずれも myPackage.wm.xml から) 生成されます。 2 つのパッケージ間のリソースの競合を回避するには、ビルド フィルターを使用します。
<regKeys buildFilter="not build.isWow and build.arch = arm" >
<regKey keyName="$(hklm.software)\OEMName\MediaService">
<regValue
name="StringValue"
type="REG_SZ"
value="MediaService"
/>
</regKey>
この場合、レジストリ キーは Host 32 ビット Arm パッケージ専用です。 build.arch を設定するために CPU スイッチが使用され、32 ビット ホスト パッケージをビルドするときには PkgGen によって build.isWow が false に設定され、32 ビット ゲストまたは WOW パッケージをビルドするときには true に設定されます。
[cpu]··············· CPU type. Values: (x86|arm|arm64|amd64)
Values:<Free Text> Default="arm"
Windows Universal OEM パッケージの変換
pkg.xml パッケージ化モデルを使用してパッケージを作成済みで、それを Windows IoT Core バージョン 1709 で使用したい場合は、パッケージを再作成するか、pkggen.exe ツールを使用して変換する必要があります。
パッケージの変換後に、wm.xml ファイルをスキーマに従うように変更することが必要な場合があります。
IoT Core アドオン v4.x では、新しい Windows Universal OEM パッケージ標準 (wm.xml) がサポートされています。 この新しいパッケージ化スキーマは、今後さらに多くの種類のデバイスに対応できるように構築されています。
パッケージ ファイルを変換する
従来の電話向けパッケージ化形式 (pkg.xml) で作成された既存のパッケージを新しい wm.xml 形式に変換するには、次のようにします。
pkggen.exe "filename.pkg.xml" /convert:pkg2wm
または、IoTCoreShell プロンプトから、convertpkg または buildpkg を使用して変換します。 出力された wm.xml ファイルは同じフォルダーに保存されます。
convertpkg.cmd MyPackage.pkg.xml
buildpkg.cmd MyPackage.pkg.xml
buildpkg を使用して、wm.xml パッケージを確認してテストします。
buildpkg.cmd MyPackage.wm.xml
ファイルをwm.xml形式に変換したら、pkg.xmlファイルを削除しても問題ありません。
アプリ パッケージを再生成する
同じコンポーネント名に対して newAppxPkg を使用します。 これにより、customizations.xml ファイルが再生成されます。 appx のバージョン番号が ppkg のバージョン番号として保持されます。
newAppxPkg "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp
詳細については、アプリの追加に関する説明を参照してください。
ファイルの追加: サイズが 0 のファイル、相対パスに注意する
サイズが 0 のファイルは、wm.xml ではサポートされません。 これを回避するには、ファイルに空の領域を追加して、サイズが 0 ではないファイルにします。
パス: 現在のディレクトリにあるファイルを追加する場合は、ファイル名に .\ プレフィックスを明示的に追加する必要があります。
<BinaryPartition ImageSource=".\uefi.mbn" />
詳細については、ファイルの追加に関する説明を参照してください。
プロビジョニング パッケージ customization.xml ファイルを更新する
ADK バージョン 1709 では、customizations.xml ファイルを更新する必要があります。
product\prov フォルダー内で、Common/ApplicationManagement を Common/Policies/ApplicationManagement に手動で移動します。
<Customizations>
<Common>
<Policies>
<ApplicationManagement>
<AllowAppStoreAutoUpdate>Allowed</AllowAppStoreAutoUpdate>
<AllowAllTrustedApps>Yes</AllowAllTrustedApps>
</ApplicationManagement>
プロビジョニング パッケージ (PPKG) で、パッケージ バージョン管理と同様の 4 部構成のバージョン管理がサポートされるようになりました。 この変更に伴い、バージョン 1.19 は 1.2 よりも後となります。 以前のバージョンでは文字ベースの並べ替えを使用していたので、バージョン 1.19 は 1.2 よりも前と見なされていました。
詳細については、プロビジョニング ファイルの追加に関する説明を参照してください。