Azure Sphere アプリケーションの概要
Azure Sphere デバイスでは、次の 2 種類のアプリケーションを実行できます。
- Azure Sphere OS でコンテナー化された高レベルのアプリケーションを実行する
- リアルタイム対応アプリケーション (RTApps) はベア メタル上で実行されるか、リアルタイム コア上でリアルタイム オペレーティング システム (RTOS) で実行されます
すべての Azure Sphere デバイスには、高度なアプリケーションが必要です。RTApps は省略可能です。
高度なアプリケーション
すべての Azure Sphere デバイスには、Azure Sphere OS 上で実行され、アプリケーション ライブラリを使用できる高度なアプリケーションがあります。 高度なアプリケーションでは、次のことができます。
汎用入出力 (GPIO) ピン、ユニバーサル非同期レシーバー/トランスミッタ (UART)、その他のインターフェイスなど、Azure Sphere 周辺機器を構成して操作する
RTApps との通信
インターネットおよびクラウドベースのサービスとの通信
証明書ベースの認証を介した他のデバイスやサービスとのブローカーの信頼関係
「 Azure Sphere とは」で説明されているように、高レベルのアプリケーションは Normal World ユーザー モードでコンテナーで実行されます。 アプリケーション コンテナーは、POSIX 環境のサブセットと、Azure Sphere OS に固有のアプリケーション ライブラリ (Applibs) のセットをサポートします。 高度なアプリケーションで使用できるライブラリと関数は、プラットフォームがセキュリティで保護され、簡単に更新できるように制限されています。 アプリケーションは、Microsoft が提供するライブラリとランタイム サービスにのみアクセスできます。他の制約の中でも、直接ファイル入出力もシェル・アクセスも使用できません。 開発環境 では、基本 API セットについて説明し、デバイス固有の機能をサポートする Azure Sphere アプリケーション ライブラリについて説明します。
高度なアプリケーションは継続的に実行されることが予想され、停止または失敗した場合は自動的に再起動されます。
高度なアプリケーションを作成 すると、機能に関する詳細情報が提供されます。
リアルタイム対応アプリケーション
Azure Sphere デバイスには、高度なアプリケーションに加えて、1 つ以上のリアルタイム対応アプリケーションが含まれる場合もあります。 RTApp では、次のことができます。
- GPIO ピンや UART など、Azure Sphere MCU に統合された周辺機器を構成して操作する
- 高度なアプリケーションとの通信
RTApps はベア メタルまたはリアルタイム オペレーティング システム (RTOS) で実行できます。 GitHub の Azure Sphere サンプル リポジトリには、ベアメタル HelloWorld サンプル と、高レベルと RTApps の間のコア間通信 を示すサンプルが含まれています。 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 を使用して手動でサイドロードすることもできます。
クラウド更新プログラム。Azure Sphere Security Service によってのみ実行できます。 Azure CLI を使用して、クラウド デプロイを作成および管理します。
パートナー アプリケーション
連携するアプリケーションは 、パートナー アプリケーション と見なして、個別にサイドロードできます。 パートナーが存在するアプリケーションをサイドロードすると、パートナー アプリケーションが既にデプロイされている場合、パートナー アプリケーションは Azure Sphere デバイスに残ります。 各アプリケーションは、プロジェクト構成でパートナーの一覧を宣言します。
CMake プロジェクト構成にパートナーを追加するには、launch.vs.json または .vscode/launch.json ファイルの configurations セクションの partnerComponents フィールドにパートナー アプリのコンポーネント ID を指定します。
"partnerComponents": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]
相互に通信する高度なアプリと RTApps は、パートナーとして識別する必要があります。 Azure Sphere では、上位レベルのアプリのペアまたは RTApps のペア間の通信はサポートされていません。