다음을 통해 공유


랩 1g: 정품 이미지 빌드

정품 Windows IoT Core 이미지를 만들고 특정 하드웨어 디바이스에 플래시하는 데 필요한 단계에 대해 자세히 설명합니다.

필수 구성 요소/요구 사항

기본 이미지 만들기에서 기본 이미지를 만들고 이전 랩을 모두 완료했는지 확인합니다.

이 섹션을 완료하려면 다음 도구를 설치해야 합니다.

  • 정품 코드 서명 인증서
  • 상호 서명 인증서
  • Visual Studio
  • Windows ADK(Windows Assessment and Deployment Kit)
  • IoT Core PowerShell 환경
  • 텍스트 편집기(예: 메모장 또는 VS Code)

프로젝트 구성 파일 수정

아래 단계에 따라 정품 이미지에 추가하려는 사용자 지정 애플리케이션 또는 프로비전 패키지를 추가합니다.

  1. 사용자 지정 애플리케이션을 추가하려면 이미지에 앱 추가에 나와 있는 지침을 따라야 합니다. 그러나 다음과 같이 Add-IoTProductFeature 명령을 실행할 때 Test 대신 Retail을 지정합니다.
Add-IoTProductFeature ProductX Retail APPX_HELLOWORLDAPP -OEM
or addfid ProductX Retail APPX_HELLOWORLDAPP -OEM

그러면 APPX_HELLOWORLDAPP라는 FeatureID가 지정된 제품의 정품 OEMInput XML 파일에 추가됩니다.

  1. 포함된 Windows IoT Core 기능을 최소화합니다. 또한 Windows IoT Core용 테스트 이미지에 기본적으로 포함된 모든 테스트 애플리케이션을 제거하려고 합니다. 여기에는 다른 개발자 도구 또는 테스트 기능과 함께 IoT Core 기본 애플리케이션이 포함됩니다. 이 작업은 Remove-IoTProductFeature를 사용하여 수행할 수 있습니다.
Remove-IoTProductFeature ProductX Test IOT_BERTHA
or removefid ProductX Test IOT_BERTHA

애플리케이션에 올바르게 서명 및 포함

Windows IoT Core 정품 이미지에 포함하려는 사용자 지정 애플리케이션이 하나 이상 있는 경우 정품 이미지에 포함할 때 이러한 애플리케이션이 제대로 서명되었는지 확인해야 합니다. 이미지에 포함하려는 각 애플리케이션에 대해 다음 단계를 수행합니다. 포함할 애플리케이션이 하나만 있는 경우 8단계와 9단계를 건너뛸 수 있습니다.

  1. 정품 코드 서명 인증서를 기술자 PC에 설치합니다.

  2. Visual Studio에서 사용자 지정 애플리케이션을 열고, Package.appxmanifest 파일을 엽니다.

  3. 패키징 탭, 인증서 선택... 단추를 차례로 클릭합니다.

패키지 매니페스트 화면

  1. 표시되는 대화 상자에 코드 서명에 사용되는 인증서가 표시됩니다. 인증서 구성... 드롭다운을 클릭하고, 인증서 저장소에서 선택...을 선택합니다.

인증서 선택 화면

  1. 메시지가 표시되면 정품 코드 서명 인증서를 선택하고, 확인을 클릭합니다.

  2. Visual Studio에서 프로젝트를 저장한 다음, Appx 패키지를 빌드합니다. 이 패키지를 빌드할 때 정품 코드 서명 인증서에 대한 암호를 묻는 메시지가 표시됩니다.

  3. Appx 파일이 빌드되면 IoT Core Powershell 환경에서 다음 명령을 실행합니다.

Add-IoTAppxPackage "C:\Dev\OpenSource\ContosoApp\ContosoApp\AppPackages\ContosoApp_1.0.0.0_ARM_Debug_Test\ContosoApp_1.0.0.0_ARM_Debug.appx" fga Appx.ContosoApp
 (or) newAppxPkg "C:\Dev\OpenSource\ContosoApp\ContosoApp\AppPackages\ContosoApp_1.0.0.0_ARM_Debug_Test\ContosoApp_1.0.0.0_ARM_Debug.appx" fga Appx.ContosoApp

