アプリケーション マニフェスト
アプリケーション マニフェストには、アプリケーションで必要なリソース ("アプリケーション機能" とも呼ばれます) が記述されています。 すべてのアプリケーションには、アプリケーション マニフェストがあります。
アプリケーションでは、アプリケーション マニフェストの Capabilities セクションに必要な各リソースを列記することで、機能の使用をオプトインする必要があります。既定で有効になる機能はありません。 リストに含まれない機能をアプリケーションで要求すると、要求は失敗します。 アプリケーション マニフェスト ファイルにエラーが含まれている場合、アプリケーションのサイドロードの試行は失敗します。 各アプリケーションのマニフェストは、app_manifest.json として、PC 上のアプリケーション フォルダーのルート ディレクトリに格納される必要があります。
アプリケーションの作成時に、Azure Sphere テンプレートによって既定のアプリケーション マニフェストが自動的に作成されます。 既定のマニフェストを編集して、アプリケーションに必要な機能を列記する必要があります。 各 Azure Sphere サンプルには、アプリケーション マニフェストも含まれています。 サンプルに基づいてアプリケーションを作成する場合は、マニフェストも編集する必要があります。
Azure Sphere デバイスによって、チップの機能の公開方法が異なる可能性があります。 その結果、マニフェストで特定の機能 (GPIO ピンなど) を識別するために使用する値は、開発のターゲットとするハードウェアによって異なる場合があります。 「ターゲット ハードウェアの依存関係の管理」には、高度なアプリケーションのハードウェア ターゲットに関する詳細情報が記載されています。 高度なアプリケーションのアプリケーション マニフェストで Microsoft Azure Sphere SDK インストール ディレクトリの HardwareDefinitions フォルダーにある JSON ファイルで定義されている定数を使用します。 インストール ディレクトリの正確な場所は、Windows と Linux で異なります。 リアルタイム対応アプリケーション (RTApp) では、「アプリケーション マニフェストの内容」に記載されている生の値を使用します。
どのアプリケーションでも、デバイスにサイドローディングまたは展開するときは、Azure Sphere ランタイムはアプリケーション マニフェストを読み取って、アプリケーションが使用を許可されている機能を確認します。 マニフェストに列記されていないリソースにアクセスしようとすると、EPERM (アクセス許可が拒否されました) などの API エラーが発生します。 リソースを使用できるのは、デバイス上の 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 に代わるものをビルドしている場合にのみ、Debugger に設定します。 |
Capabilities | アプリケーション リソースの要件を指定するキー/値ペアのリスト。 必須。 |
MallocVersion | malloc のバージョンを指定する整数。1=standard と 2=mallocng。1.2.1 より大きい MUSL バージョンで使用できる拡張 malloc。 すべての新しいアプリ開発には、バージョン 2 をお勧めします。 |
Capabilities セクションでは次のものがサポートされます。
Note
高度なアプリケーションでは、ハードウェア定義ファイルの機能値を使用することも、生の値を使用することもできます。 ただし、同じ機能に両方の値の種類を混在させることはできません。 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 概念: 高度なアプリケーションを使用したCommunicate |
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 サービスを構成するアクセス許可を持っているかどうかを示すブール値: アプリケーションが機能を持っている場合は true。それ以外の場合は false。 例: "DhcpService" : true API リファレンス: Applibs networking.h 概念: ネットワーク サービスを使用する |
EnterpriseWifiConfig | 高度なアプリケーションが EAP-TLS ネットワークを作成し、証明書を関連付けるアクセス許可を持っているかどうかを示すブール値: アプリケーションに機能がある場合は true。それ以外の場合は false。 例: "EnterpriseWifiConfig" : true |
ExternalInterrupt | RTApp が使用する外部割り込みの一覧。 この機能は、高度なアプリケーションでは使用できません。 例: "ExternalInterrupt": [ "EINT4", "EINT12" ] |
Gpio | アプリケーションが使用する GPIO のリスト。 高度なアプリケーションでは、$MT3620_RDB_LED1_RED など、ハードウェア定義ヘッダー ファイルで宣言されている GPIO 名を指定します。 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 概念:高度なアプリケーションでのMemory の使用 |
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 によって使用される Inter-IC Sound (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 | 限られた期間のソフトウェア更新プログラムを延期するアクセス許可をアプリケーションに持っているかどうかを示すブール値: アプリケーションに機能がある場合は true。それ以外の場合は false。 例: "SoftwareUpdateDeferral" : true API リファレンス: Applibs eventloop.h 概念: Defer デバイスの更新 |
SpiMaster | アプリケーションで使用される SPI マスター インターフェイスのリスト。 高度なアプリケーションでは、ハードウェア定義ヘッダー ファイルで宣言されている周辺機器名を指定します。 RTApp で、ハードウェア定義の JSON ファイルで宣言されている AppManifestValue を指定します。 ハードウェア定義の例: "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ] 生の値の例: "SpiMaster": [ "ISU0", "ISU1" ] API リファレンス: Applibs spi.h 概念: Spi と Azure Sphere の使用 |
SystemEventNotifications | アプリケーションがシステム イベント通知を受信するアクセス許可を持っているかどうかを示すブール値: アプリケーションが機能を持っている場合は true。それ以外の場合は false。 例: "SystemEventNotifications" : true API リファレンス: Applibs sysevent.h 概念: Defer デバイスの更新 |
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 | アプリケーションが Wi-Fi 構成を変更するために WifiConfig API を使用するアクセス許可を持っているかどうかを示すブール値: アプリケーションに機能がある場合は 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 用の sample app_manifest.json ファイルでは、以下が行われます。
- 4 つのコマンドライン引数をアプリに渡します。
- my-hub.example.net、contoso.azure-devices.net、および global.azure-devices-provisioning.net をホストしている DNS への接続のみを許可します。
- ポート 1024 とポート 65535 上での受信 TCP トラフィックを許可します。
- ポート 1024 とポート 50000 上での受信 UDP トラフィックを許可します。
- デバイス認証に使用する Azure Sphere (レガシ) テナント UUID を指定し、Device Provisioning Service への接続を許可します。
- 3 つの GPIO の使用を指定します。
- アプリケーションがネットワーク インターフェイスのハードウェア アドレスを構成できるようにします。
- 1 つの UART 周辺機器の使用を指定します。
- ストレージ スペースの 64 キビバイトを変更可能なストレージとして有効にします。
- アプリで WifiConfig API を使用して Wi-Fi 構成を変更できるようにします。
- 1 つの SPI マスター インターフェイスの使用を指定します。
- 1 つの I2C マスター インターフェイスの使用を指定します。
- RTC API を使用して、アプリがシステム時刻を構成できるようにします。
- アプリ開発用の mallocng を有効にします。