(57)【特許請求の範囲】
【請求項１】
リードオンリメモリ（ＲＯＭ）から、第１のブートコードの実行を開始することにより、コンピューティングデバイスのブート処理を開始する段階と、
前記コンピューティングデバイスの前記ブート処理中に、前記第１のブートコードの前記実行に割り込むことにより、ワンタイムプログラマブルメモリ（ＯＴＰメモリ）に含まれる複数のヒューズの１つまたは複数のブロックに焼かれた第２のブートコードの実行を可能とする段階と、
前記第２のブートコードが実行された後、前記第１のブートコードの前記実行を再開することにより、前記コンピューティングデバイスの前記ブート処理を継続する段階と、
を備え、前記複数のヒューズの複数の不使用ブロック及び前記複数のヒューズの前記複数の不使用ブロックに関連付けられた複数のエラー訂正コードビットは、前記ＯＴＰメモリの内容が修正不可能であるように焼かれる、方法。
【請求項２】
前記第１のブートコードの前記実行の前記割り込みに応答して、前記ＯＴＰメモリからの前記第２のブートコードを実行する段階をさらに備える、請求項１に記載の方法。
【請求項３】
前記第１のブートコードの前記実行に割り込む段階は、前記第１のブートコードの実行中に、ハードウェア型割り込みを発したことに応答してなされる、請求項１又は２に記載の方法。
【請求項４】
前記ハードウェア型割り込みを発したことに応答して、前記発されたハードウェア型割り込みをクリアにする段階と、前記第２のブートコードの実行をさせる段階と、前記第１のブートコードの実行の予め定められたポイントに戻る段階とをさらに備える、請求項３に記載の方法。
【請求項５】
前記第１のブートコードの実行が戻される前記予め定められたポイントは、前記第１のブートコードの実行が割り込まれるポイントと異なる、請求項４に記載の方法。
【請求項６】
前記第１のブートコードは、前記ＲＯＭが具現されるデバイスまたはチップの製造中に、前記ＲＯＭに書き込まれる、請求項１から５のいずれか１項に記載の方法。
【請求項７】
リードオンリメモリ（ＲＯＭ）からの第１のブートコードの実行を開始する段階であって、前記第１のブートコードの前記実行は、プログラムカウンタを介して進められる、段階と、
前記プログラムカウンタが前記第１のブートコードの予め定められたアドレスに到達したことに応答して、前記第１のブートコードの前記実行に割り込む段階と、
前記第１のブートコードの少なくともいくつかに代えて、ワンタイムプログラマブルメモリ（ＯＴＰメモリ）に含まれる複数のヒューズの１つまたは複数のブロックに焼かれた第２のブートコードを実行する段階と、
前記第２のブートコードの実行完了に応答して、前記ＲＯＭからの前記第１のブートコードの実行を再開するために有効な前記第１のブートコードのアドレスに、前記プログラムカウンタを戻す段階と、
を備え、前記複数のヒューズの複数の不使用ブロック及び前記複数のヒューズの前記複数の不使用ブロックに関連付けられた複数のエラー訂正コードビットは、前記ＯＴＰメモリの内容が修正不可能であるように焼かれる、方法。
【請求項８】
前記第１のブートコードの実行が割り込まれる前記予め定められたアドレス、または前記プログラムカウンタが戻される前記アドレスは、前記ＯＴＰメモリに格納される、請求項７に記載の方法。
【請求項９】
前記第１のブートコード及び前記第２のブートコードの実行は、ブートローダをロードするために有効であり、前記方法は、前記ブートローダに制御を移す前に、前記ブートローダの暗号署名または暗号ハッシュを検証することにより、前記ブートローダの真正性を保証する段階をさらに備える、請求項７または８に記載の方法。
【請求項１０】
前記第１のブートコードの前記実行に割り込む段階は、割り込みを発する段階を含み、前記方法は、前記第２のブートコードを実行する段階の前に、前記発せられた割り込みをクリアする段階をさらに備える、請求項７から９のいずれか１項に記載の方法。
【請求項１１】
前記第１のブートコードの少なくともいくつかは、コーディングエラーを含み、前記プログラムカウンタが戻される前記アドレスは、前記コーディングエラーが実行されないように、前記第１のブートコードの前記コーディングエラーの後に位置する、請求項７から１０のいずれか１項に記載の方法。
【請求項１２】
前記第１のブートコード及び前記第２のブートコードの実行が信頼されたブート処理の少なくとも一部を実装するように、前記第１のブートコードは、前記ＲＯＭに焼かれ、前記第２のブートコードは、前記ＯＴＰメモリに焼かれる、請求項７から１１のいずれか１項に記載の方法。
【請求項１３】
システムオンチップであって、
プログラムカウンタを介して、前記システムオンチップが具現されるデバイスをブートするためのコードを実行するプロセッサと、
前記デバイスのための第１のブートコードを格納するリードオンリメモリ（ＲＯＭ）と、
データを格納するための複数のヒューズの１つまたは複数のブロックを含むワンタイムプログラマブルメモリ（ＯＴＰメモリ）であり、前記ＯＴＰメモリの前記複数のヒューズの１つまたは複数のブロックに焼かれた第２のブートコードを格納する、前記ＯＴＰメモリと、
前記プログラムカウンタが前記第１のブートコードの予め定められたアドレスに遭遇したことに応答して、前記ＲＯＭからの前記第１のブートコードの実行に割り込み、
前記プロセッサに、前記ＯＴＰメモリからの前記第２のブートコードを実行させ、
前記第２のブートコードが実行された後、前記ＲＯＭからの前記第１のブートコードの実行を再開するために有効な前記第１のブートコードのアドレスに、前記プログラムカウンタを戻す
割り込みマネージャと、
を備え、前記複数のヒューズの複数の不使用ブロック及び前記複数のヒューズの前記複数の不使用ブロックに関連付けられた複数のエラー訂正コードビットは、前記ＯＴＰメモリの内容が修正不可能であるように焼かれる、システムオンチップ。
【請求項１４】
前記システムオンチップは、前記第２のブートコードが実行された後、前記プログラムカウンタが戻される前記アドレスを格納するアドレスリンクレジスタを含む、請求項１３に記載のシステムオンチップ。
【請求項１５】
前記割り込みマネージャは、前記第１のブートコードの実行が割り込まれる前記予め定められたアドレスの直後であるアドレスに、前記アドレスリンクレジスタをさらに設定する、請求項１４に記載のシステムオンチップ。
【請求項１６】
前記割り込みマネージャは、前記プロセッサに、前記ＲＯＭに格納された前記第１のブートコードの一部を実行させないために有効な前記予め定められたアドレスの直後ではないアドレスに、前記アドレスリンクレジスタをさらに設定する、請求項１４に記載のシステムオンチップ。
【請求項１７】
前記システムオンチップが具現される前記デバイスは、コンピューティングデバイス、電子デバイスまたは通信デバイスの１つを備える、請求項１３から１６のいずれか１項に記載のシステムオンチップ。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願］
本開示は、２０１３年２月２２日出願の米国仮特許出願第６１／７６８，０９７号に対する優先権を主張し、その開示全体が参照によって本明細書に組み込まれる。
【背景技術】
【０００２】
本明細書において提供される説明の背景は、概して、開示内容を与えすることを目的とする。現在挙げられている複数の発明者の業績は、この背景の項において記載される範囲で、及び出願時には先行技術として認められていない場合がある説明の複数の態様の範囲において、明示的にもまたは暗黙的にも本開示に対する先行技術として認めていない。
【０００３】
コンピューティングデバイス及び電子デバイスは、デバイスの複数のリソースまたは複数のコンポーネントを構成するためのパワーアップに対するブートコードを実行することが多い。一度複数のリソース及び複数のコンポーネントが構成されると、オペレーティングシステムは、ブートコードによってロードされ、実行される。デバイスの制御は、次に、デバイスの複数の機能または複数のアプリケーションを実装する、実行中のオペレーティングシステムに渡される。
【０００４】
承認されていないソフトウェアのデバイス上での実行を防止するために、ブートコードは、オペレーティングシステム及びブートコードの上の複数のソフトウェアレイヤの真正性を認証してもよい。ブートコードは、電源オン時に実行される最低レベルのコードであるため、ブートコードの真正性を保証するために、ブートコードは、デバイスのハードウェアにハードコーディングされることが多い。ブートコードのハードコーディングはブートコードの悪質な変形を防止するが、ハードコーディングは、複数のエラーを修正するためのブートコードの変形をも防止する。従って、ブートコードのエラーを修正するために、デバイスのハードウェアは、再設計及び再生産を必要とすることが多く、これにより、膨大な時間、資金及びリソースを消費する。
【発明の概要】
【０００５】
１つまたは複数の実装の複数の詳細は、以下の複数の添付図面及び明細書において説明される。複数の他の特徴及び利点は、説明及び複数の図面から明らかとなる。この概要自体は、複数の必須の特徴を説明するものと見なされるべきではなく、かつ、特許請求の範囲に係る主題の範囲を限定するために用いられるべきではない。
【０００６】
コンピューティングデバイスのブート処理を開始するために、リードオンリメモリ（ＲＯＭ）からの第１のブートコードの実行を開始するための方法が記載される。方法は、次に、他のメモリからの第２のブートコードの実行を可能とするために、第１のブートコードの実行に割り込む。第２のブートコードが実行された後、コンピューティングデバイスのブート処理を継続するために、第１のブートコードの実行が再開される。
【０００７】
ＲＯＭからのブートコードの実行を開始するための他の方法が記載され、ここで、ブートコードの実行は、プログラムカウンタを介して進められる。プログラムカウンタがブートコードの予め定められたアドレスに到達したことに応答して、ブートコードの実行は、割り込まれる。方法は、次に、ＲＯＭのブートコードのいくつかに代えて、ワンタイムプログラマブル（ＯＴＰ）メモリからの代替ブートコードを実行する。代替ブートコードの実行に応答して、プログラムカウンタは、ＲＯＭからのブートコードの実行を再開するために有効なブートコードのアドレスに戻される。
【０００８】
プロセッサ、ＲＯＭ、ＯＴＰメモリ、及び、プロセッサのプログラムカウンタに応答して、ブートコードにおいて予め定められたアドレスに遭遇したプロセッサによるＲＯＭからのブートコードの実行に割り込むように構成される割り込みマネージャを含むシステムオンチップ（ＳｏＣ）が記載される。割り込みマネージャは、プロセッサにＯＴＰメモリからの追加ブートコードを実行させ、次に、プログラムカウンタを、プロセッサにＲＯＭからのブートコードの実行を再開させるために有効なブートコードにおけるアドレスに戻すようにさらに構成される。
【０００９】
１つまたは複数の実装の複数の詳細は、以下の複数の添付図面及び明細書において説明される。複数の他の特徴及び利点は、説明及び複数の図面から明らかとなる。
【図面の簡単な説明】
【００１０】
複数の図面において、参照番号の最も左の桁は、参照番号が最初に現れる図面の番号を特定する。説明及び複数の図面の異なる複数の例で同じ参照番号を用いる場合、それらは同様の複数の要素を示す。
【図１】１つまたは複数の態様に係る複数のコンピューティングデバイスを有するオペレーション環境を示す。
【図２】１つまたは複数の態様に係るコンピューティングデバイスのブートアーキテクチャの例を示す。
【図３】リードオンリメモリからのブートコードの実行に割り込むための方法を示す。
【図４】ワンタイムプログラマブルメモリからの代替ブートコードを実行するための方法を示す。
【図５】１つまたは複数の態様に係るブートコード及びブートコードパッチの複数の例を示す。
【図６】ブートコードをワンタイムプログラマブルメモリの複数のヒューズに焼くための方法を示す。
【図７】本明細書に記載された複数の技術の複数の態様を実装するためのシステムオンチップ（ＳｏＣ）環境を示す。
【発明を実施するための形態】
【００１１】
リードオンリメモリ（ＲＯＭ）からのブートコードパッチのための複数の従来技術は、典型的には、ブートコードが書き込まれる（例えば、焼かれる）ＲＯＭハードウェアの再生産を必要とする。ＲＯＭハードウェアのこのような再生産は、他に一連のプレシリコン検証、シリコンテープアウトまたはマスキング、ＲＯＭ移植、ＲＯＭハードウェアの製造及びポストシリコン検証を含むことが多い。ブートコードにパッチをするためのＲＯＭハードウェアの再生産自体は、膨大な量の時間、資金及びリソースを消費する。
【００１２】
本開示は、ＲＯＭのブートコードパッチのための複数の装置及び技術を記載し、これらは、他のメモリからの他のブートコード（例えば、代替または追加ブートコード）がブート処理中に実行されることを可能とする。いくつかの態様において、他のメモリは、ＲＯＭを含むハードウェアの製作後に他のブートコードが焼かれるワンタイムプログラマブル（ＯＴＰ）メモリである。ブートコードがシステムオンチップ（ＳｏＣ）において具現される場合、ＳｏＣは、他のコード（例えば、パッチコード）に対するロックアウトメカニズムを与えてもよい。例えば、ブートコード（例えば、ＢｏｏｔＲＯＭ）検証の後、ブートコードが具現される製品の出荷前に、パッチが必要でないと決定される場合、ＳｏＣは、製品寿命にわたりブートコードのセキュリティを保証する機能を無効化する性能を与えてもよい。同様に、ブートコードのパッチが必要な場合、ＳｏＣは、他のブートコードのセキュリティを保証するためにハードウェアの出荷前に一度パッチされたら、ＯＴＰメモリの残りの複数のブロックをロックアウトするための他の性能を与えてもよい。
【００１３】
以下の説明は、オペレーション環境、当該オペレーション環境で使用可能な複数の技術、及び当該オペレーション環境の複数のコンポーネントが具現され得るシステムオンチップ（ＳｏＣ）を記載する。以下の記載において、オペレーション環境を参照して説明するが、あくまでも例として記載する。
【００１４】
［オペレーション環境］
図１は、各々が様々なデータを通信し、これにアクセスし、これを与え、またはこれを処理することが可能な複数のコンピューティングデバイス１０２を有するオペレーション環境１００の例を示す。コンピューティングデバイス１０２は、スマートフォン１０４、タブレットコンピュータ１０６、ネットワーク接続ストレージドライブ１０８（ＮＡＳドライブ１０８）、デジタルカメラ１１０及びインターネットプロトコル対応テレビ１１２（ＩＰＴＶ１１２）を含む。図示されていないが、デスクトップコンピュータ、サーバ、モバイルインターネットデバイス（ＭＩＤ）、ファクシミリ機、プリンタ、デジタルカムコーダ、ネットブック、ウルトラブック、ゲームコンソール、ホームオートメーション端末、モバイルホットスポット、ネットワーク対応メディアプレイヤ等のような、複数のコンピューティングデバイス１０２の他の複数の構成も、検討される。
【００１５】
概して、コンピューティングデバイス１０２は、「オフ」状態から「オン」状態にわたる複数のオペレーション状態を有する。これら複数のオペレーション状態は、完全なオフ状態（機械的オフ）、休止状態、スリープ状態、サスペンド状態、アイドル状態、アクティブ状態等を含んでもよい。より低いオペレーション状態からより高いオペレーション状態に（例えば、オフ状態からアクティブ状態に）移行する場合、コンピューティングデバイス１０２はブートされる。コンピューティングデバイス１０２のブートは、オペレーティングシステムまたは複数のより高レベルアプリケーションによるアクセスのためのコンピューティングデバイス１０２の複数のコンポーネントまたはリソースを構成する低レベルコード（例えば、ブートコードまたはバイナリ）の実行を含む。
【００１６】
各コンピューティングデバイス１０２は、プロセッサコア１１４（例えば、アプリケーションプロセッサコア）及びコンピュータ可読ストレージメディア１１６（ＣＲＭ１１６）を含む。単一のコアとして示されているが、プロセッサコア１１４は、任意の適切な態様（例えば、へテロジニアスマルチコアアプリケーションプロセッサ）で構成され得る任意の適した数及び／または種類の処理コアの１つであってもよい。いくつかの場合、プロセッサコア１１４は、マイクロコントローラ、組み込みコントローラまたはデジタル信号プロセッサのコアとして実装される。
【００１７】
ＣＲＭ１１６は、揮発性メモリ１１８及び不揮発性メモリ１２０を含み、これらは、任意の適切な種類、組み合わせまたは数の内部及び／または外部メモリデバイスを含んでもよい。ＣＲＭ１１６の各メモリは、ハードウェアのオンチップメモリエリア、またはデータインタフェースまたはバスを介してプロセッサコア１１４とデータ通信を行うオフチップメモリデバイスとして実装されてもよい。この特定の例では、揮発性メモリ１１８は、スタティックランダムアクセスメモリ１２２（ＳＲＡＭ１２２）及び同期式ダイナミックランダムアクセスメモリ１２４（ＤＲＡＭ１２４）を含む。代替的に、またはさらに、揮発性メモリ１１８は、ランダムアクセスメモリ（ＲＡＭ）、非同期式ダイナミックＲＡＭ、ダブルデータレートＲＡＭ（ＤＤＲ）等などの、複数の他の適した種類のメモリを含んでもよい。
【００１８】
不揮発性メモリ１２０は、シリアルペリフェラルインタフェース（ＳＰＩ）フラッシュ１２６、ＮＡＮＤフラッシュ１２８、リードオンリメモリ１３０及びワンタイムプログラマブル（ＯＴＰ）メモリ１３２を含む。検討される複数の他の不揮発性メモリは、不揮発性ＲＡＭ（ＮＶＲＡＭ）、電気的消去可能プログラマブルＲＯＭ、組み込みマルチメディアカード（ｅＭＭＣ）デバイス、ＮＯＲフラッシュ、シングルレベルセル（ＳＬＣ）フラッシュ、マルチレベルセル（ＭＬＣ）フラッシュ等を含む。この特定の例では、ＲＯＭ１３０及びＯＴＰメモリ１３２は、オンチップメモリエリアとして実装され、これらは、チップの様々な金属または半導体レイヤに製造される。
【００１９】
不揮発性メモリ１２０は、パワーダウンまたはサスペンドされる場合に、コンピューティングデバイス１０２のデータを持続的に格納する。コンピューティングデバイス１０２のブートコードは、ＳＰＩフラッシュ１２６、ＮＡＮＤフラッシュ１２８及びＲＯＭ１３０などの、１つまたは複数の不揮発性メモリコンポーネントに格納される。例えば、最低レベルまたはセキュアなブートコードは、ＲＯＭ１３０を含むチップの製造中にＲＯＭ１３０に書き込まれ、または焼かれる。こうすることによって、ブートＲＯＭとも称されるＲＯＭ１３０のブートコードは、チップの製造後は修正不可能である。ＲＯＭ１３０の修正不可能な性質は、ＲＯＭ１３０に格納されたブートコードの真正性及びセキュリティを保証する。コンピューティングデバイス１０２のより高レベルのブートコードは、それぞれがＳＰＩフラッシュ１２６及びＮＡＮＤフラッシュ１２８に格納される複数のブートローダとして実装される。ＳＰＩフラッシュ１２６及びＮＡＮＤフラッシュ１２８の複数の内容は修正可能またはユーザアクセス可能であるため、これらの複数のデバイスに格納されるより高レベルのブートコードは、セキュアではない。
【００２０】
いくつかの態様において、ブートコードは、一度に書き込み可能なＯＴＰメモリ１３２に書き込まれる。ＯＴＰメモリ１３２は、それぞれが設定可能なバイナリ値を表す複数のヒューズの複数のブロックを含む。より詳細には、ＯＴＰメモリ１３２は、その全てが１またはゼロの複数のブロックなどの初期またはデフォルト状態に設定された複数のヒューズを有するように製造される。データをＯＴＰメモリ１３２に書き込むために、複数の適切なヒューズがデフォルト状態から非デフォルト状態に焼かれることにより、所望のバイナリ値を示す。従って、ＯＴＰメモリ１３２のヒューズが一度非デフォルト状態に焼かれると、もはやヒューズは他のデータをＯＴＰメモリ１３２に書き込むために有用ではなくなる。代替的に、またはさらに、ＯＴＰメモリ１３２の複数の内容は、複数の不使用ヒューズブロック及び複数の不使用ヒューズブロックと関連付けられた複数のエラー訂正コードビットの複数のヒューズを焼くことによって、永久的にロックされてもよい。
【００２１】
コンピューティングデバイス１０２の複数のオペレーティングシステム、アプリケーションまたはユーザデータ（不図示）は、揮発性メモリ１１８、不揮発性メモリ１２０または任意の他の適した種類のＣＲＭ１１６によって格納され、または、これらから実行されてもよい。代替的に、またはさらに、コンピューティングデバイス１０２の複数のオペレーティングシステム及び／または複数のアプリケーションは、ファームウェアまたは複数の他のプロセッサ実行可能命令、バイナリまたはコードとして、具現されてもよい。デバイス１０２の複数のオペレーティングシステム及び複数のアプリケーションは、プロセッサコア１１４によって実行可能であることにより、コンピューティングデバイス１０２のユーザインタフェース、複数の様々な機能及び／または複数のサービスを与える。
【００２２】
ＣＲＭ１１６は、割り込みマネージャ１３４をさらに含み、これは、この特定の例において、様々な複数の機能を実装するためにプロセッサコア１１４によって実行可能な複数のプロセッサ実行可能命令として具現される。代替的に、またはさらに、割り込みマネージャ１３４は、部分的にまたは全体として、ファームウェアもしくはハードウェア（不図示）またはそれらの任意の適切な組み合せを介して実装されてもよい。いくつかの場合、割り込みマネージャ１３４は、ＲＯＭ１３０またはＲＯＭ１３０が存在するチップの製作（例えば、製造）中に、ＲＯＭ１３０のブートコードにハードコーディングされる。割り込みマネージャ１３４は、複数の他のメモリからのブートコードの実行を可能とするために、ＲＯＭ１３０からのブートコードの実行に割り込んでもよい。割り込みマネージャ１３４の実装及び使用は、様々であり、以下に記載される。
【００２３】
コンピューティングデバイス１０２は、複数のＩ／Ｏポート１３６、ディスプレイ１３８またはネットワークインタフェース１４０をさらに含んでもよい。複数のＩ／Ｏポート１３６は、コンピューティングデバイス１０２が複数の他のデバイスまたは複数のユーザとインタラクトすることを可能とする。複数のＩ／Ｏポート１３６は、ＵＳＢポート、オーディオポート、シリアルＡＴＡ（ＳＡＴＡ）ポート、ＰＣＩエクスプレス対応ポートまたはカードスロット、セキュアデジタル入出力（ＳＤＩＯ）スロット及び／または他の複数のレガシーポートのような、複数の内部または外部ポートの任意の組み合わせを含んでもよい。様々な複数の周辺機器、例えば、ヒューマンインプットデバイス（ＨＩＤ）、外部コンピュータ可読ストレージメディアまたは他の複数の周辺機器が、複数のＩ／Ｏポート１３６と動作可能に連結されてもよい。
【００２４】
ディスプレイ１３８は、コンピューティングデバイス１０２のオペレーティングシステムまたはアプリケーションと関連付けられたユーザインタフェースまたはレンダリングされたグラフィクスを与えてもよい。ディスプレイ１３８は、タッチスクリーンまたはタッチ反応オーバレイなどのタッチ入力センサ（不図示）を含んでもよい。ネットワークインタフェース１４０は、１つまたは複数のネットワーク及びこれらに接続される複数の他のデバイスへの接続性を与える。複数のネットワークインタフェース１４０を介して通信されるデータは、コンピューティングデバイス１０２が通信を行う通信プロトコルまたは規格によってパケット化またはフレーム化されてもよい。複数のネットワークインタフェース１４０は、ローカルネットワーク、イントラネットまたはインターネットを介して通信を行うためのＥｔｈｅｒｎｅｔ（登録商標）または光ファイバインタフェースのような複数の有線インタフェースを含んでもよい。ネットワークインタフェース１４０は、無線ＬＡＮ、セルラネットワークまたは無線パーソナルエリアネットワーク（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標））のような複数の無線ネットワークを介した通信を容易にする複数の無線インタフェースをさらに含んでもよい。
【００２５】
図２は、２００において、１つまたは複数の態様に係るコンピューティングデバイスのブートアーキテクチャの例を示す。ブート処理中のブートコードの実行は、コンピューティングデバイスのハードウェア２０２及びソフトウェア２０４において行われる。ハードウェア２０２は、ＲＯＭ１３０を含み、ブートコード（ブートＲＯＭ２０６）のバイナリは、ＲＯＭ１３０の製造中にこれに焼かれる。ブートＲＯＭ２０６は、コンピューティングデバイスのブート処理を開始させるように実行される。ブートＲＯＭ２０６はＲＯＭ１３０に焼かれ、修正可能ではないため、ブートＲＯＭ２０６の実行は、ブートＲＯＭ２０６が「信頼の起点」として機能する、信頼されたブート処理を実装してもよい。より詳細には、ブートＲＯＭ２０６がＲＯＭ１３０に一度書き込まれると、読み出しのみを行うＲＯＭ１３０の性質は、ブートＲＯＭ２０６の真正性及びセキュリティを保証する。
【００２６】
ハードウェア２０２は、複数のバイナリ値を格納可能な複数のヒューズの複数のブロックとして構成されるＯＴＰメモリ１３２をさらに含む。この特定の例では、ＯＴＰメモリ１３２は、ブートＲＯＭパッチ２０８を格納し、これは、コンピューティングデバイスのブートシーケンス中に実行されるバイナリコードを含む。いくつかの場合、ブートＲＯＭパッチ２０８は、ブートＲＯＭの一部２０６がエラーまたはバグを含む場合などに、ブートＲＯＭの一部２０６に代えて実行される代替ブートコードを含む。複数の他の場合には、ブートＲＯＭパッチ２０８は、ブートＲＯＭ２０６と共に実行される追加ブートコードを含む。このような場合、追加ブートコードの実行は、ブートシーケンス中にコンピューティングデバイスの追加的な複数の機能を実装してもよい。ＯＴＰメモリに書き込まれるコードの実装及び使用は、様々であり、以下に記載される。
【００２７】
ブートシーケンス中、ブートＲＯＭ２０６の実行は、より高レベルのブートローダをソフトウェア２０４にロードし、これは次いで他のより高レベルのブートローダをロードし、ブートシーケンスは、オペレーティングシステムがロードされるまで継続する。この特定の例では、ブートＲＯＭ２０６の実行は、レベル２ブートローダ２１０をＳＰＩフラッシュ１２６からロードする。複数のリソースの制御をレベル２ブートローダ２１０に移す前に、ブートＲＯＭ２０６は、暗号署名またはハッシュを検証することによって、ブートローダのコードの真正性を検証する。こうすることによって、ブートＲＯＭ２０６は、次のレベルのブートローダがセキュアであること（例えば、改ざんされていないこと）を保証し、信頼の連鎖が、「信頼の起点」からブートシーケンスの次の段階に確立される。
【００２８】
複数のリソースの制御がブートＲＯＭ２０６からレベル２ブートローダ２１０に一度渡されると、ブートローダの実行は、さらに、コンピューティングデバイスの複数のリソースを構成し、レベル３ブートローダ２１２をＮＡＮＤフラッシュ１２８からロードする。ここで、信頼の連鎖を継続するために、レベル２ブートローダ２１０は、複数のリソースの制御が３ブートローダ２１２に移される前に、３ブートローダ２１２の真正性を検証する。図２に示されるように、ブートシーケンスが任意の数のブートローダを介して進行するため、ブートシーケンスは、レベルＮのブートローダ２１４がロード、検証及び実行されるまで継続する。信頼されたブート処理を実装するために、各レベルのブートコードまたはブートローダの真正性は、前のブートローダによって検証される。
【００２９】
ブートシーケンスを完了させるために、レベルＮのブートローダ２１４の実行は、オペレーティングシステム２１６を不揮発性１２０からロードし、オペレーティングシステム２１６に関連付けられた暗号署名またはハッシュを検証することによって、オペレーティングシステムの真正性を検証する。こうすることによって、信頼されたブート処理は、コンピューティングデバイス上で実行しているソフトウェアが真正かつ認証されていることを保証するように実装される。信頼されたブート処理の「信頼の起点」は、ブートＲＯＭ２０６であり、これは、ＲＯＭ１３０が、メモリが一度製造されると変更不可能であることにより、セキュアであることが保証されている。
【００３０】
［リードオンリメモリのブートコードパッチの複数の技術］
以下の説明は、リードオンリメモリのブートコードパッチの複数の技術を記載する。これら複数の技術は、コンピューティングデバイス１０２上で具現される図１の割り込みマネージャ１３４のような、前述された環境または複数のエンティティを用いて実装されてもよい。これら複数の技術は、図３、４及び６に示される複数の方法を含み、これらの各々は、１つまたは複数のエンティティによって実行される複数のオペレーションのセットとして示される。これら複数の方法は、複数のオペレーションを実行するために示される複数の順序に、必ずしも限定されない。さらに、これら複数の方法は、同じエンティティ、別個の複数のエンティティ、またはそれらの任意の組み合わせによって実行されるかに関わらず、全体としてまたは部分的に、互いと共に用いられてもよい。以下の説明の複数の部分では、例として、図１のオペレーション環境１００及び図２及び５の複数のエンティティが参照される。このような参照は、オペレーション環境１００に限定されるものではなく、様々な複数の例の１つの例示として取られるべきである。
【００３１】
図３は、リードオンリメモリからのブートコードの実行に割り込むための方法３００を示し、図１の割り込みマネージャ１３４によって実行される複数のオペレーションを含む。
【００３２】
３０２において、リードオンリメモリ（ＲＯＭ）からの第１のブートコードの実行が開始される。第１のブートコードの実行を開始させることにより、コンピューティングデバイスのブート処理を開始させる。いくつかの場合、第１のブートコードは、ＲＯＭの製造中にハードウェアに焼かれるセキュアなブートＲＯＭである。第１のブートコードの実行は、コンピューティングデバイスの電源オンというイベントに応答して開始されてもよい。例えば、スマートフォンまたはタブレットコンピュータが電源オンされた場合、マイクロコントローラまたはハードウェアロジック回路は、ブートＲＯＭバイナリの実行を開始させてもよい。
【００３３】
３０４において、第１のブートコードの実行は、他のメモリからの第２のブートコードの実行を可能とするために、割り込まれる。第１のブートコードの実行は、第１のブートコードの実行を中断するために有効な予め定められたポイントにおいて割り込まれる。予め定められたポイントは、割り込み、ブレイク、ジャンプ等のトリガとなる第１のブートコードのアドレスまたは命令であってもよい。第１のブートコードが実行しない場合、コンピューティングデバイスの他のメモリからの第２のブートコードは、実行されてもよい。いくつかの場合、第２のブートコードは、第１のブートコードの一部、例えば、バグまたはエラーを含む部分に代わって実行される。複数の他の場合、第２のブートコードの実行は、デバイスのブート処理中に追加の機能または特徴を与える。
【００３４】
３０６において、ＲＯＭからの第１のブートコードの実行は、第２のブートコードの実行後に再開される。ＲＯＭからの第１のブートコードの実行を再開することにより、デバイスのブート処理を継続させる。いくつかの場合、第１のブートコードの実行は、リターンアドレスのような予め定められたリターンポイントにおいて再開される。第１のブートコードの実行が継続されることにより、デバイスの高レベルブートローダまたはオペレーティングシステムをロードしてもよい。いくつかの場合、より高レベルのブートローダまたはオペレーティングシステムの真正性は、複数のデバイスリソースの制御が第１のブートコードから渡される前に検証される。これは、デバイスの制御がより低レベルのブートローダから移される前にブート処理の各レベルまたはレイヤが検証を行う、信頼されたブート処理を実装するために有効である。ＲＯＭ及びＯＴＰメモリからの起点レベルのブートコードを実行することによって、最低レベルのブートコードのセキュリティがこれらのメモリの修正不可能な性質により保証される。
【００３５】
図４は、ワンタイムプログラマブルメモリからの代替ブートコードを実行するための方法４００を示し、図１の割り込みマネージャ１３４によって実行される複数のオペレーションを含む。
【００３６】
４０２において、リードオンリメモリ（ＲＯＭ）からのブートコードの実行が開始される。ＲＯＭに格納されたブートコードは、コンピューティングデバイスをブートするために実行されるブートＲＯＭバイナリを含んでもよい。いくつかの場合、ブートＲＯＭは、ＲＯＭの複数の物理的導体または半導体レイヤに焼かれ、修正可能ではない。このような場合、ブートＲＯＭは、セキュアなブートＲＯＭであり、信頼されたブート処理の「信頼の起点」として機能してもよい。ブートコードの実行は、プログラムカウンタによって進められ、これは、ブートの複数のアドレスを介してインクリメントすることにより、各アドレスに関連付けられた複数の命令の実行をさせる。
【００３７】
例として、ユーザが図１のスマートフォン１０４を電源オンにするとみなす。ここで、スマートフォン１０４は、スマートフォン１０４の複数のコンポーネント及び複数のリソースがパワーダウンされた「オフ」状態から、「オン」状態にブートすると仮定する。「オン」状態にブートするために、ブートＲＯＭ２０６は、ユーザがスマートフォン１０４を電源オンしたことに応答して実行を開始する。図５に示されるように、ブートＲＯＭ２０６は、複数のアドレス５０２及びバイナリ５０４を含み、実行された場合に、バイナリから複数のマシンコード命令（複数の命令５０６）に変換される。スマートフォン１０４のプロセッサコア１１４は、プログラムカウンタ５０８が複数のアドレス５０２を介して進むと、一連のバイナリ５０４、または対応する命令５０６を実行する。
【００３８】
４０４において、ＲＯＭからのブートコードの実行は、割り込まれる。これは、プログラムカウンタがブートコードの予め定められたアドレスに到達したことに応答して行われてもよい。予め定められたアドレスは、予め定められたアドレスが修正不可能であることを保証するために、ワンタイムプログラマブルメモリのような異なるメモリに格納されてもよい。いくつかの場合、割り込みサービスルーチン（例えば、ハードウェア型割り込みロジック）は、プログラムカウンタがブートコードの予め定められたアドレスに到達した場合に割り込みを発するように構成される。このような場合、発せられた割り込みは、割り込みハンドラに他のコードを実行させるために有効であってもよい。予め定められたアドレスは、エラーまたはバグを含む、その実行が回避されるべき一連のブートコードを示してもよい。代替的に、またはさらに、予め定められたアドレスは、エラーまたはバグを含むブートコードのセクションの第１のアドレスであってもよい。
【００３９】
本例に関して、ブートＲＯＭセクション５１０は、実行されたことに応答して、スマートフォン１０４が電源オンになることを防止するエラーを含むと仮定する。従って、アドレス５１２（０ｘ５Ｅ０１２３ＦＣ）は、「ＢＮＥ」命令の実行を防止するための処理への割り込みを開始するように選択される。割り込みを発するために選択されるアドレスは割り込みアドレス５１４としてブートＲＯＭパッチ２０８に書き込まれる。プログラムカウンタ５０８が割り込みアドレス５１４に到達した場合、割り込みマネージャ１３４は、プロセッサコア１１４が「ＢＮＥ」命令を実行することを防止するために有効な割り込みを発する。
【００４０】
４０６において、ワンタイムプログラマブル（ＯＴＰ）メモリからの代替ブートコードが実行される。この代替ブートコードは、ＲＯＭに格納されるブートコードの部分に代わって実行される。いくつかの場合、代替ブートコードの実行は、ＲＯＭからのブートコードの実行中に割り込みが発されたことに応答してなされる。このような場合、割り込みは、代替ブートコードを実行するように構成される割り込みハンドラによってクリアされてもよい。この割り込ハンドラは、前のブートコードの実行中に実装または構成されてもよい。
【００４１】
説明中の例を継続すると、割り込みハンドラ５１６は、割り込みマネージャ１３４によって発せられた割り込みをクリアする。ブートＲＯＭ２０６の実行が停止されている間、割り込みハンドラ５１６は、ブートＲＯＭパッチ２０８のパッチバイナリ５１８を実行し、ＯＴＰメモリ１３２に格納される。ここで、パッチバイナリ５１８は、ブートＲＯＭセクション５１０に代わって実行され、ブートＲＯＭセクション５１０の誤ったコードの実行は回避される。こうすることによって、ブートＲＯＭセクション５１０のコードは、ＲＯＭ１３０の内容を変更または修正することなく、パッチされてもよい。さらに、パッチバイナリ５１８は、ＯＴＰメモリ１３２に焼かれ、ＯＴＰメモリの内容は一度焼かれると修正不可能であるため、ブートコードの「信頼の起点」は維持される。
【００４２】
４０８において、プログラムカウンタは、ＲＯＭからのブートコードの実行を再開するために有効なブートコードのアドレスに戻される。ブートコードのリターンアドレスは、ブートコードの１つまたは複数の命令がスキップされるように構成されてもよい。任意に、方法４００は、ＲＯＭからのブートコードの実行に割り込むために、オペレーション４０４に戻ってもよい。例えば、いくつかの場合、ブートコードの複数のセクションは、パッチされてもよい。方法４００のオペレーション４０４から４０８のイタレーション自体は、ＲＯＭに格納されたブートコードをパッチするために複数の追加のバイナリを実行するように、任意の適した回数実行されてもよい。
【００４３】
説明中の例を結論付けると、ブートＲＯＭセクション５１０に続くアドレス５２０（０ｘ５Ｅ０１２４１Ｃ）は、リターンアドレス５２２としてブートＲＯＭパッチ２０８に焼かれると仮定する。ここで、割り込みハンドラ５１６は、パッチバイナリ５１８の実行後、プログラムカウンタ５０８をリターンアドレス５２２に設定する。これは、プロセッサコア１１４にブートＲＯＭセクション５１０をスキップさせ、アドレス５２０においてブートＲＯＭ２０６の実行を再開させるために有効である。ブートＲＯＭ２０６の実行がスマートフォン１０４のブートローダを一度ロードすると、ブートＲＯＭ２０６は、ブートローダを真正なものとして検証し、スマートフォン１０４のブートを継続するために、ブートローダに制御を渡す。
【００４４】
図６は、ブートコードをワンタイムプログラマブルメモリの複数のヒューズに焼くための方法６００を示す。
【００４５】
６０２において、ブートコードは、ワンタイムプログラマブル（ＯＴＰ）メモリの複数のヒューズに焼かれる。ブートコードは、リードオンリメモリ（ＲＯＭ）に格納されたブートＲＯＭバイナリなどの他のブートコードを補足する代替ブートコードまたは追加ブートコードであってもよい。例として、信頼されたブートＲＯＭバイナリが、その１つがエラーを含むコードの複数のセクションを含むとみなす。ブートＲＯＭの誤ったセクションの代わりに実行されるように設計されるパッチバイナリは、ＯＴＰメモリの複数のヒューズに焼かれる。ブートシーケンス中に複数のヒューズに焼かれるブートコードの実行自体は、ブートＲＯＭのエラー（またはバグ）をパッチするために有効であってもよい。
【００４６】
６０４において、割り込みサービスのための第１のアドレスは、ＯＴＰの複数のヒューズに焼かれる。ＯＴＰメモリに第１のアドレスを含むことは、プログラムカウンタが第１のアドレスに遭遇した場合に、割り込みサービスに割り込みを発させるために有効であってもよい。代替的に、またはさらに、第１のアドレスは、ブートシーケンス中に、ＯＴＰメモリからのブートコードの実行をさせるために有効である。上述の例に関して、ブートＲＯＭにおいてエラーの前に位置するアドレスは、ＯＴＰメモリの複数のヒューズに焼かれる。エラーの前のアドレスを選択することによって、ブートＲＯＭの実行は、エラーへの遭遇前に、割り込みサービスによって割り込まれる。さらに、プログラムカウンタがこのアドレスに到達した場合、割り込みハンドラは、エラーを含むブートＲＯＭのセクションの代わりに、パッチバイナリを実行するようにされてもよい。
【００４７】
６０６において、割り込みサービスのための第２のアドレスは、ＯＴＰの複数のヒューズに焼かれる。ＯＴＰメモリにこの第２のアドレスを含むことは、割り込みがサービスされた後、割り込みサービスにプログラムカウンタを第２のアドレスに設定させるために有効であってもよい。いくつかの場合、第２のアドレスは、ブートＲＯＭなどのＲＯＭから実行されるブートコード内に位置する。プログラムカウンタをブートＲＯＭのアドレスに設定することによって、ブートＲＯＭの実行は、プログラムカウンタが設定されるアドレスから再開されてもよい。
【００４８】
いくつかの場合、第２のアドレスは、割り込みが開始されるアドレスの直後には続かない。このような場合、これは、ブートコードの特定の部分またはセクションの実行を防止するために有効であってもよい。説明中の例を継続すると、ブートＲＯＭにおいてエラーの後に位置するアドレスは、ＯＴＰメモリの複数のヒューズに焼かれる。ＯＴＰメモリの複数のヒューズに焼かれる複数のアドレス間に位置するブートＲＯＭのバイナリ自体は、実行されない。
【００４９】
任意に、６０８において、ＯＴＰメモリの複数の追加ヒューズは、ＯＴＰメモリに前に焼かれたデータをセキュアにするために焼かれる。複数の追加ヒューズは、ＯＴＰメモリの複数の不使用ブロックの複数のヒューズであり、複数の不使用ブロックに関連付けられた複数のエラー訂正コードビットの複数のヒューズである。こうすることによって、ＯＴＰメモリは、修正不可能であり、これは、複数のブートコードパッチのようなＯＴＰメモリの内容をセキュアにするために有効である。代替的に、またはさらに、ＯＴＰメモリに関連付けられた最小在庫管理単位（ＳＫＵ）の数は、ＯＴＰメモリに焼かれたブートコードによって与えられた機能を反映するように、更新または変更されてもよい。例えば、ブートＲＯＭパッチを格納するＯＴＰメモリを含むチップのＳＫＵ数は、チップ内のブートＲＯＭパッチを含むことを反映するように修正されてもよい。
【００５０】
［システムオンチップ］
図７は、システムオンチップ（ＳｏＣ）７００を示し、これは、複数のメモリからのブートコードのロードの複数の様々な態様を実装してもよい。ＳｏＣは、任意の適切なデバイス、例えば、ビデオゲームコンソール、ＩＰ対応テレビ、スマートフォン、ラップトップコンピュータ、パーソナルナビゲーションデバイス、アクセスポイント、無線ルータ、セルラブロードバンドルータ、タブレットコンピュータ、サーバ、ネットワーク対応プリンタ、セットトップボックス、プリンタ、スキャナ、カメラ、ピクチャフレーム、家電製品、サーモスタット、ホームオートメーションデバイス及び／または任意の他の種類の電子デバイスに実装されてもよい。
【００５１】
ＳｏＣ７００は、電子回路、マイクロプロセッサ、メモリ、入出力（Ｉ／Ｏ）ロジック制御、複数の通信インタフェース、他のハードウェア、ファームウェア、及び／または上に列挙された複数のデバイスのようなデバイスの複数の機能を与えるために必要なソフトウェアと一体化されてもよい。ＳｏＣ７００は、複数のコンポーネント間のデータ通信のためにＳｏＣの複数の様々なコンポーネントを連結する一体化されたデータバス（不図示）をさらに含んでもよい。ＳｏＣ７００を含む電子またはコンピューティングデバイスは、異なる複数のコンポーネントの多数の組み合わせと共にさらに実装されてもよい。いくつかの場合、これらの異なる複数のコンポーネントは、様々な複数の内部または外部データインタフェースに対して本明細書に記載される複数の概念を実装するように構成されてもよい。
【００５２】
この例において、ＳｏＣ７００は、（例えば、電子回路及びマイクロプロセッサ７０４を含むように）入出力（Ｉ／Ｏ）ロジック制御７０２のような複数の様々なコンポーネントを含む。ＳｏＣ７００は、メモリ７０６をさらに含み、これは、任意の種類及び／または組み合わせのＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、フラッシュ、低レイテンシ不揮発性メモリ、ＲＯＭ及び／または他の適した電子データストレージであってもよい。少なくともいくつかの態様において、ＳｏＣ７００のブートコードは、ＲＯＭとして実装されるメモリ７０６の部分に格納される。
【００５３】
ＳｏＣ７００は、追加または代替ブートコードが格納されるワンタイムプログラマブルメモリ１３２（ＯＴＰメモリ１３２）をさらに含む。この代替または追加ブートコードは、本明細書に記載されたように、ＲＯＭのブートコードパッチの１つまたは複数の態様を実装するために用いられてもよい。ＳｏＣ７００の例として、及びこれに関して、所望のパッチアドレスを捕捉する能力は、ＯＴＰ１３２の複数のワンタイムプログラマブルヒューズに基づいて、システムオンチップによって実装される機能である。他のブートコード（例えば、パッチコード）が所望のパッチアドレスに遭遇したことに応答して一度実行されると、ＲＯＭからのブートコードの実行が再開されることにより、ＳｏＣ７００が具現されるコンピューティングデバイスのブートを継続する。
【００５４】
代替的に、またはさらに、ＳｏＣ７００は、外部ＳＲＡＭ、ＤＲＡＭまたはフラッシュメモリのような追加または外部オフチップメモリにアクセスするためのデータインタフェース（不図示）を備えてもよい。図示されていないが、外部メモリ（またはメモリ７０６）は、図１を参照して記載されるように、複数のブートローダ及び／またはブートコードの部分を各々格納する複数の不揮発性メモリデバイスを含んでもよい。ＳｏＣ７００は、オペレーティングシステム７０８のような様々なファームウェア及び／またはソフトウェアをさらに含んでもよく、これは、メモリ７０６によって維持される複数のコンピュータ実行可能命令であり、マイクロプロセッサ７０４によって実行されてもよい。ＳｏＣ７００は、ハードウェア、ファームウェア、ソフトウェアまたはそれらの任意の適切な組み合せとして具現される他の様々な複数の通信インタフェース及びコンポーネントをさらに含んでもよい。
【００５５】
ＳｏＣ７００は、割り込みマネージャ１３４をさらに含んでもよく、これは、異種のまたは組み合わせられた複数のコンポーネント、ロジック、複数のルーチンまたは複数のサービスとして具現されてもよい。これら複数の様々なコンポーネント、機能及び／またはエンティティ、及びこれらの対応する機能の複数の例は、環境１００の複数のコンポーネントの各々及び様々な複数の構成を図２および５によって示される参照して記載される。割り込みマネージャ１３４は、本明細書に記載された様々な複数の実施形態及び／または複数の特徴を実装するために、独立してまたは他の複数のエンティティ（例えば、割り込みサービスルーチン）との組み合わせのいずれかで、メモリ７０６によって維持され、マイクロプロセッサ７０４によって実行される複数のコンピュータ実行可能命令として実装されてもよい。割り込みマネージャ１３４は、ＳｏＣの他の複数のエンティティ、例えば、マイクロプロセッサ７０４と関連付けられたハードウェア割り込みロジック、または他の適切なソフトウェア、ファームウェア、またはＳｏＣ７００内の複数のハードウェアコンポーネントと一体的にさらに与えられてもよい。代替的にまたはさらに、割り込みマネージャ１３４及び他の複数のコンポーネントは、ハードウェア、ファームウェア、固定ロジック回路、またはＩ／Ｏロジック制御７０２及び／またはＳｏＣ７００の他の複数の信号処理及び制御回路に関して実装されるそれらの任意の組み合わせとして実装されてもよい。
【００５６】
主題は、複数の構造的特徴及び／または複数の方法論的オペレーションに固有の用語で記載されてきたが、添付された特許請求の範囲に定義された主題は、上述された特定の複数の特徴または複数のオペレーション、及びこれらが実行される複数の順序に、必ずしも限定されるものではないことが理解されるべきである。
【図１】
0006318425.tif 000002
【図２】
0006318425.tif 000003
【図３】
0006318425.tif 000004
【図４】
0006318425.tif 000005
【図５】
0006318425.tif 000006
【図６】
0006318425.tif 000007
【図７】
0006318425.tif 000008