정품 이미지 파일 빌드

모든 사용자 지정 애플리케이션 패키지가 올바르게 서명되면 이제 Windows IoT Core 정품 이미지를 빌드할 수 있습니다. 다음 단계를 수행하기 전에 정품 코드 서명 인증서가 PC에 설치되어 있는지 확인하세요.

  1. 인증서 및 상호 인증서에 대한 세부 정보를 포함하도록 IoT 서명을 설정합니다. 이 작업은 작업 영역(예: C:\MyWorkspace)에 있는 IoTWorkspace.xml 파일을 수정하여 수행됩니다.
<!--Specify the retail signing certificate details, Format given below -->
<RetailSignToolParam>/s my /sha1 "thumbprint" /fd SHA256 /ac "c:\DownloadedCrossCert.crt"</RetailSignToolParam>
  1. IoT Core PowerShell 환경을 관리자 권한으로 실행합니다.

  2. 정품 서명 환경을 설정합니다. 이 작업은 Set-IoTRetailSign을 사용하여 수행됩니다.

Set-IoTRetailSign On
(or) retailsign on 
  1. 패키지를 빌드합니다.
New-IoTCabPackage All
(or) buildpkg all 

모든 패키지 .CAB 파일이 빌드되면 이러한 각 파일이 정품 인증서로 올바르게 서명되었는지 확인해야 합니다. 일부 패키지가 여전히 테스트 인증서로 서명되어 있는 경우(일반적으로 기술자 PC를 사용하여 테스트 및 정품 이미지를 모두 빌드하는 경우에 발생함) Redo-IoTCabSignature를 사용하여 이러한 파일에 다시 서명할 수 있습니다.

Redo-IoTCabSignature  C:\BSP.IN C:\BSP.OUT
(or) re-sign.cmd C:\BSP.IN C:\BSP.OUT 

그러면 c:\BSP.IN에서 .CAB 파일을 가져와서 정품 인증서로 다시 서명하고 c:\BSP.OUT 디렉터리에 복사합니다.

  1. 5단계에서 .CAB 파일에 다시 서명한 경우 다시 서명한 .CAB 파일을 C:\IoT\Workspaces\ContosoWS\Build\<arch>\pkgs에 복사하여 기존 파일을 덮어씁니다. 이 예제에서 이러한 파일은 C:\IoT\Workspaces\ContosoWS\Build\arm\pkgs에 복사됩니다.

  2. 다음 명령을 실행하여 정품 이미지를 빌드합니다.

New-IoTFFUImage ProductX Retail
(or)buildimage ProductX Retail 
  1. 그런 다음, 이미지 플래시에서 설명한 대로 정품 이미지를 플래시할 수 있습니다.

사용되는 명령

여기에는 정품 IoT Core 이미지를 만들기 위한 명령이 순서대로 나열되어 있습니다. 정품 코드 서명 인증서를 먼저 설치해야 하며, .CAB 파일에 다시 서명할 때 인증서 암호를 묻는 메시지가 표시될 수 있습니다.

Set-IoTRetailSign On
New-IoTCabPackage All
Redo-IoTCabSignature  C:\BSP.IN C:\BSP.OUT
xcopy C:\BSP.OUT\*.cab C:\IoT\Workspaces\ContosoWS\Build\arm\pkgs\*.cab
New-IoTFFUImage ProductX Retail

정품 구성에 기능 추가

  1. Add-IoTProductFeature를 사용하여 제품 정품 구성 파일을 업데이트합니다.

    # Add application features
    Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM
    Remove-IoTProductFeature ProductA Test IOT_BERTHA
    # Add registry and file features
    Add-IoTProductFeature ProductA Retail FILES_CONFIGS -OEM
    Add-IoTProductFeature ProductA Retail REGISTRY_SETTINGS -OEM
    # Add provisioning feature
    Add-IoTProductFeature ProductA Retail PROV_WIFISETTINGS -OEM
    # Add driver
    Add-IoTProductFeature ProductA Retail DRIVERS_HELLOBLINKY -OEM
    

