애플리케이션 매니페스트

애플리케이션 매니페스트는 애플리케이션에 필요한 애플리케이션 기능이라고도 하는 리소스를 설명합니다. 모든 애플리케이션에는 애플리케이션 매니페스트가 있습니다.

애플리케이션은 애플리케이션 매니페스트의 기능 섹션에 필요한 각 리소스를 나열하여 기능을 사용하도록 옵트인해야 합니다. 기본적으로 사용 가능한 기능은 없습니다. 애플리케이션이 나열되지 않은 기능을 요청하면 요청이 실패합니다. 애플리케이션 매니페스트 파일에 오류가 포함된 경우 애플리케이션을 테스트용으로 로드하려고 하면 실패합니다. 각 애플리케이션의 매니페스트는 PC에 있는 애플리케이션 폴더의 루트 디렉터리에 app_manifest.json으로 저장되어야 합니다.

Azure Sphere 템플릿은 애플리케이션을 만들 때 자동으로 기본 애플리케이션 매니페스트를 만듭니다. 애플리케이션에 필요한 기능을 나열하려면 기본 매니페스트를 편집해야 합니다. 각 Azure Sphere 샘플에는 애플리케이션 매니페스트도 포함됩니다. 애플리케이션을 샘플에 기반으로 하는 경우 매니페스트를 편집해야 할 수도 있습니다.

다른 Azure Sphere 디바이스는 다양한 방식으로 칩의 기능을 노출할 수 있습니다. 따라서 매니페스트에서 GPIO 핀과 같은 특정 기능을 식별하는 데 사용하는 값은 개발 중인 하드웨어에 따라 달라질 수 있습니다. 대상 하드웨어 종속성 관리 에서는 상위 수준 애플리케이션의 하드웨어 대상에 대한 자세한 정보를 제공합니다. 상위 수준 애플리케이션에 대한 애플리케이션 매니페스트에서 Microsoft Azure Sphere SDK 설치 디렉터리의 HardwareDefinitions 폴더에 있는 JSON 파일에 정의된 상수를 사용합니다. 설치 디렉터리의 정확한 위치는 Windows 및 Linux에서 다릅니다. RTApp(실시간 지원 애플리케이션)에서 애플리케이션 매니페스트의 콘텐츠에 나열된 원시 값을 사용합니다.

애플리케이션이 사이드로드되거나 디바이스에 배포되면 Azure Sphere 런타임은 애플리케이션 매니페스트를 읽고 애플리케이션에서 사용할 수 있는 기능을 확인합니다. 매니페스트에 나열되지 않은 리소스에 액세스하려고 하면 EPERM(권한 거부)과 같은 API 오류가 발생합니다. 디바이스의 애플리케이션 하나만 리소스를 사용할 수 있습니다. 이미 사용 중인 리소스를 요청하는 애플리케이션을 설치하면 시도가 실패합니다.

애플리케이션 매니페스트의 내용

애플리케이션 매니페스트에는 다음 항목이 포함됩니다.

이름 설명
SchemaVersion 사용 중인 애플리케이션 매니페스트 스키마의 버전입니다. 현재는 1이어야 합니다. 필수.
이름 애플리케이션의 이름입니다. 프로젝트를 만들 때 이 값은 프로젝트의 이름으로 설정됩니다. 이름은 길이일 수 있지만 처음 31자만 이미지 패키지에 저장됩니다. 따라서 이름이 이미지 패키지에 대한 문의에서 잘린 것처럼 보입니다. 필수.
ComponentId 구성 요소의 ID입니다. Visual Studio는 애플리케이션을 빌드할 때 이 ID를 만듭니다. Visual Studio를 사용하지 않는 경우 ID를 만드는 방법에 대한 자세한 내용은 구성 요소 ID 생성 을 참조하세요. 필수.
진입점 애플리케이션을 빌드할 때 생성되는 애플리케이션의 파일 시스템 이미지에 있는 상대 경로와 함께 실행 파일의 이름입니다. Visual Studio는 현재 이 값에 /bin/app을 사용합니다. 필수.
CmdArgs 시작할 때 애플리케이션에 전달할 인수입니다. 각 인수를 큰따옴표로 묶고 인수를 쉼표로 구분합니다. 선택적.
TargetBetaApis 애플리케이션에 베타 API가 필요하도록 지정하고 사용된 베타 API 집합을 식별합니다. 이 필드는 베타 API를 사용하여 애플리케이션을 빌드하는 경우 빌드 프로세스 중에 자동으로 추가됩니다. 선택적. 자세한 내용은 베타 기능 사용을 참조하세요.
ApplicationType 애플리케이션 유형입니다. 선택적. gdbserver에 대한 대체를 빌드하는 경우에만 디버거로 설정합니다.
기능 애플리케이션 리소스 요구 사항을 지정하는 키/값 쌍 목록입니다. 필수.
MallocVersion malloc 버전을 지정하는 정수입니다. 여기서 1=standard 및 2=mallocng은 1.2.1보다 큰 MUSL 버전에서 사용할 수 있는 향상된 malloc입니다. 버전 2는 모든 새 앱 개발에 권장됩니다.

