アプリケーション マニフェスト

アプリケーション マニフェストには、アプリケーションに必要なリソース ( アプリケーション機能とも呼ばれます) が記述されています。 すべてのアプリケーションには、アプリケーション マニフェストがあります。

アプリケーションは、アプリケーション マニフェストの [機能] セクションに必要な各リソースを一覧表示することで 機能の使用をオプトインする必要があります。機能は既定では有効になっていません。 アプリケーションが一覧にない機能を要求すると、要求は失敗します。 アプリケーション マニフェスト ファイルにエラーが含まれている場合、アプリケーションのサイドロードは失敗します。 各アプリケーションのマニフェストは、PC 上のアプリケーション フォルダーのルート ディレクトリに app_manifest.json として格納する必要があります。

Azure Sphere テンプレートは、アプリケーションの作成時に既定のアプリケーション マニフェストを自動的に作成します。 アプリケーションで必要な機能を一覧表示するには、既定のマニフェストを編集する必要があります。 各 Azure Sphere サンプルには、アプリケーション マニフェストも含まれています。 サンプルに基づいてアプリケーションを作成する場合は、マニフェストも編集する必要があります。

Azure Sphere デバイスによって、チップの機能が異なる方法で公開される場合があります。 その結果、マニフェストで GPIO ピンなどの特定の機能を識別するために使用する値は、開発対象のハードウェアによって異なる場合があります。 ターゲット ハードウェアの依存関係を管理 すると、上位レベルのアプリケーションのハードウェア ターゲットに関する詳細情報が提供されます。 高度なアプリケーションのアプリケーション マニフェストで、Microsoft Azure Sphere SDK インストール ディレクトリの HardwareDefinitions フォルダーの JSON ファイルで定義されている定数を使用します。 インストール ディレクトリの正確な場所は、Windows と Linux で異なります。 リアルタイム対応アプリケーション (RTApp) では、 アプリケーション マニフェストのコンテンツに記載されている生の値を使用します。

任意のアプリケーションがデバイスにサイドロードまたはデプロイされると、Azure Sphere ランタイムはアプリケーション マニフェストを読み取り、アプリケーションが使用できる機能を確認します。 マニフェストに一覧表示されていないリソースにアクセスしようとすると、EPERM (アクセス許可が拒否) などの API エラーが発生します。 1 つのリソースを使用できるのは、デバイス上の 1 つのアプリケーションだけです。 既に使用されているリソースを要求するアプリケーションをインストールすると、試行は失敗します。

アプリケーション マニフェストの内容

アプリケーション マニフェストには、次の項目が含まれています。

