Trusty OS(TOS)パーティション

Trusty は、Google による Trusted Execution Environment(TEE)OS の実装であり、Android で実行されます。これは ARM Trustzone テクノロジーで TEE を提供するための仕様です。ARM デバイスで Trusty をセキュアな OS ソリューションとして使用する場合は、この後の各セクションの説明に従ってブートローダーを実装します。

TOS の初期化

Trusty OS(TOS)を読み込んで初期化するには、ブートローダーが以下の処理を行う必要があります。

  • 使用可能なすべての RAM を設定して構成する
  • シリアルポートを少なくとも 1 つ初期化する
  • TOS イメージの署名を確認する
  • TOS を RAM に読み込む(フラッシュや TCM からの実行には対応していません)
  • 以下で説明するように、状態とレジスタを設定した後、TOS イメージの最初の命令にジャンプする

TOS イメージの呼び出し

最初に次の状態を構成します。

  • MMU をオフにする
  • データ キャッシュをフラッシュしてオフにする(命令キャッシュはオンとオフのどちらも可能)
  • すべての割り込み(IRQ と FIQ)を無効にする
  • CPU を ARMv7 では SVC モード、ARMv8 では EL3 モードにする
  • レジスタを次の状態にする:
    • r0/x0: TOS に割り当てるメモリのサイズ。
    • r1/x1: プラットフォーム独自のブート パラメータを含むメモリの連続したブロックの物理アドレス。このブロックのレイアウトはプラットフォームによって異なります。
    • r2/x2: メモリの上記ブロックのサイズ。
    • r14/x30: TOS の初期化後に(非セキュアモードで)ジャンプするリターン アドレス。

64 ビット プラットフォームの場合、次のようになります。

  • パラメータには w0-w2 のみが使用されるため、x0-x2 には 32 ビット値のみを含めます。
  • x30 には 64 ビットの値を設定できます。
  • x0 の値が TOS エントリ ポイントのベースアドレスに追加された場合、結果は 32 ビット値になります。x1 のブート パラメータ ブロックのアドレスに追加したときのレジスタ x2 のサイズについても同様です。

TOS から戻る

TOS の初期化が完了すると、TOS は非セキュアモードでブートローダーに戻ります(SCR.NS が 1 に設定されます)。それにより、ブートローダーは主たるオペレーティング システム(Android)の読み込みを続行できます。