정품 이미지 확인

사용자는 디바이스에 플래시된 이미지가 있는 디바이스를 켜기만 하면 Windows IoT Core에 대한 사용자 지정 테스트 이미지를 쉽게 확인할 수 있습니다. 디바이스가 실행되면 다양한 검사를 실행하여 디바이스가 실제로 작동하는지 확인할 수 있습니다. 이러한 테스트의 용이성은 이미지에 적용된 보안 요소의 수준에 따라 달라집니다. 테스트 이미지에 기본 제공되는 보안 프로토콜이 없으므로 사용 가능한 모든 개발 도구를 사용하여 IoT 디바이스를 테스트할 수 있습니다.

보안 프로토콜을 디바이스에 설치된 이미지의 일부로 포함할 수 있으므로 Windows IoT Core에 대한 사용자 지정 정품 이미지의 경우 테스트 작업이 더 어려워집니다. 이러한 보안 프로토콜의 특성으로 인해 사용 가능한 테스트 도구를 사용하여 디바이스를 확인하지 못할 수 있으므로 IoT 디바이스에서 실행할 수 있는 테스트 애플리케이션을 작성하는 것이 좋습니다. 그런 다음, 이 애플리케이션에서 IoT 디바이스의 다양한 영역과 기능에 대한 확인 테스트를 수행합니다.

Windows IoT Core에 대한 사용자 지정 정품 이미지 테스트는 다음 방법 중 하나로 수행할 수 있습니다.

깨끗한 정품 이미지

진정으로 깨끗한 정품 이미지를 원하는 경우 디바이스에 대해 두 개의 정품 이미지를 만들어야 합니다. 테스트 애플리케이션(포그라운드 애플리케이션으로 구성됨)이 하나의 이미지에 포함되고 다른 "깨끗한" 이미지에는 포함되지 않는다는 점을 제외하고는 이러한 두 이미지는 동일합니다. 테스트 애플리케이션이 포함된 첫 번째 이미지를 플래시하고 IoT 디바이스에서 테스트 유효성 검사를 수행합니다. 확인되면 배포를 위해 두 번째 "깨끗한" 정품 이미지를 사용하여 IoT 디바이스를 다시 플래시할 수 있습니다.

장점: 최종 정품 이미지는 완전히 깨끗하며 필요한 것으로 간주되는 항목만 이미지에 포함됩니다.

단점: 테스트 애플리케이션이 정품 이미지에 포함되면 프로비전 패키지와 관련된 몇 가지 잠재적인 문제 외에도 테스트 애플리케이션의 잠재적인 사용자 오류가 발생할 수 있습니다. 그러면 이 정품 이미지가 최종 정품 이미지와 달라집니다.

1회 통과 테스트

하나의 최종 정품 이미지만 만들어지고 테스트 애플리케이션도 포함됩니다. OOBE(첫 실행 경험) 애플리케이션이 시작되면 테스트 애플리케이션이 포그라운드 애플리케이션으로 시작되도록 이미지를 구성합니다. 테스트 애플리케이션 내의 조건문이 트리거되어 애플리케이션에서 이전에 한 번 실행되었음을 인식합니다(디바이스의 전원이 처음 켜진 후 실행되지 않도록 방지).

// Declare variable
Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
    
// Set variable as boolean, numbers, or string values as needed at approperiate location within the test app
localSettings.Values["appRanOnce"] = false;    

// Read variable and verify value to check and apply logic
Object value = localSettings.Values["appRanOnce"];

참고

