建立 Windows 通用 OEM 套件
Windows IoT 核心版 1709 支援 Windows 通用 OEM 封裝標準。
這個新的封裝架構是建置成在未來與更多裝置類型相容。 如果您已使用舊版封裝標準 (pkg.xml) 為 IoT 核心版裝置建置套件,而且您想要在 IoT 裝置上使用它們,您可以將 它們轉換成新的封裝標準。
套件
套件是用來建立 IoT 核心版映射的邏輯建置組塊。
- 您新增的所有專案都已封裝。 您新增至裝置的每個驅動程式、程式庫、登錄設定、系統檔案和自訂都會包含在套件中。 每個專案的內容和位置都會列在套件定義檔中, (*.wm.xml) 。
- 信任的合作夥伴可以更新套件。 您的裝置上的每個套件都會由您或受信任的合作夥伴簽署。 這可讓 OEM、ODM、開發人員和 Microsoft 共同合作,協助將安全性和功能更新傳遞給您的裝置,而不需要彼此的工作進行自訂。
- 套件已建立版本。 這有助於讓更新更容易,並讓系統還原更可靠。
套件分為三個主要類別:
- OS 套件套件 包含核心 Windows 作業系統
- SoC 廠商預建套件 包含支援晶片組的驅動程式和韌體
- OEM 套件 包含裝置特定的驅動程式和自訂
從建立新的空白套件開始
安裝適用于 Windows 10 版本 1709 的 Windows ADK,以及取得自訂 Windows IoT 核心版和實驗室 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"
新增驅動程式元件
在套件定義檔案中,使用 驅動程式 元素來插入驅動程式。 我們建議使用相對路徑,因為它是描述 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 套件, (32 位套件在 64 位裝置上執行,) 將 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,現在會為每個主機套件產生一個 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 產生。 若要避免兩個套件之間的資源衝突,請使用 組建篩選器:
<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 套件。 CPU 參數可用來設定 build.arch,而 build.isWow 會在建置 32 位主機套件時由 PkgGen 設定為 false,然後在建置 32 位客體或 WOW 套件時為 true。
[cpu]··············· CPU type. Values: (x86|arm|arm64|amd64)
Values:<Free Text> Default="arm"
轉換 Windows 通用 OEM 套件
如果您已使用pkg.xml封裝模型建立套件,而且想要在 Windows IoT 核心版 1709 上使用套件,則必須重新建立套件,或使用 pkggen.exe 工具加以轉換。
轉換套件之後,您可能需要修改wm.xml檔案,以確定它遵循 架構。
IoT 核心版附加元件 v4.x 支援新的 Windows 通用 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
深入瞭解: 新增應用程式。
新增檔案:watch零大小的檔案、相對路徑
wm.xml不支援零大小的檔案。 若要解決此問題,請在檔案中新增空白空間,使其成為非零大小的檔案。
路徑:當您在目前目錄中新增檔案時,您必須明確地將 .\ 前置詞新增至檔案名。
<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) 現在支援類似套件版本設定的四部分版本設定。 因此,這項變更為 1.19 > 1.2 版。 舊版使用字元型排序,因此 1.19 版被視為早于 1.2。
深入瞭解: 新增布建檔案