名前 説明
SchemaVersion 使用中のアプリケーション マニフェスト スキーマのバージョン。 現在は 1 である必要があります。 必須。
名前 アプリケーションの名前。 プロジェクトの作成時に、この値はプロジェクトの名前に設定されます。 名前は任意の長さにできますが、イメージ パッケージには最初の 31 文字のみが格納されます。したがって、イメージ パッケージに関する問い合わせで名前が切り捨てられたように見えます。 必須。
ComponentId コンポーネントの ID。 Visual Studio では、アプリケーションをビルドするときにこの ID が作成されます。 Visual Studio を使用しない場合は、ID の作成に関する情報については、「 コンポーネント ID の生成 」を参照してください。 必須。
Entrypoint アプリケーションのビルド時に作成される、アプリケーションのファイル システム イメージ内の相対パスと共に実行可能ファイルの名前。 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 の両方に同じポートを指定できます。 ただし、デバイス上の複数のアプリに同じポートを指定した場合、実行する 2 番目のアプリは読み込みに失敗します。
例:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts 受信 UDP トラフィックを許可するポートの一覧。 最大 10 個のポートを含めることができます。各ポートは個別に一覧表示する必要があります。 サポートされているポートは 1024 から 65535 です。 TCP と UDP の両方に同じポートを指定できます。 ただし、デバイス上の複数のアプリに同じポートを指定した場合、実行する 2 番目のアプリは読み込みに失敗します。
例:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore CertStore API を使用して証明書を管理するためのアクセス許可を高レベル アプリに付与するかどうかを示すブール値: API を有効にするには true。それ以外の場合は false。
例:"CertStore" : true
DeviceAuthentication デバイス認証に使用する Azure Sphere (レガシ) テナントの UUID を指定する文字列。
例:"DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService アプリケーションに DHCP サービスを構成するアクセス許可があるかどうかを示すブール型 (Boolean) の値: アプリケーションに機能がある場合は true。それ以外の場合は false。
例:"DhcpService" : true
API リファレンス:Applibs networking.h
概念:ネットワーク サービスを使用する
EnterpriseWifiConfig EAP-TLS ネットワークを作成し、証明書を関連付けるアクセス許可を高レベルのアプリケーションに付与するかどうかを示すブール型 (Boolean): アプリケーションに機能がある場合は true。それ以外の場合は false。
例:"EnterpriseWifiConfig" : true
ExternalInterrupt RTApp で使用される外部割り込みの一覧。 この機能は、高度なアプリケーションでは使用できません。
例:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio アプリケーションで使用される GPO の一覧。
大まかなアプリケーションでは、ハードウェア定義ヘッダー ファイルで宣言されている 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 での GPO の使用
HardwareAddressConfig アプリケーションがネットワーク インターフェイスのハードウェア アドレスを構成するアクセス許可を持っているかどうかを示すブール型 (Boolean): アプリケーションに機能がある場合は true。それ以外の場合は false。
例:"HardwareAddressConfig" : true
API リファレンス:Applibs networking.h
概念:ネットワーク サービスを使用する
HeapMemStats ヒープ メモリ割り当て追跡が有効かどうかを示すブール値: アプリケーションに機能がある場合は true。それ以外の場合は false。
例:"HeapMemStats": true
概念:高レベル のアプリケーションでのメモリの使用
I2cMaster アプリケーションで使用される I2C マスター インターフェイスの一覧。
大まかなアプリケーションでは、ハードウェア定義ヘッダー ファイルで宣言されている周辺機器名を指定します。
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 で使用される IC 間サウンド (I2S) の下位インターフェイス。 この機能は、高度なアプリケーションでは使用できません。 未加工の値の例: "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 を使用すると、アプリケーションはすべてのアプリケーションを直ちに終了できるため、デバイスがオペレーティング システムとアプリケーションの更新プログラムを引き続き受信できることを確認する 必要があります 。 詳細とガイダンスについては、「 強制的に電源を切って更新する」を参照してください。
例:"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
概念:Web サービスに接続する
SntpService SNTP サービスを構成するためのアクセス許可をアプリケーションに持っているかどうかを示すブール値: アプリケーションに機能がある場合は true。それ以外の場合は false。
例:"SntpService" : true
API リファレンス:Applibs networking.h
概念:SNTP サーバー
SoftwareUpdateDeferral アプリケーションがソフトウェア更新プログラムを一定期間延期する権限を持っているかどうかを示すブール型 (Boolean): アプリケーションに機能がある場合は true。それ以外の場合は false。
例:"SoftwareUpdateDeferral" : true
API リファレンス:Applibs eventloop。H
概念:デバイスの更新プログラムを延期する
SpiMaster アプリケーションで使用される SPI マスター インターフェイスの一覧。
大まかなアプリケーションでは、ハードウェア定義ヘッダー ファイルで宣言されている周辺機器名を指定します。
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 システム イベント通知を受け取るアクセス許可をアプリケーションに持っているかどうかを示すブール型 (Boolean): アプリケーションに機能がある場合は true。それ以外の場合は false。
例:"SystemEventNotifications" : true
API リファレンス:Applibs sysevent.h
概念:デバイスの更新プログラムを延期する
SystemTime システム時刻を構成するためのアクセス許可をアプリケーションに持っているかどうかを示すブール型 (Boolean): アプリケーションに機能がある場合は true。それ以外の場合は false。
例:"SystemTime" : true
API リファレンス:Applibs rtc.h
概念:システム時刻と Azure Sphere 上の RTC を管理する
TimeSyncConfig アプリケーションに時間同期サービスを構成するアクセス許可があるかどうかを示すブール型 (Boolean) の値: アプリケーションに機能がある場合は 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 構成を変更するアクセス許可をアプリケーションに付与するかどうかを示すブール型 (Boolean): アプリケーションに機能がある場合は 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 ファイルでは、次の処理が行われます。

  • 4 つのコマンド ライン引数をアプリに渡します。
  • 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 つの GPO の使用を指定します。
  • アプリケーションがネットワーク インターフェイスのハードウェア アドレスを構成できるようにします。
  • UART 周辺機器の 1 つの使用を指定します。
  • 64 kibibytes のストレージ領域で変更可能なストレージを有効にします。
  • アプリで WifiConfig API を使用して、Wi-Fi 構成を変更できるようにします。
  • 1 つの SPI マスター インターフェイスの使用を指定します。
  • 1 つの I2C マスター インターフェイスの使用を指定します。
  • RTC API を使用して、アプリでシステム時刻を構成できるようにします。
  • アプリ開発用に mallocng を有効にします。