최상의 결과를 위해 localSettings만 사용하여 설정 값을 저장할 변수를 저장합니다. roamingSettings 기능을 사용하면 바람직하지 않은 결과가 발생할 수 있습니다. localSettings는 이 문서의 작성 시점을 기준으로 64k의 데이터만 보유할 수 있습니다. 애플리케이션 설정에 대해 여기서 자세히 알아보세요.

위의 코드 블록을 사용하면 테스트 애플리케이션을 시작할 때 논리를 적용하여 후속 실행 시 애플리케이션에서 적절한 작업을 수행할 수 있습니다.

그렇다면 어떤 유형의 작업을 수행할 수 있을까요?

  • 다른 FGA 앱 시작
  • 레지스트리를 편집하여 부팅 시퀀스 수정

테스트 애플리케이션에서 다른 FGA 애플리케이션 시작

Microsoft Store 앱을 시작하는 경우 다음 코드 조각을 사용하여 Store를 통해 설치 및 업데이트된 앱을 시작할 수 있습니다. URI 체계에 대한 추가 정보는 여기서 확인할 수 있습니다.

// Following will launch the Microsoft store app and navigate to the Games section
bool result = await Windows.System.Launcher.LaunchUriAsync(new Uri
    ("ms-windows-store://navigatetopage/?Id=Games"));

// Following will launch the One Note app using the package family name (PFN)
bool result = await Windows.System.Launcher.LaunchUriAsync(new Uri
    ("ms-windows-store://pdp/?PFN= Microsoft.Office.OneNote_8wekyb3d8bbwe"));

사용자 지정(비 Microsoft Store) 앱을 시작하는 경우 AppServiceConnection을 사용하여 PFN(패키지 패밀리 이름)을 통해 앱을 시작할 수 있습니다.

먼저 최종 앱(com.concurrency.lwinsapp)을 시스템 내의 앱 서비스에 등록해야 합니다. 다음 코드 블록을 매니페스트의 <Applications> 섹션에 포함하도록 Package.appxmanifest file을 수정해야 합니다.

<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="AppServiceProvider.App">
      <Extensions>
        <uap:Extension Category="windows.appService" EntryPoint="MyAppService.AppLaunchService">
          <uap3:AppService Name="com.concurrency.lwinsapp" uap4:SupportsMultipleInstances="true" />
        </uap:Extension>
      </Extensions>
      ...
</Application>

다음 코드 세그먼트는 사용자 지정 애플리케이션을 시작합니다.

private AppServiceConnection appLaunchService;
...
this.appLaunchService = new AppServiceConnection();
this.appLaunchService.AppServiceName = "com.concurrency.lwinsapp";
this.appLaunchService.PackageFamilyName = "f3a114f7-e099-4773-8c93-77abcba14f62_004hcn5rxyy0y";
var status = await this.appLaunchService.OpenAsync();

localSettingsAppServiceConnection 사이의 논리를 결합하면 디바이스를 부팅할 때마다 테스트 애플리케이션을 무시할 수 있습니다. 기본적으로 테스트 애플리케이션은 부팅 시 최종 애플리케이션에 대한 "통과"를 제외하고는 부팅할 때마다 실행됩니다. 필요한 경우 테스트 애플리케이션에서 테스트가 실패하는 경우 디바이스가 최종 애플리케이션으로 계속 진행되지 않는 방식으로 논리를 설정할 수 있습니다. 이는 부팅할 때마다 디바이스가 완전히 테스트되고 작동하는지 확인해야 하는 경우에 유용할 수 있습니다.

장점: 부팅할 때마다 디바이스를 자동으로 테스트하여 특정 조건이 올바르게 설정되고 디바이스가 완전히 테스트되고 안전한지 확인할 수 있습니다.

단점: 테스트 애플리케이션이 정품 이미지에 포함됩니다. 애플리케이션에 보안 허점이 있을 수 있습니다. 필요에 따라 테스트 앱이 잠겨 있는지 확인하세요. 테스트 애플리케이션의 특성으로 인해 디바이스의 기능을 수정할 수 있습니다.

다음 단계