Azure Sphereデバイスは、次の 2 種類のアプリケーションを実行できます。
- 高度なアプリケーション Azure Sphere OS でコンテナー化された実行
- リアルタイム対応アプリケーション (RTApps) はベア メタル上で実行されるか、リアルタイム コア上でリアルタイム オペレーティング システム (RTOS) を使用して実行されます
すべてのAzure Sphereデバイスには高度なアプリケーションが必要です。RTApps は省略可能です。
高度なアプリケーション
すべてのAzure Sphereデバイスには、Azure Sphere OS 上で実行され、アプリケーション ライブラリを使用できる高度なアプリケーションがあります。 高度なアプリケーションでは、次のことができます。
汎用入出力 (GPIO) ピン、ユニバーサル非同期レシーバー/トランスミッタ (UART)、その他のインターフェイスなど、Azure Sphere の周辺機器を構成して操作する
RTApps との通信
インターネットおよびクラウドベースのサービスと通信する
証明書ベースの認証による他のデバイスおよびサービスとのブローカーの信頼関係
What is Azure Sphere? で説明されているように、高レベルのアプリケーションは Normal World のユーザー モードでコンテナー内で実行されます。 アプリケーション コンテナーは、POSIX 環境のサブセットと、Azure Sphere OS に固有のアプリケーション ライブラリ (Applibs) のセットをサポートします。 高度なアプリケーションで使用できるライブラリと関数は、プラットフォームがセキュリティで保護され、簡単に更新できるように制限されています。 アプリケーションは、Microsoftが提供するライブラリとランタイム サービスにのみアクセスできます。他の制約の中でも、直接ファイル I/O やシェル アクセスは使用できません。 開発環境では、基本 API セットについて説明し、デバイス固有の機能をサポートするAzure Sphere アプリケーション ライブラリについて説明します。
高度なアプリケーションは継続的に実行されることが予想され、停止または失敗した場合は自動的に再起動されます。
高度なアプリケーションを作成 すると、機能に関する詳細情報が提供されます。
リアルタイム対応アプリケーション
Azure Sphere デバイスには、高度なアプリケーションに加えて、1 つ以上のリアルタイム対応アプリケーションが含まれる場合もあります。 RTApp は次のことができます。
- Azure Sphere MCU に統合された周辺機器 (GPIO ピンや UART など) を構成して操作する
- 高度なアプリケーションとの通信
RTApps は、ベア メタルまたはリアルタイム オペレーティング システム (RTOS) で実行できます。 GitHubの Azure Sphere サンプル リポジトリには、ベアメタル HelloWorld サンプルと、高レベルと RTApp の間の inter-core 通信を示すサンプルが含まれています。 GitHubの Azure Samples リポジトリには、Azure RTOS でAzure Sphereを使用する方法
MT3620 チップ上の M4 リアルタイム コアをターゲットとする RTApps 用の追加のドライバーとサンプルは、Azure Sphere パートナーの MediaTek および Codethink からGitHubで入手できます。
各 RTApp は、特定の I/O コアで分離されて実行され、高度なアプリケーションとのみ通信できます。インターネット、Azure Sphere applibs、またはAzure Sphere OS のその他の機能を使用することはできません。
リアルタイム対応アプリケーションを作成 すると、RTApps の機能と開発プロセスに関する詳細情報が提供されます。
すべてのアプリケーションに共通の機能
高度なアプリと RTApps の間には大きな違いがありますが、すべてのAzure Sphereアプリケーションには共通点がいくつかあります。 Visual StudioまたはVisual Studio Codeを使用するか、CLI を使用して CMake と Ninja を呼び出すことで、両方の種類のアプリケーションを開発、ビルド、デバッグできます。
さらに、次のセキュリティ機能は、高レベルと RTApp の両方に適用されます。
アプリケーション機能
実行場所に関係なく、すべてのAzure Sphere アプリケーションは、承認されていない使用や予期しない使用を防ぐために、必要な外部サービスとインターフェイス (I/O やネットワークの要件など) を指定する必要があります。
アプリケーション機能 は、アプリケーションに必要なリソースです。 アプリケーション機能には、アプリケーションが使用する周辺機器、高度なアプリケーションが接続するインターネット ホスト、ネットワーク構成を変更するアクセス許可などがあります。 すべてのアプリケーションには、これらのリソースを識別する アプリケーション マニフェスト が必要です。
デバイスの機能
デバイス機能により、デバイス固有のアクティビティが有効になります。 デバイス機能は、Azure Sphere Security Service によって付与されます。 既定では、Azure Sphere チップにはデバイス機能がありません。 デバイス機能には、 appDevelopment デバイス機能と fieldServicing デバイス機能の 2 種類があります。
appDevelopment デバイス機能は、デバイスが信頼する署名の種類を変更します。 既定では、Azure Sphere デバイスは運用環境で署名されたイメージ パッケージを信頼しますが、SDK で署名されたイメージ パッケージは信頼しません。 その結果、SDK で署名されたイメージ パッケージを、この機能を持たないAzure Sphere デバイスにサイドロードすることはできません。 ただし、appDevelopment 機能が存在する場合、デバイスは SDK で署名されたイメージ パッケージを信頼します。 さらに、デバイスからアプリケーションを起動、停止、デバッグ、または削除できます。 要約すると、次の作業を行うには、アプリケーション開発機能がデバイス上に存在している必要があります。
- Visual Studioまたは azsphere image-package コマンドによってビルドされたイメージ パッケージをサイドロードします。
- イメージ パッケージの署名方法に関係なく、Azure Sphere デバイスからイメージ パッケージを開始、停止、デバッグ、または削除します。
az sphere device enable-development コマンドは、appDevelopment 機能を作成して適用し、デバイスがクラウド アプリケーションの更新プログラムを受信できないようにします。
fieldServicing 機能を使用すると、DeviceComplete 製造状態のデバイスでデバイス間通信を行うことができます。 この機能を使用すると、実稼働署名付きイメージをサイドロードできますが、削除することはできません。 アプリケーションの起動と停止はできますが、デバッグすることはできません。 Wi-Fi の構成などの日常的なメンテナンス タスクを実行することもできます。 これは、 サービス セッション中の短期的な使用を目的としており、デバイスへのアクセスが操作ごとに許可される限られた期間です。
署名と展開の要件
Azure Sphere デバイスに展開されているすべてのイメージ パッケージに署名する必要があります。 Azure Sphere SDK と az sphere image-package コマンドは、SDK 署名キーを使用してテスト用のイメージ パッケージに署名します。 Azure Sphereデバイスは、appDevelopment デバイス機能も存在する場合にのみ、このキーを信頼します。
Azure Sphere Security Service の運用環境では、クラウドにアップロードするときにイメージ パッケージに署名します。 実稼働署名付きイメージ パッケージは、サイドロードまたはクラウドから読み込むことができます。
不正なソフトウェアのインストールを防ぐために、アプリケーションは次の 2 つの方法でAzure Sphere デバイスに読み込むことができます。
サイドローディング。ソフトウェア開発とテスト、およびデバイスのフィールド サービスの両方に使用できます。 ソフトウェア開発とテスト用のサイドローディングには、appDevelopment デバイス機能が必要です。 現場保守用のサイドローディングには、fieldServicing デバイス機能と製品署名されたイメージ パッケージが必要です。 Visual StudioとVisual Studio Codeの両方で、開発およびデバッグ中にアプリケーションをサイドロードします。Azure CLIを使用して手動でサイドロードすることもできます。
Cloud update。Azure Sphere Security Service でのみ実行できます。 Azure CLIを使用して、クラウド デプロイを作成および管理します。
パートナー アプリケーション
連携するアプリケーションは 、パートナー アプリケーション と見なされ、個別にサイドロードできます。 パートナーが存在するアプリケーションをサイドロードする場合、パートナー アプリケーションは既に展開されている場合、Azure Sphere デバイス上に残ります。 各アプリケーションは、プロジェクト構成でパートナーの一覧を宣言します。
CMake プロジェクト構成にパートナーを追加するには、launch.vs.json または .vscode/launch.json ファイルの configurations セクションの partnerComponents フィールドにパートナー アプリのコンポーネント ID を指定します。
"partnerComponents": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]
相互に通信する高度なアプリと RTApp は、パートナーとして識別する必要があります。 Azure Sphereは、上位レベルのアプリのペアまたは RTApps のペア間の通信をサポートしていません。