기능 섹션에서는 다음을 지원합니다.

참고

상위 수준 애플리케이션은 하드웨어 정의 파일의 기능 값을 사용하거나 원시 값을 사용할 수 있습니다. 그러나 동일한 기능에서 두 값 형식을 혼합할 수는 없습니다. RTApps는 기능에 원시 값만 사용할 수 있습니다.

이름 설명
Adc 애플리케이션에서 사용하는 ADC(아날로그-디지털 변환) 컨트롤러입니다. 이 기능은 블록에 핀 0뿐만 아니라 전체 ADC 컨트롤러(8핀 블록으로 구성됨)를 예약합니다.
상위 수준 애플리케이션에서 하드웨어 정의 헤더 파일에 선언된 주변 장치 이름을 지정합니다.
RTApp에서 하드웨어 정의 JSON 파일에 선언된 AppManifestValue를 지정합니다.
하드웨어 정의 예제:"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
원시 값 예제:"Adc": [ "ADC-CONTROLLER-0" ]
API 참조:Applibs adc.h
개념:Azure Sphere에서 ADC 사용
AllowedApplicationConnections 애플리케이션이 연결할 수 있는 애플리케이션 구성 요소 ID 목록입니다.
예제:"AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
API 참조:Applibs application.h
개념:상위 수준 애플리케이션과 통신
AllowedConnections 애플리케이션이 연결할 수 있는 DNS 호스트 이름 또는 IP 주소(IPv4) 목록입니다. 애플리케이션이 Azure IoT Hub 사용하는 경우 목록에 허브의 IP 주소 또는 DNS 호스트 이름(일반적으로 hub-name.azure-devices.net)이 포함되어야 합니다. 이름 및 IP 주소의 포트 번호 및 와일드카드 문자는 허용되지 않습니다.
예제:"AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts 들어오는 TCP 트래픽을 허용하는 포트 목록입니다. 최대 10개의 포트를 포함할 수 있으며 각 포트는 개별적으로 나열되어야 합니다. 지원되는 포트는 1024~65535입니다. TCP와 UDP 모두에 대해 동일한 포트를 지정할 수 있습니다. 그러나 디바이스에서 둘 이상의 앱에 대해 동일한 포트를 지정하면 실행할 두 번째 앱이 로드되지 않습니다.
예제:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts 들어오는 UDP 트래픽을 허용하는 포트 목록입니다. 최대 10개의 포트를 포함할 수 있으며 각 포트는 개별적으로 나열되어야 합니다. 지원되는 포트는 1024~65535입니다. TCP와 UDP 모두에 대해 동일한 포트를 지정할 수 있습니다. 그러나 디바이스에서 둘 이상의 앱에 대해 동일한 포트를 지정하면 실행할 두 번째 앱이 로드되지 않습니다.
예제:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore 상위 수준 앱에 CertStore API를 사용하여 인증서를 관리할 수 있는 권한이 있는지 여부를 나타내는 부울: aPI를 사용하도록 설정하려면 true입니다. 그렇지 않으면 false입니다.
예제:"CertStore" : true
DeviceAuthentication 디바이스 인증에 사용할 Azure Sphere(레거시) 테넌트 UUID를 지정하는 문자열입니다.
예제:"DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService 애플리케이션에 DHCP 서비스를 구성할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"DhcpService" : true
API 참조:Applibs networking.h
개념:네트워크 서비스 사용
EnterpriseWifiConfig 상위 수준 애플리케이션에 EAP-TLS 네트워크를 만들고 인증서를 연결할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"EnterpriseWifiConfig" : true
ExternalInterrupt RTApp에서 사용하는 외부 인터럽트 목록입니다. 이 기능은 상위 수준 애플리케이션에서 사용할 수 없습니다.
예제:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio 애플리케이션에서 사용하는 GPIO 목록입니다.
상위 수준 애플리케이션에서 하드웨어 정의 헤더 파일에 선언된 GPIO 이름( 예: $MT 3620_RDB_LED1_RED)을 지정합니다.
RTApp에서 하드웨어 정의 JSON 파일의 GPIO 번호에 해당하는 정수를 지정합니다. 예를 들어 8 은 GPIO 8을 지정합니다.
하드웨어 정의 예제:"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
원시 값 예제:"Gpio": [ 8, 12 ]
API 참조:Applibs gpio.h
개념:Azure Sphere에서 GPIO 사용
HardwareAddressConfig 애플리케이션에 네트워크 인터페이스의 하드웨어 주소를 구성할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"HardwareAddressConfig" : true
API 참조:Applibs networking.h
개념:네트워크 서비스 사용
HeapMemStats 힙 메모리 할당 추적이 사용되는지 여부를 나타내는 부울: 애플리케이션에 기능이 있으면 true이고, 그렇지 않으면 false입니다.
예제:"HeapMemStats": true
개념:상위 수준 애플리케이션에서 메모리 사용
I2cMaster 애플리케이션에서 사용하는 I2C master 인터페이스 목록입니다.
상위 수준 애플리케이션에서 하드웨어 정의 헤더 파일에 선언된 주변 장치 이름을 지정합니다.
RTApp에서 하드웨어 정의 JSON 파일에 선언된 AppManifestValue 를 지정합니다.
하드웨어 정의 예제:"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
원시 값 예제:"I2cMaster": [ "ISU0", "ISU1" ]
API 참조:Applibs i2c.h
개념:Azure Sphere에서 I2C 사용
I2sSubordinate RTApp에서 사용하는 I2S(Inter-IC Sound) 하위 인터페이스입니다. 이 기능은 상위 수준 애플리케이션에서 사용할 수 없습니다. 원시 값 예제: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage 애플리케이션이 영구 스토리지를 사용할 수 있도록 하는 변경 가능한 스토리지 설정입니다.
예제:"MutableStorage" : { "SizeKB": 64, }
API 참조:Applibs storage.h
개념:Azure Sphere에서 스토리지 사용
NetworkConfig 애플리케이션에 네트워크 인터페이스를 구성할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"NetworkConfig" : true
API 참조:Applibs networking.h
개념:네트워크 서비스 사용
PowerControls 디바이스 전원 상태를 제어하는 세분화된 기능을 나타내는 문자열 배열입니다. ForcePowerDown 및 ForceReboot는 유일하게 지원되는 값입니다.
경고: ForcePowerDown 및 ForceReboot를 사용하면 애플리케이션이 모든 애플리케이션을 즉시 종료할 수 있으므로 디바이스가 여전히 운영 체제 및 애플리케이션 업데이트를 받을 수 있는지 확인해야 합니다 . 자세한 내용 및 지침은 Power Down 및 업데이트 강제 적용을 참조하세요.
예제:"PowerControls": ["ForcePowerDown", "ForceReboot"]
API 참조:Applibs powermanagement.h
개념:Azure Sphere 디바이스에 대한 전원 중단 상태 관리
Pwm 애플리케이션에서 사용하는 PWM(펄스 너비 변조기)입니다.
상위 수준 애플리케이션에서 하드웨어 정의 헤더 파일에 선언된 주변 장치 이름을 지정합니다.
RTApp에서 하드웨어 정의 JSON 파일에 선언된 AppManifestValue 를 지정합니다.
하드웨어 정의 예제:"Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
원시 값 예제:"Pwm": [ "PWM-CONTROLLER-0" ]
API 참조:Applibs pwm.h
개념:상위 수준 애플리케이션에서 PWM 사용
ReadNetworkProxyConfig 애플리케이션에 프록시 구성을 검색할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"ReadNetworkProxyConfig": true
API 참조:Applibs networking.h
개념:웹 서비스에 연결
SntpService 애플리케이션에 SNTP 서비스를 구성할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"SntpService" : true
API 참조:Applibs networking.h
개념:SNTP 서버
SoftwareUpdateDeferral 애플리케이션에 제한된 기간 동안 소프트웨어 업데이트를 연기할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"SoftwareUpdateDeferral" : true
API 참조:Applibs eventloop.H
개념:디바이스 업데이트 연기
SpiMaster 애플리케이션에서 사용하는 SPI master 인터페이스 목록입니다.
상위 수준 애플리케이션에서 하드웨어 정의 헤더 파일에 선언된 주변 장치 이름을 지정합니다.
RTApp에서 하드웨어 정의 JSON 파일에 선언된 AppManifestValue 를 지정합니다.
하드웨어 정의 예제:"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
원시 값 예제:"SpiMaster": [ "ISU0", "ISU1" ]
API 참조:Applibs spi.h
개념:Azure Sphere에서 SPI 사용
SystemEventNotifications 애플리케이션에 시스템 이벤트 알림을 받을 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"SystemEventNotifications" : true
API 참조:Applibs sysevent.h
개념:디바이스 업데이트 연기
Systemtime 애플리케이션에 시스템 시간을 구성할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"SystemTime" : true
API 참조:Applibs rtc.h
개념:Azure Sphere에서 시스템 시간 및 RTC 관리
TimeSyncConfig 애플리케이션에 시간 동기화 서비스를 구성할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"TimeSyncConfig" : true
Uart 애플리케이션에서 사용하는 UART 주변 장치 목록입니다. 이 기능은 MT3620 개발 보드에서 전용 UART를 사용하도록 설정하지 않습니다. 전용 UART에 대한 자세한 내용은 실시간 지원 애플리케이션 빌드를 참조하세요.
상위 수준 애플리케이션에서 하드웨어 정의 헤더 파일에 선언된 주변 장치 이름을 지정합니다.
RTApp에서 하드웨어 정의 JSON 파일에 선언된 AppManifestValue 를 지정합니다.
하드웨어 정의 예제:"Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
원시 값 예제:"Uart": [ "ISU0", "ISU1" ]
API 참조:Applibs uart.h
개념:Azure Sphere에서 UART 사용
WifiConfig 애플리케이션에 WifiConfig API를 사용하여 Wi-Fi 구성을 변경할 수 있는 권한이 있는지 여부를 나타내는 부울입니다. 애플리케이션에 기능이 있으면 true입니다. 그렇지 않으면 false입니다.
예제:"WifiConfig" : true
API 참조:Applibs wificonfig.h
개념:네트워킹 구성

