IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アマゾン テクノロジーズ インコーポレイテッドの特許一覧

特許7090152デバイス設計のためのコードモジュール選択
<>
  • 特許-デバイス設計のためのコードモジュール選択 図1A
  • 特許-デバイス設計のためのコードモジュール選択 図1B
  • 特許-デバイス設計のためのコードモジュール選択 図2
  • 特許-デバイス設計のためのコードモジュール選択 図3
  • 特許-デバイス設計のためのコードモジュール選択 図4
  • 特許-デバイス設計のためのコードモジュール選択 図5
  • 特許-デバイス設計のためのコードモジュール選択 図6
  • 特許-デバイス設計のためのコードモジュール選択 図7
  • 特許-デバイス設計のためのコードモジュール選択 図8
  • 特許-デバイス設計のためのコードモジュール選択 図9
  • 特許-デバイス設計のためのコードモジュール選択 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-15
(45)【発行日】2022-06-23
(54)【発明の名称】デバイス設計のためのコードモジュール選択
(51)【国際特許分類】
   G06F 8/36 20180101AFI20220616BHJP
   G06F 8/33 20180101ALI20220616BHJP
   G06F 8/30 20180101ALI20220616BHJP
【FI】
G06F8/36
G06F8/33
G06F8/30
【請求項の数】 15
(21)【出願番号】P 2020523433
(86)(22)【出願日】2018-11-05
(65)【公表番号】
(43)【公表日】2021-01-07
(86)【国際出願番号】 US2018059262
(87)【国際公開番号】W WO2019094340
(87)【国際公開日】2019-05-16
【審査請求日】2020-04-24
(31)【優先権主張番号】15/805,875
(32)【優先日】2017-11-07
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506329306
【氏名又は名称】アマゾン テクノロジーズ インコーポレイテッド
(74)【代理人】
【識別番号】100106541
【弁理士】
【氏名又は名称】伊藤 信和
(72)【発明者】
【氏名】ヤング リチャード デイヴィッド
(72)【発明者】
【氏名】クリシュナムージー シャム
(72)【発明者】
【氏名】コクラン ロバート ピー
(72)【発明者】
【氏名】バリー リチャード
【審査官】石川 亮
(56)【参考文献】
【文献】米国特許出願公開第2002/0188434(US,A1)
【文献】特開2014-229321(JP,A)
【文献】米国特許出願公開第2014/0068551(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/38
(57)【特許請求の範囲】
【請求項1】
1つまたは複数のプロセッサによって実行される命令が具現化されている非一時的な機械可読記憶媒体であって、前記命令は、
サービスプロバイダ環境において動作するデバイス構成サービスから、デバイスを設計する時に利用可能なハードウェアコンポーネントのリストを提供することと、
前記ハードウェアコンポーネントのリストからハードウェアコンポーネントの選択を受信することと、
前記デバイスのユースケースを定義するデバイス機能定義を受信することと、
選択されたハードウェアコンポーネントと互換性があるコードモジュールのリストを提供することであって、前記コードモジュールのリストは前記デバイスの前記ユースケースに基づいてフィルタリングされる、前記コードモジュールのリストを提供することと、
前記コードモジュールのリストからコードモジュールの選択を受信することであって、前記コードモジュールの選択は、前記ハードウェアコンポーネントのリストから選択される前記ハードウェアコンポーネントを前記デバイスにおいて動作できるようにする、前記コードモジュールの選択を受信することと、
前記デバイスを設計するために前記コードモジュールの選択を提供することと、
を含む、前記非一時的な機械可読記憶媒体。
【請求項2】
前記デバイスの前記ユースケースに部分的に基づいて前記コードモジュールに対する構成パラメータのセットを識別することと、
前記構成パラメータのセットに前記コードモジュールの選択を提供することと、
をさらに含む、請求項1に記載の非一時的な機械可読記憶媒体。
【請求項3】
前記デバイスでの使用のために前記コードモジュールを自動的に選択する従属関係ツリーを生成することをさらに含む、請求項1に記載の非一時的な機械可読記憶媒体。
【請求項4】
制約されたハードウェア機能を有するデバイスを設計する際に使用されるハードウェア仕様を受信することと、
前記デバイスのデバイス構成を受信することであって、前記デバイス構成は前記デバイスのユースケースを含む、前記デバイス構成を受信することと、
前記デバイスの前記制約されたハードウェア機能及び前記デバイス構成を満足させる前記ハードウェア仕様と互換性があるコードモジュールのリストを判断することと、
前記コードモジュールのリストを提供することと、
前記コードモジュールのリストからコードモジュールの選択を受信することと、
前記デバイスを設計する際に使用するために前記コードモジュールのリストから選択される前記コードモジュールを提供することと、
を含む、方法。
【請求項5】
サービスプロバイダ環境におけるデバイス画像ビルドサービスを使用して前記コードモジュールを含むデバイス画像を生成することと、
前記デバイスでの配信及びインストールのために前記デバイス画像を提供することと、
をさらに含み、
前記デバイスで使用される前記コードモジュールは、前記デバイスで実行するリアルタイム動作システム(RTOS)と互換性がある、請求項4に記載の方法。
【請求項6】
前記デバイスの前記デバイス構成を定義するデバイス機能定義を受信することであって、前記デバイス構成は前記デバイスにロードされる対象のコードモジュールに関する入力をさらに含む、前記デバイス機能定義を受信することと、
前記デバイスで使用される前記コードモジュールの選択を可能にするユーザインターフェースを提供することと、
をさらに含む、請求項4に記載の方法。
【請求項7】
前記デバイスを設計する時に利用可能である複数のコードモジュールに含まれるコードモジュールの間のインターフェースをテストすることであって、前記コードモジュールの間の前記インターフェースは、前記複数のコードモジュールに対して適切な機能性を保証するためにテストされる、前記インターフェースをテストすることをさらに含む、請求項4に記載の方法。
【請求項8】
前記コードモジュールのリストから選択される前記コードモジュールから補助デバイス画像を作成することであって、前記補助デバイス画像はサービスプロバイダ環境において動作する更新サービスにアップロードされる、前記補助デバイス画像を作成することと、
前記更新サービスから、前記デバイスでインストールするための更新として前記補助デバイス画像を提供することであって、前記補助デバイス画像は前記デバイスに対して先に受信したデバイス画像の機能を増強させる、前記補助デバイス画像を提供することと、をさらに含む、請求項4に記載の方法。
【請求項9】
前記デバイスに対する前記構成に部分的に基づいて前記コードモジュールに対する構成パラメータのセットを修正することと、
前記構成パラメータのセットに前記コードモジュールを提供することと、
をさらに含む、請求項4に記載の方法。
【請求項10】
サービスプロバイダ環境において動作するデバイス構成サービスから前記コードモジュールを提供すること、または、
前記デバイスでの使用のために前記コードモジュールを自動的に選択する従属関係ツリーを、前記従属関係ツリーにおいて定義されるソフトウェア従属関係に従って生成すること、をさらに含み、
前記デバイスに対する前記コードモジュールは、マイクロコントローラモジュール、デジタル信号処理(DSP)モジュール、通信モジュール、センサモジュール、カメラモジュール、トランシーバモジュール、または電力管理モジュールの1つまたは複数を含む、請求項4に記載の方法。
【請求項11】
少なくとも1つのプロセッサと、
少なくとも1つのメモリデバイスと、を備える、システムであって、
前記少なくとも1つのメモリデバイスは、実行される時、前記システムに、
デバイスに対するデバイス機能定義を受信することであって、前記デバイス機能定義は前記デバイスのユースケースを表す、前記デバイス機能定義を受信することと、
前記デバイスをビルドするためにハードウェアコンポーネント及び互換性があるコードモジュールを指示するデバイスパッケージを推奨することであって、前記デバイスに対して推奨される前記デバイスパッケージは、前記デバイスの前記ユースケースに対応する、以前に使用されたデバイスパッケージから識別される、前記デバイスパッケージを推奨することと、
前記デバイスパッケージの選択を受信することと、
前記デバイスでの使用のために前記デバイスパッケージと関連付けられた前記互換性があるコードモジュールを提供することと、
を行わせる複数のデータ及び命令を記憶するデータストアを含む、前記システム。
【請求項12】
前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスパッケージと関連付けられていない代替的なコードモジュールに対する要求と共に前記デバイスパッケージの選択を受信することと、
前記デバイスを設計する際に使用するために前記代替的なコードモジュールを提供することと、
を行わせる、請求項11に記載のシステム。
【請求項13】
前記複数のデータ及び命令は、実行される時、前記システムに、
デバイス画像を、前記互換性があるコードモジュールから生成しかつ前記デバイスにインストールすることを可能にするように前記互換性があるコードモジュールを提供すること、または、
前記デバイスパッケージの選択を可能にするユーザインターフェースを提供すること、
を行わせる、請求項11に記載のシステム。
【請求項14】
前記複数のデータ及び命令は、実行される時、前記システムに、
サービスプロバイダ環境で動作するデバイス構成サービスにおいて、前記デバイスに対する補助コードモジュールの選択を受信することと、
前記デバイスでの使用のために前記補助コードモジュールを提供することであって、前記補助コードモジュールを使用して、前記サービスプロバイダ環境において動作する更新サービスにアップロードされる補助デバイス画像を作成する、前記補助コードモジュールを提供することと、
前記更新サービスから、前記デバイスでインストールするための更新として前記補助デバイス画像を提供することであって、前記補助デバイス画像は前記デバイスに対して、先に受信したデバイス画像の機能を増強させる、前記補助デバイス画像を提供することと、
を行わせる、請求項11に記載のシステム。
【請求項15】
前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスの前記ユースケースに部分的に基づいて前記互換性があるコードモジュールに対する構成パラメータのセットを識別することと、
前記構成パラメータのセットに前記互換性があるコードモジュールを提供することと、
を行わせる、請求項11に記載のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
電子デバイス及びコンピューティングシステムは、社会の多くの側面において絶えず存在するものになっている。デバイスは、職場、家庭、または学校で見出され得る。コンピューティングシステムは、データを処理しかつ記憶するためのコンピューティング及びデータストレージシステムを含み得る。いくつかのコンピューティングシステムは、費用全体の低減、可用性の改善、スケーラビリティの改善、及び、新しい応用を展開する時間の低減を行い得るサービスプロバイダ環境として既知の集中型仮想コンピューティングオプションを供給し始めている。
【0002】
通信技術の進展は、コンピュータネットワークを介して他のデバイス及びコンピューティングシステムと通信するための比較的簡易な電子デバイスさえも可能にしている。例えば、モノのインターネット(IoT)は、既存のインターネットインフラストラクチャを使用する全世界に散在しているコンピューティングデバイスの相互接続である。このようなデバイスは、データをキャプチャ可能にしてもよく、さらにまた、デバイスは、集中コンピューティングサービス(例えば、サービスプロバイダ環境)にネットワークを介してデータを安全に通信し得る。
【0003】
電子デバイス(例えば、IoTデバイスまたは組み込みデバイス)は、産業機器、農業機械、家庭電化製品、製造デバイス、産業用プリンタ、自動車、サーモスタット、スマート交通信号、車両、ビルなど、さまざまな物理デバイスまたは製品に含まれてもよい。これらの物理デバイスは、組み込み電子機器、ソフトウェア、センサ、及び、これらの物理デバイスがデータを収集しかつ送ることを可能にするネットワーク接続性を有してもよい。電子デバイス(例えば、IoTデバイスなど)は、環境モニタリング、農業経営、インフラ管理、工業的応用、ビル及びホームオートメーション、エネルギー管理、医療及び健康管理システム、輸送システムなど、いくつかの応用に有用である場合がある。
【図面の簡単な説明】
【0004】
図1A】本技術の一例によるデバイスを設計するためにコードモジュールを提供するためのシステム及び関連の動作を示す図である。
図1B】本技術の一例による、サービスプロバイダ環境におけるデバイス画像ビルドサービスによってデバイスを設計するためにデバイス画像を提供するためのシステム及び関連の動作を示す図である。
図2】本技術の一例によるデバイスを設計するためにコードモジュールを提供するためのネットワーク化システムの説明図である。
図3】本技術の一例によるデバイスを設計するためにコードモジュールを提供するためのシステム及び関連の動作を示す図である。
図4】本技術の一例による、コードモジュールをテストするためのシステム及び関連の動作を示す図である。
図5】本技術の一例による、補助デバイス画像のために無線による(OTA)更新を行うためのシステム及び関連の動作を示す図である。
図6】コードモジュールを提供するための例示の方法のフローチャートである。
図7】コードモジュールを提供するための別の例示の方法のフローチャートである。
図8】コードモジュールを提供するためのさらに別の例示の方法のフローチャートである。
図9】本技術の一例による、サービスプロバイダ環境のブロック図である。
図10】本技術において用いられてもよいコンピューティングデバイスの例証を提供するブロック図である。
【発明を実施するための形態】
【0005】
IoTデバイスなどのデバイスにコードモジュールを提供するための技術について説明する。コードモジュールは、デバイスのための設計プロセス時にデバイスに対して選択されてもよい。コードモジュール(例えば、ソフトウェアモジュール、プログラムモジュール、機能モジュール、実行可能ファイル)は、デバイスに含まれるハードウェアコンポーネントに対応し得る。選択後、コードモジュールは、(例えば、デバイス画像で)デバイスに送られ、かつデバイス上でインストールされてもよい。コードモジュールは、デバイスに含まれるハードウェアコンポーネントが正確に機能できるようにしてもよい。1つの例では、コードモジュールは、デバイスにおけるハードウェアコンポーネントが、デバイス上で実行する、リアルタイム動作システム(RTOS)または別のタイプの組み込みオペレーティングシステムと正確にインターフェース接続できるようにしてもよい。
【0006】
1つの構成では、デバイス構成サービスは、ハードウェアコンポーネントのリストからデバイス画像に含まれるハードウェアコンポーネントを判断してもよく、ハードウェアコンポーネントは設計されているデバイスに含まれてもよい。デバイス構成サービスに利用可能なそれぞれのハードウェアコンポーネントは、承認権限(例えば、コンピューティングサービスプロバイダ)によって認定されかつ事前承認を受ける場合があり、認定されないハードウェアコンポーネントはデバイス構成サービスによって選択可能にならない場合がある。認定されたハードウェアコンポーネントは、デバイス構成サービスからロード可能な適切なコードモジュールを有するとして認定され得る。ハードウェアコンポーネントは、マイクロコントローラ、デジタル信号処理(DSP)チップ、センサ、トランシーバ、カメラ、マイクロホン、スピーカなどを含んでもよい。1つの例では、デバイス構成サービスは、ユーザが、デバイスに含まれるハードウェアコンポーネントを選択できるようにするサービスプロバイダ環境を介してアクセス可能なユーザインターフェースを介してハードウェアコンポーネントのリストを提供してもよい。それゆえに、デバイス構成サービスを使用して、ユーザインターフェースを介して受信されるユーザ選択に基づいてハードウェアコンポーネントを判断してもよい。
【0007】
代替的には、デバイス構成サービスは、ユーザインターフェースを介してデバイスのためのデバイス機能定義を受信してもよく、デバイス機能定義は、デバイスのユースケースを表してもよい。デバイスのユースケースは、サーモスタット、降雨センサ、ビデオストリーミング、画像キャプチャ、運動センサなどであってよい。デバイス機能定義に基づいて、デバイス構成サービスは、デバイスに含まれるハードウェアコンポーネント(例えば、ビデオエンコーダ、高解像度(HD)カメラ、温度センサなど)を推奨してもよい。
【0008】
1つの構成では、デバイス構成サービスは、選択されたハードウェアコンポーネントと互換性があるコードモジュールのリストを提供してもよい。コードモジュールのリストは、デバイス機能定義に基づいて生成されてもよい。コードモジュールのリストは、ユーザがコードモジュールを選択できるようにするユーザインターフェースを介して提供されてもよい。デバイス構成サービスに利用可能なそれぞれのコードモジュールは、特定のハードウェアコンポーネントと互換性があるとして認定されてもよい。さらに、特定の認定されたコードモジュールは、個々のハードウェアコンポーネントと互換性がある場合があり、かつ、異なっている、同じ機能性を有するハードウェアコンポーネント(別のモデルタイプまたは別の製造業者のハードウェアコンポーネント)と互換性がない場合がある。コードモジュールは、マイクロコントローラモジュール、デジタル信号処理(DSP)モジュール、センサモジュール、トランシーバモジュール、カメラモジュール、マイクロホンモジュール、スピーカモジュールなどを含んでもよい。コードモジュールは、ファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイルなどを含んでもよい。代替的な構成では、デバイス構成サービスは、選択されたハードウェアコンポーネントに基づいてコードモジュールを自動的に検出してもよい。
【0009】
1つの構成では、デバイス構成サービスは、デバイスにダウンロードするために選択された認定済みコードモジュールを提供してもよい。例えば、デバイス構成サービスは、ユーザコンピューティングデバイスにコードモジュールを提供してもよい。ユーザコンピューティングデバイスは、コードモジュールをアセンブルしてデバイス画像を生成してもよく、このデバイス画像はデバイスにインストールされてもよい。デバイス画像は、コンピュータファイル、または、(デバイスに含まれるハードウェアコンポーネントに対応する)コードモジュールを含む画像であってよい。デバイス画像のインストールは、デバイスに、サービスプロバイダ環境において実行しているサービスに接続するための能力(例えば、IoTサービスに接続するための無線ネットワーキング機能性)など、デバイスハードウェアに合うデバイス機能性を提供してもよい。代替的には、デバイス画像のインストールは、デバイスが、ローカル無線ネットワークにおけるコンピューティングハブに接続できるようにしてもよく、コンピューティングハブは、サービスプロバイダ環境において実行しているサービスに接続されてもよい。
【0010】
図1Aは、デバイス130(例えば、IoTデバイス)を設計するためにコードモジュール114を提供するための例示のシステム及び関連の動作を示す。コードモジュール114は、サービスプロバイダ環境100において動作するデバイス構成サービス110から提供されてもよい。デバイス構成サービス110は、設計プロセスの選択可能要素としてハードウェアコンポーネント136及びコードモジュール114(例えば、ソフトウェアモジュール、プログラムモジュール、機能モジュール、実行可能モジュール、)を使用してデバイス130を設計かつ構成するためのプラットフォームを提供してもよい。デバイス構成サービス110は、デバイス構成サービス110から受信されるようにユーザインターフェース122(例えば、ブラウザベースインターフェースにおけるデバイス構成ユーザインターフェース)を提示するためにユーザコンピューティングデバイス120と通信していてもよい。代替的には、デバイス構成サービス110は、ユーザコンピューティングデバイス120上にロードされたアプリケーションと通信していてよく、アプリケーションは、デバイス構成サービス110から受信されるようなユーザインターフェース122を提示してもよい。
【0011】
デバイス構成サービス110は、ユーザインターフェース122を介してユーザコンピューティングデバイス120から受信される入力に基づいてデバイス130にコードモジュール114を提供してもよい。ユーザコンピューティングデバイス120は有線または無線接続を介してデバイス130に接続されてもよい。デバイス130は、リアルタイム動作システム(RTOS)132(例えば、FreeRTOS)または別のタイプの組み込みオペレーティングシステムを実行するように構成されてもよい。RTOS132は、ハードウェアリソース及びホストアプリケーションの管理、ならびにバッファ遅延を低減させたリアルタイムの着信データの処理を行ってもよい。さらに、デバイス130は、デバイス構成サービス110から受信されるコードモジュール114に基づいて構成されてもよいハードウェアコンポーネント136を含んでもよく、コードモジュール114は、デバイス130上で実行するRTOS132と互換性があってよい。
【0012】
1つの構成では、デバイス構成サービス110は、デバイス130を設計しかつビルドする時に利用可能なハードウェアコンポーネントのリスト112を提供してもよい。デバイス構成サービス110は、ユーザインターフェース122を介してハードウェアコンポーネントのリスト112をユーザコンピューティングデバイス120に提供してもよい。ハードウェアコンポーネントのリスト112は、デバイス130を設計しかつビルドする時に利用可能である、さまざまなタイプのマイクロコントローラ、センサ、トランシーバ、カメラ、マイクロホン、スピーカ、I/Oインターフェース(例えば、USBコントローラ)、デバイス周辺機器などを含んでもよい。
【0013】
1つの例では、デバイス構成サービス110は、ユーザインターフェース122を介して受信された基準(例えば、キーワード検索またはデバイスタイプ)に基づいてハードウェアコンポーネントのリスト112をフィルタリングしてもよい。例えば、デバイス構成サービス110は、ユーザインターフェース122を介して受信されるフィードバックに基づいて、定義されたメモリ及び/またはプロセッサ機能を有するマイクロコントローラ、ある特定のタイプのセンサ(例えば、環境光センサ)、または、ある特定の解像度の高解像度(HD)画像をキャプチャするカメラのタイプなど、ハードウェアコンポーネントのリストを提供してもよい。デバイス構成サービス110は、ユーザがさまざまなタイプのハードウェアコンポーネント136を比較できるようにする定義されたフォーマット(例えば、テーブルフォーマットまたはリスティングフォーマット)におけるハードウェアコンポーネントのリスト112を提供してもよい。
【0014】
1つの例では、構成サービス110は、デバイス機能定義によって指定されるようなデバイスのユースケースに基づいてハードウェアコンポーネントのリスト112をフィルタリングしてもよい。例えば、ユーザは、ユーザインターフェース122を介してデバイス130のデバイス機能定義を定義してもよく、デバイス機能定義は、設計されかつビルドされているデバイス130の意図されたユースケースに対応し得る。ユーザインターフェース122に提示されるハードウェアコンポーネントのリスト112は、それに応じてデバイス機能定義に基づいてフィルタリングされてもよい。
【0015】
代替的には、デバイス構成サービス110は、ユーザインターフェース122を介してユーザコンピューティングデバイス120に提示されるハードウェアコンポーネントのリスト112をフィルタリングしなくてもよい。換言すれば、デバイス構成サービス110は、デバイス構成サービス110によってサポートされる全てのハードウェアコンポーネントのリスト112を提供してもよい。
【0016】
1つの例では、デバイス構成サービス110は、ハードウェアコンポーネントのリスト112からハードウェアコンポーネント136の選択を受信してもよい。デバイス構成サービス110は、ユーザインターフェース122を介してユーザコンピューティングデバイス120からの選択を受信してもよい。選択されたハードウェアコンポーネント136は、使用されることが予想されるハードウェアコンポーネント136、またはデバイス130をビルドするために使用されているハードウェアコンポーネントを指示し得る。
【0017】
1つの例では、選択されたハードウェアコンポーネント136は、デバイス機能定義によって指定されるように、デバイス130のユースケースに対応し得る。換言すれば、デバイス機能定義において指示されるように、デバイス130の用途または目的(例えば、ビデオストリーミング、工場モニタリング)に応じて、適切なハードウェアコンポーネント136(例えば、ビデオを符号化するためのハードウェアエンコーダ、温度センサ、環境光センサ)は、ユーザインターフェース122を介してデバイス130に対して選択または識別され得る。従って、ユーザは、設計かつビルドされているデバイス130のタイプに応じて、適切なハードウェアコンポーネント136を選択してもよい。
【0018】
1つの例では、デバイス構成サービス110は、選択されたハードウェアコンポーネント136と互換性があるコードモジュール114のリストを提供してもよい。ハードウェアコンポーネント136の選択に基づいて、デバイス構成サービス110は、デバイス130に対して選択されたハードウェアコンポーネント136に対応するコードモジュール114を識別し得る。デバイス構成サービス110は、ユーザインターフェース122を介して提示するためにユーザコンピューティングデバイス120にコードモジュール114のリストを提供してもよい。コードモジュール114は、マイクロコントローラモジュール、センサモジュール、トランシーバモジュール、無線通信モジュール(例えば、Bluetooth及びWi-Fi)、メッセージングモジュール(例えば、メッセージキューテレメトリトランスポート(MQTT)、伝送制御プロトコル及びインターネットプロトコル(TCP/IP)、ハイパーテキスト転送プロトコル(HTTP))、カメラモジュール、マイクロホンモジュール、スピーカモジュールなどを含んでもよい。コードモジュール114は、ファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイル、動作システムなどを含んでもよい。それぞれのコードモジュール114は、対応するハードウェアコンポーネント136にリンクされてもよく(例えば、特定のハードウェアコンポーネント136によって使用可能な1つまたは複数のコードモジュール114があってよい)、コードモジュール114は、デバイス130において動作するように対応するハードウェアコンポーネント136を構成してもよい。デバイス構成サービス110は、ユーザインターフェース122を介して提示するために提供されるコードモジュール114が互いに互換性があるように保証し得る。
【0019】
1つの例では、ユーザインターフェース122を介してユーザコンピューティングデバイス120に提供されるコードモジュール114のリストは、デバイス機能定義において指示されるように、デバイス130のユースケースに左右されるものであり得る。例えば、コードモジュール114のリストは、デバイス130のユースケースに基づいてフィルタリングされてもよい。さらに、デバイス構成サービス110は、コードモジュール114についてのコンテキスト情報を提供してもよい。例えば、デバイス構成サービス110は、コードモジュール114のそれぞれに対するチップセット上で使用されるメモリ量についての情報を提供してもよい。これによって、設計者は、コードモジュール114がデバイス画像サイズの制約内に適合し得るかどうかを判断できるようになり得る。1つの例では、デバイス構成サービス110は、ユーザによって利用されるコードモジュール114を含むユーザに対する(Gitレポジトリなどの)バージョン管理システムレポジトリを作成してもよく、バージョン管理システムレポジトリは、バージョン管理システムレポジトリに含まれるコードモジュール114が他のユーザにアクセス可能にできるようにクローンまたは複製され得る。
【0020】
1つの例では、デバイス構成サービス110は、コードモジュール114のリストからコードモジュール114の選択を受信してもよい。さらに、デバイス構成サービス110は、デバイス130のユースケースに基づいて選択されたコードモジュール114に対する構成パラメータ115のセットを識別してもよい。例えば、デバイス機能定義によって指定されるようなユースケースに基づいて、デバイス構成サービス110は、選択されたコードモジュール114に対するある特定の構成パラメータ115を推奨し得る。推奨された構成パラメータ115は、デバイス130に対して選択された、特定のハードウェアコンポーネント136及びコードモジュール114と関連付けられてもよい。構成サービス110は、ユーザインターフェース122を介してユーザコンピューティングデバイス120からある特定の構成パラメータ115の選択を受信してもよい。従って、デバイス130に対してコードモジュール114を単に選択するのではなく、コードモジュール114は、デバイス130のユースケースに応じてある特定の構成パラメータ115によって構成されてもよい。
【0021】
一例として、顧客は、サービスプロバイダ環境100においてホストされるアプリケーションと通信するように構成されるネットワーク接続されたサーモスタット素子についての一般化された仕様をデバイス構成サービス110に提供してもよい。顧客によって提供される仕様は、温度センサ及びネットワーキングデバイスと共に、マイクロコントローラ、及びマイクロコントローラと互換性があるRTOS132など、ネットワーク接続されたサーモスタット素子に対して使用され得るハードウェアコンポーネント136を識別するために使用されてもよい。
【0022】
1つの例では、デバイス構成サービス110は、ユーザコンピューティングデバイス120にコードモジュール114及び構成パラメータ115を提供してもよい。ユーザコンピューティングデバイス120を使用している開発者は、デバイス130に追加のカスタムコードを提供してもよく、カスタムコードは、コードモジュール114及び構成パラメータ115に追加されてもよい。さらにまた、ユーザコンピューティングデバイス120は、選択されたコードモジュール114を選択された構成パラメータ115とアセンブルしてデバイス画像116を生成してもよい。ユーザコンピューティングデバイス120は、選択されたコードモジュール114及び選択された構成パラメータ115をアセンブル(例えば、コンパイル、リンク、または組み合わせ)して、ユーザコンピューティングデバイス120で実行している統合開発環境(IDE)を使用してデバイス画像116を生成してもよい。デバイス画像116は、選択されたコードモジュール114及び構成パラメータ115を有するコンピュータファイル(例えば、デジタル画像、インストール画像、または、ZIPファイルまたはファイルグループなどの圧縮ファイル)であってよい。アセンブルまたはコンパイル後、デバイス画像116は、有線または無線接続によってユーザコンピューティングデバイス120からデバイス130に送信されてもよい。デバイス画像116を利用して、デバイス130において、ソフトウェアコンポーネントをインストールし、かつ選択されたハードウェアコンポーネント136を構成してもよい。例えば、デバイス画像116に基づいて、ハードウェアコンポーネント136は、デバイス130上で実行しているRTOS132とインターフェース接続するように構成されてもよい。デバイス画像116は、基本ビルドパッケージであってよい、またはハードウェアコンポーネント136、及びデバイス130上で実行しているRTOS132にコア機能性を提供するためのパッケージをインストールしてもよい。従って、デバイス画像116がデバイス130上にロードされた後、ユーザコンピューティングデバイス120上で実行しているIDEを利用して、デバイス130によって行われるべき特定の機能または動作にリンクされる追加のカスタムコードを開発してもよい。
【0023】
1つの例では、デバイス構成サービス110は、チップセットベースでデバイス130に対して選択可能な構成を判断してもよい。デバイス130に対して選択されたハードウェアコンポーネント136に応じて、デバイス構成サービス110は、デバイス130においてハードウェアコンポーネント136を動作可能にするのに適切なソフトウェアコンポーネントを選択してもよい。デバイス構成サービス110は、完全にモジュール式のダウンロード可能なソフトウェアスタックを提供してもよく、ここで、適切なソフトウェアは要求に応じてハードウェアコンポーネント136に対して構成される。
【0024】
1つの例では、ユーザコンピューティングデバイス120上で実行しているIDEを利用して、デバイス構成サービス110によって認定されていない追加のコードモジュールを開発してもまたは組み込んでもよい。この例では、IDEを利用して、追加のコードモジュールに対するShim層を作成しても(すなわち、このプログラミングを可能にしても)よく、これによって、追加のコードモジュールが、デバイス130上で実行しているRTOSと互換性があるようにしてもよい。
【0025】
さらに、デバイス構成サービス110は、その後テストされかつ認定され得るコードモジュールをサブミットするためのオープンソースプラットフォームを提供してもよい。これらのコードモジュールは、デバイス構成サービス110によって提供される既存のコードモジュールに対してテストされ得る(例えば、新しく作成されたShimのインターフェースはデバイス構成サービス110によってテストされ得る)。認定された後、これらのコードモジュールは、デバイス130を設計しかつビルドしている他の顧客に対してデバイス構成サービス110によって利用可能にされてもよい。
【0026】
図1Bは、サービスプロバイダ環境100におけるデバイス画像ビルドサービス140によってデバイス130を設計するために、デバイス画像116を提供するための例示のシステム及び関連の動作を示す。例えば、デバイス構成サービス110は、ハードウェアコンポーネントのリスト112からハードウェアコンポーネントの選択を受信してもよい。デバイス構成サービス110は、コードモジュール114及び構成パラメータ115の選択を受信してもよい。コードモジュール114及び構成パラメータ115は、デバイス画像116を生成し得るデバイス画像ビルドサービス140に提供されてもよい。デバイス画像142はユーザコンピューティングデバイス120に提供されてもよい。ユーザコンピューティングデバイス120はデバイス画像116をデバイス130に送ってもよく、デバイス画像116はデバイス130にインストールされてもよい。代替的には、デバイス画像142は、デバイス画像ビルドサービス140からデバイス130に直接提供されてもよい。
【0027】
過去の解決策では、デバイス開発者(例えば、IoTデバイス開発者)は、デバイス、及びデバイスを動作させるためのソフトウェア層を設計しかつビルドするのに必要以上の時間を費やす可能性がある。例えば、デバイス開発者は、典型的には、デバイスにおいて使用されるべきチップセット(複数可)についてのコードを書き込むのに3~6か月を費やす場合がある。デバイス開発者は、デバイスに実装されていたハードウェアコンポーネントに応じて、個々のハードウェア仕様書を参考にしなければならない場合がある。デバイス開発者はさらにまた、デバイスを設計しかつビルドする時にさまざまなハードウェアコンポーネント間の互換性を保証するのにさらなる時間を費やす場合がある。一般に、デバイス開発者は、デバイスの用途または目的に応じて、カスタム機能を開発するために費やされた時間を含まない基本機能(例えば、メモリ割り当て、CPUスケジューリング、ベース周辺機器(例えば、USB、カメラなど))を得るために、必要以上の時間を費やすことが考えられる。その結果、過去の解決策では、デバイス開発は、厄介なものであって、時間及びリソースの増大を伴うものであった。
【0028】
さらに、過去の解決策では、デバイスにおいて使用されるチップセット(複数可)のためのコードは、種々のハードウェアコンポーネントがデバイスの新しいバージョンで使用された時手動でリライトされなければならなかった。例えば、ハードウェアコンポーネントベンダが変更され、かつ種々のハードウェアコンポーネントが結果としてデバイスの新しいバージョンで使用されることになっていた時(デバイスの機能性がデバイスのバージョン間で同じままであった場合でも)、デバイスにおけるコードは、新しいハードウェアコンポーネントに適応させるために手動でリライトされなければならず、このことは、デバイス開発者に過度の厄介な処理を行わせることになる。
【0029】
本技術では、デバイス構成サービスまたはデバイス開発者は、ハードウェアコンポーネントのリストから選択し得る。ハードウェアコンポーネントはデバイス構成サービスによって先に承認され得る。デバイス構成サービスまたはデバイス開発者は、ハードウェアコンポーネントと互換性があるコードモジュールのリストから選択してもよく、コードモジュールのリストはデバイスのユースケースに適合させてもよい。例えば、デバイス開発者は、ユーザインターフェースを介して、選択されたハードウェアコンポーネントとの互換性、及び開発されているデバイスのユースケースに応じてコードモジュールを選択してもよい。それぞれのコードモジュールは特定のハードウェアコンポーネントにリンクされるコードを含んでもよい。コードモジュールが選択された後、デバイス画像はコードモジュールを含むように生成されてもよく、さらにまた、デバイス画像はデバイスにダウンロード及びインストールされてもよい。従って、デバイス開発者は、デバイスにおけるそれぞれのハードウェアコンポーネントのためのコードの手動の書き込みを回避し得る。もっと正確に言えば、デバイス開発者は、承認されたハードウェアコンポーネントのリストからハードウェアコンポーネントを選択した後、これらのハードウェアコンポーネントに対応するコードモジュールを自動的に得てもよい。その結果、デバイス開発プロセスは、簡略化され得、かつ時間の低減を伴う場合がある。
【0030】
図2は、サービスプロバイダ環境200における本技術の例示のコンポーネントを示す。サービスプロバイダ環境200はデバイス構成サービス210を動作させてもよい。デバイス構成サービス210は、デバイス280(例えば、IoTデバイス)にコードモジュール244を提供するために1つまたは複数のコンピューティングインスタンス220及びデータストア(複数可)240を利用してもよい。デバイス構成サービス210は、ユーザコンピューティングデバイス270を介してデバイス280でのダウンロード及びインストールのためにコードモジュール244を提供してもよい。デバイス構成サービス210は、ネットワーク260を介してユーザコンピューティングデバイス270と通信していてもよい。ユーザコンピューティングデバイス270は、ユーザが、デバイス280での使用のために、さまざまなコードモジュール244及び構成パラメータ246を選択できるようにするユーザインターフェース272を含んでもよい。
【0031】
1つの例では、データストア240はハードウェアコンポーネントのリスト242を含んでもよい。ハードウェアコンポーネントのリスト242は、デバイス構成サービス210によって提供されるハードウェアコンポーネント282を含んでもよく、これらのハードウェアコンポーネント282は、デバイス280を設計しかつビルドする時に使用され得る。例えば、ハードウェアコンポーネント282は、対応するコードモジュールがデバイス構成サービス210によって既にテストされかつ認定されているハードウェアコンポーネントを含んでもよい。ハードウェアコンポーネントのリスト242は、対応するコードモジュールがデバイス構成サービス210によってテストされかつ認定されていないハードウェアコンポーネントを含まない場合がある。ハードウェアコンポーネントのリスト242は、デバイス280を設計する時に使用されてもよいハードウェアコンポーネント282のさまざまなクラスを含んでもよい。例えば、ハードウェアコンポーネントのリスト242は、Wi-Fiチップセット、超低電力Wi-Fiチップセット、Bluetoothチップセット、Bluetooth低エネルギー(BLE)チップセット、ZigBeeチップセット、またはLong Term Evolution(LTE)チップセットなどの無線通信コンポーネントを含んでもよい。ハードウェアコンポーネントのリスト242は、さまざまなレベルの処理及びメモリ機能を有するさまざまなタイプの組み込みマイクロコントローラ及びシステムオンチップ(SoC)を含んでもよい。ハードウェアコンポーネントのリスト242は、温度センサ、近接センサ、位置センサ、光センサ、水分/湿度センサ、運動センサ、加速度及び方位センサ、マイクロホン、化学/ガスセンサなどを含んでもよい。ハードウェアコンポーネントのリスト242は、さまざまなタイプのカメラ及びビデオレコーダーを含んでもよい。さらに、ハードウェアコンポーネントのリスト242は、さまざまなタイプのディスプレイスクリーン、スピーカシステム、電源装置(例えば、バッテリ)、及びデバイス280に含まれてもよい他のハードウェアコンポーネント242を含んでもよい。
【0032】
1つの例では、データストア240は、コードモジュール244(例えば、ソフトウェアモジュール、プログラムモジュール、機能モジュール、実行可能ファイル)を含んでもよい。コードモジュール244はデバイス構成サービス210によって提供されてもよく、コードモジュール244はデバイス280を設計しかつビルドするのに利用可能なハードウェアコンポーネント282に対応し得る。コードモジュール244はデバイス280にインストールされるようにモジュール式ソフトウェアコンポーネントであってよい。コードモジュール244はハードウェアコンポーネント282の特定のタイプ及び/またはモデルに対応してもよい。コードモジュール244はファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイルなどを含んでもよい。コードモジュール244は、対応するハードウェアコンポーネント282がデバイス280において正確に機能できるようにデバイス280にインストールまたはコピーされてもよい。コードモジュール244は、無線通信モジュール(例えば、BluetoothモジュールまたはWi-Fiモジュール)、メッセージングプロトコル(例えば、MQTT、TCP/IP、またはHTTP)のサポートを可能にするためのメッセージングモジュール、マイクロコントローラモジュール、センサモジュール、カメラモジュール、ビデオレコーダーモジュール、ディスプレイスクリーンモジュール、スピーカシステムモジュール、電力管理モジュール、または、デバイス280に含まれ得るハードウェアコンポーネント282(例えば、基本ハードウェアまたはハードウェア周辺機器)の機能性を可能にする他のタイプのソフトウェアを含んでもよい。
【0033】
1つの例では、データストア240は構成パラメータ246を含んでもよい。構成パラメータ246はコードモジュール244と関連付けられてもよい。例えば、構成パラメータ246は、コードモジュール244において定義される、さまざまな設定、パラメータ、構成、変数などを含んでもよい。構成パラメータ246はデバイス280に対するデバイス機能定義250に基づいて定義されてもよい。それゆえに、構成パラメータ246はデバイス280のユースケースに基づいて定義されてもよい。1つの例では、デバイス構成サービス210はユーザインターフェース272を介してユーザコンピューティングデバイス270に一連の問い合わせを提供してもよく、コードモジュール244に対する構成パラメータ246はユーザコンピューティングデバイス270から受信されるユーザ入力に基づいて選択または構成されてもよい。一例として、コードモジュール244に対する構成パラメータ246は、デバイス280における対応するハードウェアコンポーネント282が、温度センシング、ビデオストリーミング、農業機械などをサポートするために使用されるかどうかに左右される場合がある。
【0034】
1つの例では、データストア240は依存関係ツリー248を含んでもよい。依存関係ツリー248は、複数のコードモジュール244を、デバイス280を設計する時に互換性がある複数のハードウェアコンポーネント282にマッピングしてもよい。依存関係ツリー248はまた、どのコードモジュール244が、定義されたハードウェアコンポーネント282と互換性があるのかを指示し得る。さらに、依存関係ツリー248は、どのコードモジュール244が、他のコードモジュール244と互換性があるまたはこれらに左右されるのかを指示してもよい。これは、どのコードモジュール244が、デバイス280で動作させるために複数の依存関係を有するのかを指示し得るものである。依存関係ツリー248における特定のコードモジュール244間に依存関係リンクがないことは、これらの特定のコードモジュール244が互いに互換性がないことを指示し得る。従って、コードモジュール244は、依存関係ツリー248に従ってデバイス画像248に含まれるように選択されなくてもよい。
【0035】
非限定的な例として、依存関係ツリー248は、マイクロコントローラがある特定のBluetoothチップセット及びある特定のセンサと互換性があることで、マイクロコントローラコードモジュールが対応するBluetoothコードモジュール及びセンサコードモジュールと互換性があることを指示し得る。依存関係ツリー248はまた、Bluetoothモジュール及びセンサモジュールが互いに互換性があることを指示し得る。代替的には、依存関係ツリー248は、Bluetoothモジュール及びセンサモジュールがそれぞれ、マイクロコントローラコードモジュールと互換性がある一方、Bluetoothモジュール及びセンサモジュールが互いに互換性がないことを指示し得る。従って、この場合、この特定のBluetoothチップセットは、デバイス280を設計する時にこの特定のセンサと組み合わせて使用されない場合がある。
【0036】
1つの例では、データストア240はデバイス機能定義250を含んでもよい。デバイス機能定義250は、デバイス280のデバイス機能及びユースケースを定義してもよい。デバイス280のデバイス機能定義250は、ユーザコンピューティングデバイス270でユーザインターフェース272を介して受信され得る。デバイス機能定義250は、デバイス280と関連付けられた、ユースケース、用途、または目的(例えば、温度の捕捉、水分センシング、侵入検出、オーディオストリーミング、ビデオストリーミング、画像キャプチャ)を定義してもよい。デバイス機能定義250は、ユーザインターフェース272を介してデバイス構成サービス210からユーザコンピューティングデバイス270に提供される一連の問い合わせに応答して受信されるユーザ入力に基づいて定義されてもよい。デバイス機能定義250は、デバイス280が使用されることになる場所または設定のタイプ(例えば、農場、工場、家庭)を定義してもよい。デバイス機能定義250は、デバイス280によって収集されかつアップロードされるデータのタイプ(例えば、温度データ、水分データ、運動データ、及び画像データ)を定義してもよく、デバイス機能定義250は、データを収集しかつアップロードするための周期性を定義してもよい。デバイス機能定義250はまた、デバイス280が特定の場所において同様のデバイス280のグループ内で機能するかどうかを定義してもよい。
【0037】
デバイス構成サービス210によって動作させるコンピューティングインスタンス(複数可)220は、デバイス280にコードモジュール244を提供するためにいくつかのモジュールを利用してもよい。コンピューティングインスタンス(複数可)220は、ハードウェアコンポーネント選択モジュール222、コード選択モジュール224、コード配信モジュール226、及び詳細に論じられない、他のアプリケーション、サービス、プロセス、システム、エンジン、または機能性を含んでもよい。
【0038】
ハードウェアコンポーネント選択モジュール222は、設計されているデバイス280に対してハードウェアコンポーネント282を識別するように構成されてもよい。ハードウェアコンポーネント選択モジュール222は、ユーザインターフェース272を介してユーザコンピューティングデバイス270から受信される選択に基づいてハードウェアコンポーネント282を識別してもよい。例えば、ユーザは、デバイス280の目的またはユースケースを達成するためにハードウェアコンポーネント282の選択を提供し得る。代替的には、ハードウェアコンポーネント選択モジュール222は、ユーザインターフェース272を介してユーザコンピューティングデバイス270から受信されるデバイス機能定義250及びユースケースに基づいて、ある特定のハードウェアコンポーネント282を推奨または自動的に選択してもよい。
【0039】
コード選択モジュール224は、設計されているデバイス280に対するコードモジュール244を識別するように構成されてもよい。コード選択モジュール224は、デバイス280に対して選択されたハードウェアコンポーネント282と関連付けられたコードモジュール244を自動的に識別し得る。代替的には、コード選択モジュール224は、既に選択されたハードウェアコンポーネント282と互換性があるコードモジュール244のリストを提供してもよく、コード選択モジュール224は、ユーザインターフェース272を介してユーザコンピューティングデバイス270から受信されるユーザ入力に基づいて、固有のコードモジュール244を識別してもよい。ユーザコンピューティングデバイス270に提供されるコードモジュール244のリストは、デバイス機能定義250において定義されるように、デバイス280のユースケースに基づいて適合またはフィルタリングされてもよい。さらに、コード選択モジュール224は、ユーザインターフェース272を介してユーザコンピューティングデバイス270から受信されるユーザ入力に基づいてコードモジュール244に対するさまざまな構成パラメータ246を選択し得る。例えば、コード選択モジュール224は、デバイス機能定義250において定義されるように、デバイス280のユースケースに適合させるように構成パラメータ246を選択してもよい。
【0040】
コード配信モジュール226は、ネットワーク260を介してユーザコンピューティングデバイス270に、選択されたコードモジュール244及び選択された構成パラメータ246を提供してもよい。コード配信モジュール226は、ユーザコンピューティングデバイス270を使用する開発者が、コードモジュール244及び構成パラメータ246からデバイス画像を設計しかつ生成することができるように、コードモジュール244及び構成パラメータ246を提供してもよい。さらにまた、デバイス画像はデバイス280にロードされてもよい。
【0041】
ユーザインターフェース272を有するユーザコンピューティングデバイス270は、例えば、プロセッサベースシステムであってよい。ユーザコンピューティングデバイス270は、デスクトップコンピュータ、ラップトップもしくはノードブックコンピュータ、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、または同様の機能を有する他のデバイスを含んでもよいがこれらに限定されない。
【0042】
デバイス280(例えば、IoTデバイス)は、例えば、プロセッサベースシステムまたは組み込みシステムであってよい。非限定的な例として、デバイス280は、消費者製品(例えば、炊飯器、テレビ、プリンタ、またはスキャナ)、ホームオートメーション製品(例えば、スマートサーモスタット、スマート冷蔵庫、暖房装置、空調など)、製造装置、飼育装置、工場装置、工業用金属プレス加工装置、工業ロボット、センサ、ドローン、または、一意の識別子がアサインされ、かつネットワーク260を介してデータを通信することが可能な他のデバイスを含んでもよい。商用デバイスはまた、商用印刷機、商用冷凍庫、商用窯、商用ミキサ、または他の商用機器を含む、デバイス280の定義に含まれてもよい。デバイス280は、機械またはシステムに電子制御を提供する他のタイプの組み込みデバイスであってよい。
【0043】
サービスプロバイダ環境200内に含有されるさまざまなプロセス及び/または他の機能性は、1つまたは複数のメモリモジュールと通信している1つまたは複数のプロセッサで実行されてもよい。サービスプロバイダ環境200は、例えば、1つまたは複数のサーババンク、コンピュータバンク、または他の配置構成において配置されるいくつかのコンピューティングデバイスを含んでもよい。コンピューティングデバイスは、ハイパーバイザ、仮想マシンマネージャ(VMM)、及び他の仮想化ソフトウェアを使用するコンピューティング環境をサポートしてもよい。
【0044】
「データストア」という用語は、データの、記憶、アクセス、整理、及び/または取得を行うことが可能な任意のデバイスまたはデバイスの組み合わせを指す場合がある。該デバイスは、任意の集中型、分散、またはクラスタ環境における、データサーバ、リレーショナルデータベース、オブジェクト指向型データベース、クラスタストレージシステム、データストレージデバイス、データウェアハウス、フラットファイル、及びデータストレージ構成の任意の組み合わせ及び数を含んでもよい。データストアのストレージシステムコンポーネントは、SAN(ストレージエリアネットワーク)、仮想化ストレージネットワーク、揮発性もしくは不揮発性RAM、光媒体、またはハードドライブ型媒体などのストレージシステムを含んでもよい。データストアは、理解できるような複数のデータストアを代表するものであってよい。
【0045】
ネットワーク260は、イントラネット、インターネット、ローカライズされたネットワーク、広域ネットワーク、無線データネットワーク、もしくは、任意の他のこのようなネットワーク、またはこれらの組み合わせを含む、任意の有用なコンピューティングネットワークを含んでもよい。このようなシステムに利用されるコンポーネントは、選択されたネットワーク及び/または環境のタイプに少なくとも部分的に左右される場合がある。ネットワークを介した通信は、有線または無線接続、及びこれらの組み合わせによって可能にされてもよい。
【0046】
図2は、ある特定の処理モジュールがこの技術に関連して論じられ得、かつこれらの処理モジュールがコンピューティングサービスとして実装され得ることを示す。1つの例示の構成では、モジュールは、サーバまたは他のコンピュータハードウェアで実行する1つまたは複数のプロセスによるサービスとみなされ得る。このようなサービスは、要求を受信し、かつ出力を他のサービスまたは消費者デバイスに提供し得る、一元的にホストされる機能性またはサービスアプリケーションであってよい。例えば、サービスを提供するモジュールは、サーバ、仮想化サービス環境、グリッド、またはクラスタコンピューティングシステムにおいてホストされるオンデマンドコンピューティングとみなされ得る。APIは、第2のモジュールが要求を送り、かつ第1のモジュールから出力を受信することを可能にするためにそれぞれのモジュールに提供されてもよい。このようなAPIはまた、サードパーティが、モジュールとインターフェース接続し、要求を行い、出力をモジュールから受信することを可能にしてもよい。図2は上記の技法を実施し得るシステムの例を示すが、多くの他の同様のまたは異なる環境も可能である。上で論じられかつ示される例示の環境は、単に代表的なものであり、限定されるものではない。
【0047】
図3は、デバイス330(例えば、IoTデバイス)をビルドするためにコードモジュール316を提供するための例示のシステム及び関連の動作を示す。コードモジュール316は、サービスプロバイダ環境300において動作するデバイス構成サービス310から提供されてもよい。デバイス構成サービス310は、デバイス構成サービス310から受信されるようなユーザインターフェース322(例えば、デバイス構成ユーザインターフェース)を提示するためにユーザコンピューティングデバイス320と通信していてもよい。代替的には、デバイス構成サービス310は、ユーザコンピューティングデバイス320で実行しているアプリケーションと通信していてよく、アプリケーションは、デバイス構成サービス310から受信されるようなユーザインターフェース322を提示してもよい。デバイス構成サービス310は、ユーザインターフェース322を介してユーザコンピューティングデバイス320から受信されるユーザ入力に基づいてデバイス330にコードモジュール316を提供してもよい。
【0048】
1つの例では、デバイス構成サービス310は、ユーザインターフェース322を介してユーザコンピューティングデバイス320からデバイス機能定義312を受信してもよい。デバイス機能定義312はデバイス330のユースケースを定義してもよい。例えば、デバイス機能定義312は、デバイス330が、温度センシング、ビデオストリーミング、工場モニタリングなどに使用されることを指示してもよい。
【0049】
それゆえに、デバイス構成サービス310は、デバイス330を設計しかつビルドするためにハードウェアコンポーネント336及び互換性があるコードモジュール316を指示するデバイスパッケージを推奨し得る。例えば、デバイス構成サービス310は、以前に使用されたデバイスパッケージ318のデータストア317にアクセスすることに基づいて推奨されるデバイスパッケージを識別してもよい。他のユーザは、データストア317に(特定のユースケースに対して以前に使用されたハードウェアコンポーネント及びコードモジュールを指示する)これらのデバイスパッケージをアップロードしてもよく、この情報はデバイス構成サービス310に対してアクセス可能であってよい。例えば、デバイス構成サービス310は、ユーザによって利用された(コードモジュールを含んでもよい)以前に使用されたデバイスパッケージ318を含む、ユーザに対する(Gitレポジトリなどの)バージョン管理システムレポジトリを作成してもよく、バージョン管理システムレポジトリは、バージョン管理システムレポジトリに含まれる(コードモジュールを含み得る)以前に使用されたデバイスパッケージ318を、他のユーザに対してアクセス可能にできるようにクローンまたは複製され得る。デバイス構成サービス310は、デバイス機能定義312における機能性によって定義されるように、デバイス330のユースケースに対応する以前に使用されたデバイスパッケージ318を検索してもよい。デバイス構成サービス310が(例えば、デバイスパッケージと関連付けられた、タグ、フィールド、キーワード、または他の記述子に基づいて)デバイス330のユースケースにマッチするまたはこれと同様のデータストア317において以前に使用されたデバイスパッケージ318を識別する時、デバイス構成サービス310は、デバイス330を設計しかつビルドする時に同様のデバイスパッケージを推奨してもよい。換言すれば、デバイス構成サービス310によって推奨されるデバイスパッケージは、デバイスパッケージ330の固有のユースケースに適合させるハードウェアコンポーネント336及び互換性があるコードモジュール316を指示してもよい。例えば、これらの推奨されたハードウェアコンポーネント336は、デバイス330のための処理及びメモリ仕様、デバイス330のためのセンサ仕様(例えば、温度センサ、運動検出器)、デバイス330のための無線通信仕様(例えば、Bluetooth、Wi-Fi)、デバイス330のためのメッセージングまたはネットワーキング仕様(MQTT、TCP/IP)などを考慮し得る。デバイス構成サービス310は、デバイス機能定義312を考慮してハードウェアコンポーネント336及びコードモジュール316の強み及び弱みに関する情報を提供してもよい。
【0050】
1つの例では、デバイス構成サービス310は、ユーザコンピューティングデバイス320によって指定される実装定義に基づいて推奨されたハードウェアコンポーネント336を定義するためにデバイスパッケージを選択してもよい。例えば、デバイス構成サービス310は、実施態様に基づく高性能のハードウェアコンポーネント336(例えば、向上した処理及びメモリ機能を有するハードウェアコンポーネント)を選択してもよい、または代替的には、デバイス構成サービス310は、実施態様に基づく低性能のハードウェアコンポーネント336(例えば、費用が低減したハードウェアコンポーネント)を選択してもよい。
【0051】
1つの例では、デバイス構成サービス310は、ユーザコンピューティングデバイス320に推奨されるデバイスパッケージを提供してもよい。デバイス構成サービス310は、ユーザインターフェース322を介してユーザコンピューティングデバイス320から推奨されるデバイスパッケージの選択を先に受信していてもよい。この例では、デバイス構成サービス310は、デバイス330での使用のためのデバイスパッケージと関連付けられたコードモジュール316を提供してもよい。
【0052】
代替的な例では、デバイス構成サービス310は、デバイスパッケージと関連付けられていない代替的なコードモジュール316の要求と共に、ユーザコンピューティングデバイス320から推奨されるデバイスパッケージの選択を受信してもよい。この例では、デバイス構成サービス310は、デバイス330での使用のための代替的なコードモジュール316を提供してもよい。換言すれば、ユーザコンピューティングデバイス320は、ユーザインターフェース322を介してデバイスパッケージと関連付けられたコードモジュール316を承認してもよく、代替的には、ユーザコンピューティングデバイス320は、ユーザインターフェース322を介してデバイスパッケージと関連付けられたコードモジュール316の一部を修正してもよい。さらに、ユーザは、推奨されるデバイスパッケージと関連付けられたハードウェアコンポーネント336の一つ一つを使用することに限定されない場合がある。もっと正確に言えば、ユーザは、デバイスパッケージにおいて指示されるある特定のハードウェアコンポーネント336を使用し、かつある特定のデバイスパッケージに含まれない代替的なハードウェアコンポーネント336を選択してもよく、それによって、推奨されるデバイスパッケージはデバイス330を設計しかつビルドするための始点を提供し得る。
【0053】
図4は、コードモジュール440をテストするための例示のシステム及び関連の動作を示す。コードモジュール440は、サービスプロバイダ環境400で動作するデバイス構成サービス410においてテストモジュール420を使用してテストされてもよい。1つの例では、何百ものコードモジュール440は、デバイスを設計しかつビルドする時に顧客によって選択かつ利用されてもよい。コードモジュール440は、デバイス構成サービス410のデータストア430に記憶される依存関係ツリー432においてマッピングされてもよい。依存関係ツリー432はコードモジュール440間の依存関係をマッピングしてもよい。コードモジュール440の数が時間と共に大きくなるにつれ、コードモジュール440をテストすることと関連している複雑さも増大する。従って、コードモジュール440は、複雑さを低減するテストマトリックスを使用してテストされながら、コードモジュール440のある特定の組み合わせが機能的である可能性を改善し得る。1つの例では、コードモジュール440がテストモジュール420によるテストを成功させた時、これらのコードモジュール440は、認定され、かつデバイス構成サービス410によって利用可能にされてもよい。テストされるコードモジュール440の数が増大すると、依存関係ツリー432は増加したコードモジュール440を含む場合がある。
【0054】
1つの例において、コードモジュール440のそれぞれの組み合わせをテストするのではなく、テストモジュール420は、依存関係ツリー432において指示されるように、互いに依存している選択されたコードモジュール440の間のインターフェース450をテストしてもよい。選択されるコードモジュール440は、デバイスを設計しかつビルドする時に利用可能である複数のコードモジュール440に含まれてもよい。コードモジュール440の間のインターフェース450は、コードモジュール440の適切な機能性を保証するためにテストされてもよい。1つの代替的な例では、テストモジュール420は、コードモジュール440の間のインターフェース450をランダムにサンプル化してもよく、テストモジュール420は、増加したコードモジュールの組み合わせが経時的にテストされることを保証するためにサンプリングを経時的に回転させてもよい。テストモジュール420は、コードモジュール440のテストに基づいてテストメトリックス422を生成してもよく、このテストメトリックス422は、どのコードモジュール440が認定され、かつどのコードモジュール440が認定されていないかを指示し得る。
【0055】
一例として、第1のコードモジュール(例えば、イーサネットドライバ、TCP/IPライブラリ、IP層、MQTT層)は、特定のチップセットによって使用される時、5つの依存関係(例えば、第1のコードモジュールに依存している5つの他のコードモジュール)を有してもよい。この例では、テストモジュール420は、第1のコードモジュールと、5つの他のコードモジュールのそれぞれとの間のインターフェースをテストして、第1のコードモジュールと、5つの依存するコードモジュールのそれぞれとの間の互換性及び有用性を保証し得る。別の例として、第1のコードモジュール(例えば、MQTT層)は、第2のコードモジュール(例えば、イーサネットドライバ)を直接呼び出さなくてもよい。もっと正確に言えば、第1のコードモジュール(例えば、MQTT層)は、第3のコードモジュール(例えば、TCP/IP層)を呼び出してもよいが、第2のコードモジュール(例えば、イーサネットドライバ)を直接呼び出す他のモジュール(例えば、TCP/IP層)がある場合がある。従って、テストモジュール420は、互いに依存するモジュール(例えば、第1のコードモジュール及び第3のコードモジュール、ならびに第2のコードモジュール及び第3のコードモジュール)の間のインターフェースをテストしてもよい。
【0056】
図5は、補助デバイス画像534に対する無線による(OTA)更新を行うための例示のシステム及び関連の動作を示す。OTA更新では、サービスプロバイダ環境500において動作する更新サービス530が行われてもよい。OTA更新は、デバイス570(例えば、IoTデバイス)のエージェント572にデータストア532に記憶された補助デバイス画像534を提供することを伴ってもよく、補助デバイス画像534はデバイス570にインストールされてもよい。補助デバイス画像534は、サービスプロバイダ環境500及び(デバイス570がサービスプロバイダ環境500にアクセスするためのエントリポイントとみなされ得る)デバイスゲートウェイ550においてパブリッシュ/サブスクライブデバイス画像ブローカー540を介してデバイス570に提供されてもよい。例えば、デバイス570は、更新サービス530がデバイス570への配信のために補助デバイス画像530をパブリッシュし得るパブリッシュ/サブスクライバデバイス画像ブローカー540によって作成されるトピック542に対するサブスクリプションを有してもよい。
【0057】
1つの例では、サービスプロバイダ環境500におけるデバイス構成サービス510はコードモジュール512の選択を受信してもよい。デバイス構成サービス510はユーザコンピューティングデバイス560からの選択を受信してもよい。デバイス構成サービス510は、コードモジュールをユーザコンピューティングデバイス560に提供してもよい。ユーザコンピューティングデバイス560はコードモジュール512をアセンブルして補助デバイス画像534を生成してもよい。補助デバイス画像534は、デバイス570に新しい機能性を提供し得る、もしくはデバイス570の既存の機能性を増強し得る、または、補助デバイス画像534はデバイス570における既存の問題を解決し得る。
【0058】
ユーザコンピューティングデバイス560は、サービスプロバイダ環境500におけるデータストア532に対して補助デバイス画像534をアップロードしてもよい。更新サービス530は、デバイス570での使用またはインストールのために補助デバイス画像534を安全に配信し得る。更新サービス530は、補助デバイス画像534を、デバイス570によって無線で受信可能であるデータブロックに分割することによって、ダウンロード(またはプッシュ送信)のための補助デバイス画像534を提供してもよい。個々のデータブロックはパブリッシュ/サブスクライバブローカー540を介してメッセージとして送り出され得る。補助デバイス画像534は、補助デバイス画像534が信頼できるソースからのものであることを保証するためのコード署名証明書を使用して署名されてもよい。デバイス570は、更新サービス530から生じる補助デバイス画像534を受信してもよく、その後、補助デバイス画像534をインストールして、新しい機能性を得ること、既存の機能性を増強すること、問題を解決することなどを行ってもよい。
【0059】
図6は、デバイス(例えば、IoTデバイス)をビルドするためにコードモジュールを提供する方法の例を示す。ブロック610にあるように、デバイスを設計する時に利用可能であるハードウェアコンポーネントのリストが提供されてもよい。ハードウェアコンポーネントのリストは、サービスプロバイダ環境において動作するデバイス構成サービスから受信されてもよい。ハードウェアコンポーネントのリストに含まれるハードウェアコンポーネントは、デバイス構成サービスによって先に認定されていてもよい。デバイス構成サービスは、ハードウェアコンポーネントのリストに含まれないハードウェアコンポーネントを提供しない場合がある。
【0060】
ブロック620にあるように、ハードウェアコンポーネントのリストからのハードウェアコンポーネントの選択が受信されてもよい。デバイス構成サービスは、ハードウェアコンポーネントのリストからのハードウェアコンポーネントの選択を可能にするユーザインターフェースを提供してもよい。例として、ユーザは、デバイスタイプに基づくデバイス(例えば、電気掃除機、スマートホームメータ)に対するユーザインターフェースを介して適切なハードウェアコンポーネントを選択し得る。
【0061】
ブロック630にあるように、デバイスのユースケースを定義するデバイス機能定義が受信されてもよい。デバイス機能定義は、サービスプロバイダ環境において動作するデバイス構成サービスから受信されてもよい。デバイス機能情報はユーザコンピューティングデバイスから受信されてもよい。デバイス機能定義は、ビルドされるデバイスの本来の用途または目的を表してもよい。
【0062】
ブロック640にあるように、選択されるハードウェアコンポーネントと互換性があるコードモジュールのリストが提供されてもよい。認定されたコードモジュールのリストは、デバイス機能定義に指示されるように、デバイスのユースケースに基づいてフィルタリングされてもよい。さらに、リスト上の認定されたコードモジュールは、ユーザインターフェースを介して先に選択されたハードウェアコンポーネントと互換性がある場合がある。コードモジュールは、ファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイルなどを含んでもよい。
【0063】
ブロック650にあるように、コードモジュールのリストからのコードモジュールの選択は受信されてもよい。例えば、デバイス構成サービスによって提供されるユーザインターフェースは、コードモジュールのリストからのコードモジュールの選択を可能にしてもよい。コードモジュールは、ハードウェアコンポーネントがデバイスにおいて動作できるようにしてもよい。換言すれば、固有のコードモジュールは、デバイスにおける固有の対応するハードウェアコンポーネントの動作及び/またはこれとのインターフェースを可能にしてもよい。
【0064】
ブロック660にあるように、コードモジュールはデバイスを設計するために提供されてもよい。例えば、デバイス構成サービスは、ラップトップまたはパーソナルコンピュータなどのユーザコンピューティングデバイスにコードモジュールを提供してもよい。ユーザコンピューティングデバイスは、コードモジュールからデバイス画像を生成後、デバイス画像を、IoTデバイスなどのデバイスにロードしてもよい。デバイス画像は、デバイスにおけるハードウェアコンポーネントが正確に機能できるようにし得るデバイスでインストールされてもよい。さらに、構成パラメータのセットはコードモジュールが与えられてもよい。構成パラメータのセットは、デバイス機能定義において指示されるように、デバイスのユースケースに基づいて選択されてもよく、構成パラメータのセットはデバイス画像を生成する時に使用されてもよい。
【0065】
図7は、デバイス(例えば、IoTデバイス)をビルドするためにコードモジュールを提供する方法の例を示す。ブロック710にあるように、デバイスに対するデバイス機能定義が受信されてもよい。例えば、サービスプロバイダ環境において動作するデバイス構成サービスは、デバイス機能定義を受信可能にするユーザインターフェースを提供してもよい。デバイス機能定義は、デバイスのユースケースを表してもよい。換言すれば、デバイス機能定義は、デバイスが設計されている時にデバイスの意図されるユースケースを定義し得る。
【0066】
ブロック720にあるように、ハードウェアコンポーネントおよび互換性があるコードモジュールを指示するデバイスパッケージは、デバイスをビルドするために推奨されてもよい。デバイス構成サービスは、デバイス機能定義に指示されるように、デバイスのユースケースに合う、以前に使用されたデバイスパッケージからのデバイスに対して推奨されるデバイスパッケージを識別してもよい。換言すれば、デバイス構成サービスは、現在設計されているデバイスと比較して同様のユースケースによるデバイスパッケージを識別してもよく、デバイス構成サービスは、これらのデバイスパッケージと関連付けられる、ハードウェアコンポーネント及び互換性があるコードモジュールを推奨してもよい。デバイス構成サービスは、デバイス機能定義に基づいてデバイスに適している特徴または特性を有する、ハードウェアコンポーネント及び互換性があるソフトウェアコンポーネントによるデバイスパッケージを推奨してもよい。
【0067】
ブロック730にあるように、デバイスパッケージの選択が受信されてもよい。例えば、デバイス構成サービスによって提供されるユーザインターフェースは、デバイスを設計しかつビルドしているユーザによる推奨されるデバイスパッケージの選択を可能にしてもよい。デバイスパッケージを選択することによって、ユーザは、デバイスパッケージと関連付けられる、ハードウェアコンポーネント及び互換性があるコードモジュールを選択してもよい。コードモジュールはハードウェアコンポーネントがデバイスにおいて動作できるようにしてもよい。換言すれば、固有のコードモジュールは、デバイスにおける固有の対応するハードウェアコンポーネントの動作及び/またはこれによるインターフェース接続を可能にし得る。
【0068】
ブロック740にあるように、デバイスパッケージと関連付けられたコードモジュールは、デバイスのダウンロード及びインストールのために提供されてもよい。例えば、デバイス構成サービスは、ラップトップまたはパーソナルコンピュータなどのユーザコンピューティングデバイスにコードモジュールを提供してもよい。ユーザコンピューティングデバイスは、コードモジュールからデバイス画像を生成後、IoTなどのデバイスにデバイス画像をロードしてもよい。
【0069】
図8は、デバイス(例えば、IoTデバイス)をビルドするためにコードモジュールを提供する方法の例を示す。ブロック810にあるように、制約されたハードウェア機能を有するデバイスを設計する際に使用されるハードウェア仕様が受信されてもよい。ハードウェア仕様は、設計されているデバイスにおいて使用される1つまたは複数のハードウェアコンポーネントを定義してもよい。さらに、デバイスの制約されたハードウェア機能は、デバイスの処理及びメモリ機能の限定のみならず、デバイスにある特定のハードウェア機能がないこと(例えば、Wi-Fi機能、Bluetooth機能、デジタル信号処理(DSP)機能などがないこと)を指す場合がある。
【0070】
ブロック820にあるように、デバイスのデバイス構成が受信されてもよい。デバイス構成はデバイスのユースケースを含んでもよい。さらに、デバイス構成は、デバイスにロードされる対象のコードモジュールに関する入力を含んでもよい。ユースケースは、デバイスの特定の用途、またはデバイスによって獲得される固有の特徴を表してもよい。コードモジュールに関する入力はユーザから受信されてもよい。例えば、入力は、デバイスを設計する時にユーザにとって関心がある特定のコードモジュールに関する入力を表してもよい。
【0071】
ブロック830にあるように、デバイスの制約されたハードウェア機能及びデバイスのデバイス構成を満足させるハードウェア仕様と互換性があるコードモジュールのリストが判断されてもよい。換言すれば、コードモジュールのリストは、デバイスの制約されたハードウェア機能を満足させるコードモジュール(例えば、デバイスに含まれるものより多い処理及びメモリを消費しないコードモジュール)を含むように、かつデバイスのデバイス構成(例えば、対象のコードモジュールに関するユースケース及び/またはユーザ入力)に合うことはもとより、ハードウェア仕様と互換性があるように判断されてもよい。
【0072】
ブロック840にあるように、コードモジュールのリストが提供されてもよい。例えば、コードモジュールのリストはユーザインターフェースを介して提供されてもよい。コードモジュールは、ファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイルなどを含んでもよい。ブロック850において、コードモジュールのリストからのコードモジュールの選択が受信されてもよい。コードモジュールの選択はユーザインターフェースを介して受信されてもよい。ブロック860にあるように、コードモジュールのリストから選択されたコードモジュールは、デバイスを設計する際に使用するために提供されてもよい。例えば、選択されたコードモジュールを使用してデバイス画像を生成してもよく、デバイス画像はデバイスにロードされてもよい。
【0073】
図9は、本技術が実行し得るいくつかのコンピューティングインスタンス904a~dを実行かつ管理するために使用され得る例示のコンピューティングサービス900を示すブロック図である。とりわけ、示されるコンピューティングサービス900は、本明細書に説明される技術が使用され得る1つの環境を示す。コンピューティングサービス900は、例えば、ホストコンピューティングインスタンス904a~dに対して使用されてもよいさまざまな仮想化サービスリソースを含む1つのタイプの環境であってよい。
【0074】
コンピューティングサービス900は、最終受信者のコミュニティに対するソフトウェアサービスとして、計算、記憶、及びネットワーキング機能の配信を可能にしてもよい。1つの例では、コンピューティングサービス900は、組織によってまたはこの代理として組織のために確立されてもよい。すなわち、コンピューティングサービス900は「プライベートクラウド環境」を供給し得る。別の例では、コンピューティングサービス900はマルチテナント環境をサポートしてもよく、ここで、複数の顧客は独立して動作してもよい(すなわち、パブリッククラウド環境)。一般的に言えば、コンピューティングサービス900は、以下のモデル、Infrastructure as a Service(「IaaS」)、Platform as a Service(「PaaS」)、及び/またはSoftware as a Service(「SaaS」)を提供してもよい。他のモデルが提供され得る。IaaSモデルについて、コンピューティングサービス900は物理または仮想マシン及び他のリソースとしてコンピュータを供給してもよい。仮想マシンは、さらに後述されるように、ハイパーバイザによってゲストとして実行され得る。PaaSモデルは、オペレーティングシステム、プログラミング言語実行環境、データベース、及びウェブサーバを含んでもよいコンピューティングプラットフォームを配信する。
【0075】
アプリケーション開発者は、基礎を成すハードウェア及びソフトウェアを買い求めかつ管理する費用を負担することなくコンピューティングサービスプラットフォームでこれらのソフトウェアソリューションを開発しかつ実行し得る。SaaSモデルによって、コンピューティングサービス900におけるアプリケーションソフトウェアのインストール及び動作が可能になる。最終顧客は、例えば、ウェブブラウザまたは他の軽量クライアントアプリケーションを実行する、デスクトップコンピュータ、ラップトップ、タブレット、スマートフォンなど、ネットワーククライアントデバイスを使用してコンピューティングサービス900にアクセスしてもよい。当技術に精通した者は、コンピューティングサービス900が「クラウド」環境として説明され得ることを認識するであろう。
【0076】
詳細に示されるコンピューティングサービス900は、複数のサーバコンピュータ902a~dを含んでもよい。サーバコンピュータ902a~dはまた、物理ホストとして既知であり得る。4つのサーバコンピュータが示されるが、任意の数が使用され得、大規模なデータセンタは何千ものサーバコンピュータを含む場合がある。コンピューティングサービス900は、コンピューティングインスタンス904a~dを実行するためのコンピューティングリソースを提供してもよい。コンピューティングインスタンス904a~dは、例えば、仮想マシンであってよい。仮想マシンは、物理マシンのようなアプリケーションを実行するマシン(すなわち、コンピュータ)のソフトウェア実施態様のインスタンスであってよい。仮想マシンの例では、サーバコンピュータ902a~dのそれぞれは、インスタンスを実行することが可能なインスタンスマネージャ908a~dを実行するように構成されてもよい。インスタンスマネージャ908a~dは、ハイパーバイザ、仮想マシンマネージャ(VMM)、または、単一サーバで複数のコンピューティングインスタンス904a~dの実行を可能にするように構成される別のタイプのプログラムであってよい。さらに、コンピューティングインスタンス904a~dのそれぞれは1つまたは複数のアプリケーションを実行するように構成されてもよい。
【0077】
サーバ914は、本技術を実装する、またはコンピューティングサービス900及びコンピューティングインスタンス904a~dの動作を管理するためのソフトウェアコンポーネントを実行するために予約されてもよい。例えば、サーバコンピュータ914はデバイス構成サービス915を実行してもよい。デバイス構成サービス915は、デバイスを設計する時に使用されるハードウェアコンポーネントの指示を受信してもよい。デバイス構成サービス915は、ハードウェアコンポーネントと互換性があるコードモジュールのリストを提供してもよい。コードモジュールのリストは、デバイスのユースケースに基づいてもよい。デバイス構成サービス915は、ハードウェアコンポーネントのリストから選択されるハードウェアコンポーネントと互換性があるコードモジュールのリストからのコードモジュールの選択を受信してもよい。デバイス構成サービス915は、デバイスでの使用のためにコードモジュールを提供し得る。
【0078】
サーバコンピュータ916は管理コンポーネント918を実行してもよい。顧客は、管理コンポーネント918にアクセスして、顧客によって購入されたコンピューティングインスタンス904a~dの動作のさまざまな態様を構成してもよい。例えば、顧客は、コンピューティングインスタンス904a~dをセットアップし、かつコンピューティングインスタンス904a~dの構成に対して変更を行ってもよい。
【0079】
展開コンポーネント922を使用して、コンピューティングインスタンス904a~dの展開時に顧客を支援してもよい。展開コンポーネント922は、アカウント所有者名、クレジットカード情報、所有者の国など、コンピューティングインスタンス904a~dと関連付けられたアカウント情報にアクセスしてもよい。展開コンポーネント922は、コンピューティングインスタンス904a~dがどのように構成され得るかを表すデータを含む、顧客からの構成を受信してもよい。例えば、構成は、オペレーティングシステムを含み、コンピューティングインスタンス904a~dにインストールされる1つまたは複数のアプリケーションを提供し、コンピューティングインスタンス904a~dを構成するために実行されるスクリプト及び/または他のタイプのコードを提供し、アプリケーションキャッシュがどのように準備されるかを指定するキャッシュロジック、及び他のタイプの情報を提供してもよい。展開コンポーネント922は、顧客提供の構成及びキャッシュロジックを利用して、コンピューティングインスタンス904a~dを、構成、用意、及び起動し得る。構成、キャッシュロジック、及び他の情報は、管理コンポーネント918にアクセスする顧客によって、またはこの情報を展開コンポーネント922に直接提供することによって指定されてもよい。
【0080】
顧客アカウント情報924は、マルチテナント環境の顧客と関連付けられたいずれの所望される情報も含んでもよい。例えば、顧客アカウント情報は、顧客、顧客の住所、課金情報、ライセンス情報、インスタンスを起動するためのカスタマイズパラメータ、スケジューリング情報などのための一意の識別子を含んでもよい。上述されるように、顧客アカウント情報924はまた、API要求に対する非同期応答の暗号化の際に使用されるセキュリティ情報を含んでもよい。「非同期」とは、API応答が、最初の要求後の、及び異なるネットワーク接続によるどんな時にも行われてもよいことを意味する。
【0081】
ネットワーク910は、コンピューティングサービス900及びサーバコンピュータ902a~d、916を相互接続するために利用されてもよい。ネットワーク910は、ローカルエリアネットワーク(LAN)であってもよく、かつ、広域ネットワーク(WAN)912またはインターネットに接続されてもよく、それによって、最終顧客はコンピューティングサービス900にアクセスし得る。さらに、ネットワーク910は、サーバ902a~d間の通信を提供するために物理ネットワークにオーバーレイされる仮想ネットワークを含んでもよい。図9に示されるネットワークトポロジは、より多くのネットワーク及びネットワーキングデバイスが本明細書に開示されるさまざまなコンピューティングシステムを相互接続するために利用され得るため、簡略化されている。
【0082】
図10は、この技術のモジュールまたはコードコンポーネントが実行し得るコンピューティングデバイス1010を示す。該技術の高水準の例が実行され得るコンピューティングデバイス1010が示されている。コンピューティングデバイス1010は、メモリデバイス1020と通信している1つまたは複数のプロセッサ1012を含み得る。コンピューティングデバイスは、コンピューティングデバイスにおけるコンポーネントに対するローカル通信インターフェース1018を含んでもよい。例えば、ローカル通信インターフェースは、要望に応じて、ローカルデータバス及び/または任意の関連のアドレスもしくは制御バスであってよい。
【0083】
メモリデバイス1020は、モジュール1024、または、プロセッサ(複数可)1012によって実行可能なコードコンポーネント、及びモジュール1024についてのデータを含有し得る。モジュール1024は先述した機能を実行してもよい。データストア1022はまた、プロセッサ(複数可)1012によって実行可能であるオペレーティングシステムと共にモジュール1024及び他のアプリケーションに関連しているデータを記憶するためにメモリデバイス1020に位置していてもよい。
【0084】
他のアプリケーションはまた、メモリデバイス1020に記憶されてもよく、プロセッサ(複数可)1012によって実行可能であってよい。本明細書に論じられるコンポーネントまたはモジュールは、混成した方法を使用して、コンパイル、解釈、または実行される高水準プログラミング言語を使用するソフトウェアの形態で実装されてもよい。
【0085】
コンピューティングデバイスはまた、コンピューティングデバイスによって使用可能であるI/O(入力/出力)デバイスにアクセスしてもよい。I/Oデバイスの例は、コンピューティングデバイスからの出力を表示するために利用可能なディスプレイスクリーンである。他の既知のI/Oデバイスは、必要に応じてコンピューティングデバイスによって使用され得る。ネットワーキングデバイス1016及び同様の通信デバイスはコンピューティングデバイスに含まれてもよい。ネットワーキングデバイス1016は、インターネット、LAN、WAN、または他のコンピューティングネットワークに接続する有線または無線ネットワーキングデバイスであってよい。
【0086】
メモリデバイス1020に記憶されるように示されているコンポーネントまたはモジュールは、プロセッサ1012によって実行されてもよい。「実行可能な」という用語は、プロセッサ1012によって実行され得る形態にあるプログラムファイルを意味し得る。例えば、高水準言語のプログラムは、メモリデバイス1020のランダムアクセス部分にロードされ、かつプロセッサ1012によって実行され得るフォーマットにおける機械語にコンパイルされてもよい、または、ソースコードは、別の実行可能プログラムによってロードされ、かつプロセッサによって実行されるメモリのランダムアクセス部分において命令を生成するために解釈されてもよい。実行可能プログラムは、メモリデバイス1020の任意の部分またはコンポーネントに記憶されてもよい。例えば、メモリデバイス1020は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、フラッシュメモリ、ソリッドステートドライブ、メモリカード、ハードドライブ、光ディスク、フロッピーディスク、磁気テープ、または任意の他のメモリコンポーネントであってよい。
【0087】
プロセッサ1012は複数のプロセッサを代表するものであってもよく、メモリ1020は処理回路に並列に動作する複数のメモリユニットを代表するものであってよい。これによって、システムにおけるプロセス及びデータに対する並列処理チャネルが提供され得る。ローカルインターフェース1018は、複数のプロセッサのいずれかと複数のメモリのいずれかとの間の通信を容易にするためのネットワークとして使用されてもよい。ローカルインターフェース1018は、負荷バランシング、大量データ転送、及び同様のシステムなどの通信を調整するように設計される追加のシステムを使用してもよい。
【0088】
この技術に対して提示されるフローチャートは、固有の実行順序を含意する場合があり、この実行順序は示されるものと異なっていてもよい。例えば、もう2つのブロックの順序は、示される順序に対して再配置されてもよい。さらに、連続して示される2つ以上のブロックは、並列にまたは部分的な並列化で実行されてもよい。いくつかの構成では、フローチャートに示される1つまたは複数のブロックは省略またはスキップされてもよい。任意の数のカウンタ、状態変数、警告セマフォー、またはメッセージは、ユーティリティプログラム、会計、性能、測定、及びトラブルシューティングを向上させる目的でまたは同様の理由で論理フローに追加される場合がある。
【0089】
本明細書において説明される機能ユニットのいくつかは、これらの実施態様の独立性をより詳細に強調するために、モジュールとしてラベル設定されている。例えば、モジュールは、カスタムVLSI回路もしくはゲートアレイ、ロジックチップなどの既製の半導体、トランジスタ、または他の個別部品を含むハードウェア回路として実装されてもよい。モジュールはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、またはプログラマブルロジックデバイスなどのプログラマブルハードウェアデバイスにおいて実装されてもよい。
【0090】
モジュールはまた、さまざまなタイプのプロセッサによる実行のためにソフトウェアにおいて実装されてもよい。実行可能コードの識別されたモジュールは例えば、オブジェクト、手順、または関数として整理され得るコンピュータ命令の1つまたは複数のブロックを含んでもよい。それにもかかわらず、識別されたモジュールの実行可能ファイルは、共に物理的に位置する必要はないが、モジュールを含み、かつ共に論理的に結合される時のモジュールの表明された目的を達成する種々の位置に記憶される本質的に異なる命令を含んでもよい。
【0091】
実際は、実行可能コードのモジュールは単一の命令または多くの命令であってもよく、さらには、いくつかの種々のコードセグメントで、種々のプログラムの間で、及び数個のメモリデバイスにわたって分散されてもよい。同様に、運用データは、モジュール内で本明細書において識別されかつ示され得、任意の適した形態で組み込まれ、かつ任意の適したタイプのデータ構造内に整理されてもよい。運用データは、単一のデータセットとして収集されてもよい、または種々のストレージデバイスを含む種々の場所で分散されてもよい。モジュールは、所望の機能を実行するように動作可能であるエージェントを含んで、受動的または能動的であってよい。
【0092】
本明細書に説明される技術はまた、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報の記憶のための任意の技術によって実装される、揮発性及び不揮発性、取り外し可能及び取り外し不可能な媒体を含むコンピュータ可読記憶媒体に記憶可能である。コンピュータ可読記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリ、もしくは他のメモリ技術、CD-ROM,デジタル多用途ディスク(DVD)、もしくは他の光学式記憶、磁気カセット、磁気テープ、磁気ディスクストレージ、もしくは他の磁気ストレージデバイス、または、所望の情報及び所望の技術を記憶するために使用可能である任意の他のコンピュータ記憶媒体を含むが、これらに限定されない。
【0093】
本明細書に説明されるデバイスはまた、通信接続またはネットワーキング装置、及びデバイスが他のデバイスと通信できるようにするネットワーキング接続を含有してもよい。通信接続は通信媒体の例である。通信媒体は典型的には、コンピュータ可読命令、データ構造、プログラムモジュール、及び搬送波または他の移送機構などの変調データ信号における他のデータを具現化し、かつ任意の情報配信媒体を含む。「変調データ信号」は、この特性セットの1つまたは複数を有する、または信号における情報を符号化するように変更されていることを意味する。限定ではなく例として、通信媒体は、有線ネットワークまたは直接有線接続、及び音響、無線周波数、赤外線、及び他の無線媒体などの無線媒体を含む。本明細書に使用されるようなコンピュータ可読媒体という用語は、通信媒体を含む。
【0094】
図面に示される例を参照し、本明細書においてこれら例を説明するために固有の言語が使用された。それにもかかわらず、これらによって本技術の範囲の限定は意図されないことは理解されるであろう。当業者が本開示を把握すると、本明細書に示される特徴の改変及びさらなる修正、ならびに、本明細書に示される例の追加的応用に想到するであろうが、それらは本開示の範囲内と見なされるものとする。
【0095】
上述の事項は、以下の条項を考慮してより良く理解され得る。
1.1つまたは複数のプロセッサによって実行される命令が具現化されている非一時的な機械可読記憶媒体であって、前記命令は、
サービスプロバイダ環境において動作するデバイス構成サービスから、デバイスを設計する時に利用可能なハードウェアコンポーネントのリストを提供することと、
前記ハードウェアコンポーネントのリストからハードウェアコンポーネントの選択を受信することと、
前記デバイスのユースケースを定義するデバイス機能定義を受信することと、
選択されたハードウェアコンポーネントと互換性があるコードモジュールのリストを提供することであって、前記コードモジュールのリストは前記デバイスの前記ユースケースに基づいてフィルタリングされる、前記コードモジュールのリストを提供することと、
前記コードモジュールのリストからコードモジュールの選択を受信することであって、前記コードモジュールは、前記ハードウェアコンポーネントのリストから選択される前記ハードウェアコンポーネントを前記デバイスにおいて動作できるようにする、前記コードモジュールの選択を受信することと、
前記デバイスを設計するために前記コードモジュールを提供することと、
を含む、前記非一時的な機械可読記憶媒体。
【0096】
2.前記デバイスの前記ユースケースに部分的に基づいて前記コードモジュールに対する構成パラメータのセットを識別することと、
前記構成パラメータのセットに前記コードモジュールを提供することと、
をさらに含む、条項1に記載の非一時的な機械可読記憶媒体。
【0097】
3.前記デバイスでの使用のために前記コードモジュールを自動的に選択する従属関係ツリーを生成することをさらに含む、条項1に記載の非一時的な機械可読記憶媒体。
【0098】
4.制約されたハードウェア機能を有するデバイスを設計する際に使用されるハードウェア仕様を受信することと、
前記デバイスのデバイス構成を受信することであって、前記デバイス構成は前記デバイスのユースケースを含む、前記デバイス構成を受信することと、
前記デバイスの前記制約されたハードウェア機能及び前記デバイス構成を満足させる前記ハードウェア仕様と互換性があるコードモジュールのリストを判断することと、
前記コードモジュールのリストを提供することと、
前記コードモジュールのリストからコードモジュールの選択を受信することと、
前記デバイスを設計する際に使用するために前記コードモジュールのリストから選択される前記コードモジュールを提供することと、
を含む、方法。
【0099】
5.サービスプロバイダ環境におけるデバイス画像ビルドサービスを使用して前記コードモジュールを含むデバイス画像を生成することと、
前記デバイスでの配信及びインストールのために前記デバイス画像を提供することと、
をさらに含む、条項4に記載の方法。
【0100】
6.前記デバイスの前記デバイス構成を定義するデバイス機能定義を受信することであって、前記デバイス構成は前記デバイスにロードされる対象のコードモジュールに関する入力をさらに含む、前記デバイス機能定義を受信することと、
をさらに含む、条項4に記載の方法。
【0101】
7.前記デバイスで使用される前記コードモジュールは、前記デバイスで実行するリアルタイム動作システム(RTOS)と互換性がある、条項4に記載の方法。
【0102】
8.前記デバイスで使用される前記コードモジュールの選択を可能にするユーザインターフェースを提供することをさらに含む、条項4に記載の方法。
【0103】
9.前記デバイスを設計する時に利用可能である複数のコードモジュールに含まれるコードモジュールの間のインターフェースをテストすることであって、前記コードモジュールの間の前記インターフェースは、前記複数のコードモジュールに対して適切な機能性を保証するためにテストされる、前記インターフェースをテストすることをさらに含む、条項4に記載の方法。
【0104】
10.前記コードモジュールのリストから選択される前記コードモジュールから補助デバイス画像を作成することであって、前記補助デバイス画像はサービスプロバイダ環境において動作する更新サービスにアップロードされる、前記補助デバイス画像を作成することと、
前記更新サービスから、前記デバイスでインストールするための更新として前記補助デバイス画像を提供することであって、前記補助デバイス画像は前記デバイスに対して先に受信したデバイス画像の機能を増強させる、前記補助デバイス画像を提供することと、
をさらに含む、条項4に記載の方法。
【0105】
11.前記デバイスに対する前記構成に部分的に基づいて前記コードモジュールに対する構成パラメータのセットを修正することと、
前記構成パラメータのセットに前記コードモジュールを提供することと、
をさらに含む、条項4に記載の方法。
【0106】
12.サービスプロバイダ環境において動作するデバイス構成サービスから前記コードモジュールを提供することをさらに含む、条項4に記載の方法。
【0107】
13.前記デバイス上での使用のために前記コードモジュールを自動的に選択する従属関係ツリーを、前記従属関係ツリーにおいて定義されるソフトウェア従属関係に従って生成することをさらに含む、条項4に記載の方法。
【0108】
14.前記デバイスに対する前記コードモジュールは、マイクロコントローラモジュール、デジタル信号処理(DSP)モジュール、通信モジュール、センサモジュール、カメラモジュール、トランシーバモジュール、または電力管理モジュールの1つまたは複数を含む、条項4に記載の方法。
【0109】
15.少なくとも1つのプロセッサと、
少なくとも1つのメモリデバイスと、を備えるシステムであって、
前記少なくとも1つのメモリデバイスは、実行される時、前記システムに、
前記デバイスに対するデバイス機能定義を受信することであって、前記デバイス機能定義は前記デバイスのユースケースを表す、前記デバイス機能定義を受信することと、
前記デバイスをビルドするためにハードウェアコンポーネント及び互換性があるコードモジュールを指示するデバイスパッケージを推奨することであって、前記デバイスに対して推奨される前記デバイスパッケージは、前記デバイスの前記ユースケースに対応する、以前に使用されたデバイスパッケージから識別される、前記デバイスパッケージを推奨することと、
前記デバイスパッケージの選択を受信することと、
前記デバイスでの使用のために前記デバイスパッケージと関連付けられた前記コードモジュールを提供することと、
を行わせる複数のデータ及び命令を記憶するデータストアを含む、前記システム。
【0110】
16.前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスパッケージと関連付けられていない代替的なコードモジュールに対する要求と共に前記デバイスパッケージの選択を受信することと、
前記デバイスを設計する際に使用するために前記代替的なコードモジュールを提供することと、
を行わせる、条項15に記載のシステム。
【0111】
17.前記複数のデータ及び命令は、実行される時、前記システムに、
デバイス画像を、前記コードモジュールから生成しかつ前記デバイスにインストールすることを可能にする前記コードモジュールを提供させる、条項15に記載のシステム。
【0112】
18.前記複数のデータ及び命令は、実行される時、前記システムに、
サービスプロバイダ環境で動作するデバイス構成サービスにおいて、前記デバイスに対する補助コードモジュールの選択を受信することと、
前記デバイスでの使用のために前記補助コードモジュールを提供することであって、前記補助コードモジュールを使用して、前記サービスプロバイダ環境において動作する更新サービスにアップロードされる補助デバイス画像を作成する、前記補助コードモジュールを提供することと、
前記更新サービスから、前記デバイスでインストールするための更新として前記補助デバイス画像を提供することであって、前記補助デバイス画像は前記デバイスに対して、先に受信したデバイス画像の機能を増強させる、前記補助デバイス画像を提供することと、
を行わせる、条項15に記載のシステム。
【0113】
19.前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスの前記ユースケースに部分的に基づいて前記コードモジュールに対する構成パラメータのセットを識別することと、
前記構成パラメータのセットに前記コードモジュールを提供することと、
を行わせる、条項15に記載のシステム。
【0114】
20.前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスパッケージの選択を可能にするユーザインターフェースを提供することを行わせる、条項15に記載のシステム。
【0115】
さらに、説明した特徴、構造、または特性は、1つまたは複数の例において任意の適したやり方で組み合わせられてもよい。前述の説明において、説明した技術の例を十分理解してもらうためのさまざまな構成の例など、多数の具体的詳細が提供された。しかしながら、この技術が、この具体的詳細の1つまたは複数がなく、または他の方法、コンポーネント、デバイスなどによって実践可能であることを、当業者は認識するであろう。他の事例では、この技術の態様を不明瞭にすることを回避するために周知の構造または動作は詳細に示されておらず、説明されていない。
【0116】
主題は、構造的特徴及び/または動作に固有の言語で説明されているが、添付の特許請求の範囲で定義される主題が上述される固有の特徴及び動作に必ずしも限定されないことは理解されたい。もっと正確に言えば、上述される固有の特徴及び作用は、特許請求の範囲を実施する例示の形態として開示されている。説明した技術の趣旨及び範囲から逸脱することなく、多数の修正及び代替的な配置を案出可能である。
図1A
図1B
図2
図3
図4
図5
図6
図7
図8
図9
図10