MutableStorage 섹션에서는 다음을 지원합니다.

이름 설명
SizeKB 변경 가능한 스토리지의 크기를 키비바이트 단위로 지정하는 정수입니다. 최대값은 64입니다. 값 0은 변경 가능한 스토리지 기능이 없는 것과 같습니다.

예제

다음은 MT3620 RDB 하드웨어를 대상으로 하는 상위 수준 애플리케이션에 대한 샘플 app_manifest.json 파일을 보여 줍니다.

{
    "SchemaVersion": 1,
    "Name": "MyTestApp",
    "ComponentId": "072c9364-61d4-4303-86e0-b0f883c7ada2",
    "EntryPoint": "/bin/app",
    "CmdArgs": ["-m", "262144", "-t", "1"],
    "Capabilities": {
        "AllowedConnections" : [
            "my-hub.example.net",
            "contoso.azure-devices.net",
            "global.azure-devices-provisioning.net" ],
        "AllowedTcpServerPorts": [ 1024, 65535 ],
        "AllowedUdpServerPorts": [ 1024, 50000 ],
        "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0",
        "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ],
        "HardwareAddressConfig": true,
        "I2cMaster": [ "ISU2" ],
        "MutableStorage" : {
            "SizeKB": 64,
        },
        "SpiMaster": [ "ISU1" ],
        "SystemTime" : true,
        "Uart": [ "ISU0" ],
        "WifiConfig" : true
    },
    "ApplicationType": "Default",
    "MallocVersion": 2
}

MyTestApp에 대한 샘플 app_manifest.json 파일은 다음을 수행합니다.

  • 앱에 네 개의 명령줄 인수를 전달합니다.
  • DNS 호스트 my-hub.example.net, contoso.azure-devices.net 및 global.azure-devices-provisioning.net 대한 연결만 허용합니다.
  • 포트 1024 및 65535에서 들어오는 TCP 트래픽을 허용합니다.
  • 포트 1024 및 50000에서 들어오는 UDP 트래픽을 허용합니다.
  • 디바이스 인증에 사용할 Azure Sphere(레거시) 테넌트 UUID를 지정하고 Device Provisioning Service에 대한 연결을 허용합니다.
  • 3개의 GPIO 사용을 지정합니다.
  • 애플리케이션에서 네트워크 인터페이스의 하드웨어 주소를 구성할 수 있습니다.
  • 하나의 UART 주변 장치를 사용하도록 지정합니다.
  • 64키바이트의 스토리지 공간을 사용하여 변경 가능한 스토리지를 사용하도록 설정합니다.
  • 앱이 WifiConfig API를 사용하여 Wi-Fi 구성을 변경할 수 있도록 합니다.
  • 하나의 SPI master 인터페이스의 사용을 지정합니다.
  • 하나의 I2C master 인터페이스의 사용을 지정합니다.
  • 앱이 RTC API를 사용하여 시스템 시간을 구성할 수 있도록 합니다.
  • 앱 개발을 위해 mallocng을 사용하도록 설정합니다.