ブートローダーは、デバイス上でカーネルを起動するためのベンダー独自のイメージです。デバイスの状態を監視し、高信頼実行環境(TEE)を初期化して、そのルート オブ トラストをバインドします。また、ブートローダーは実行をカーネルに移行する前に、boot パーティションと recovery パーティションの整合性を検証します。
ブートローダー フローの例
ブートローダー フローの例を次に示します。
- メモリを読み込んで初期化します。 
- 確認付きブートのフローに沿ってデバイスを検証します。 
- 確認付きブートのフローに沿って、 - boot、- dtbo、- init_boot、- recoveryなどのブート パーティションを検証します。この手順の一環として、ブートイメージ ヘッダーのバージョンを確認し、それに応じてヘッダーを解析します。
- A/B アップデートが使用される場合、現在のブートスロットを決定します。 
- リカバリモードで起動するかどうかを決定します。詳細については、OTA アップデートのサポートをご覧ください。 
- ブートイメージ( - boot.img、- vendor_boot.img、- init_boot.imgなど)と、他の独自のベンダー ブートイメージを読み込みます。このブートイメージには、カーネル イメージと RAM ディスク イメージが含まれます。- 自己実行型の圧縮バイナリとしてカーネルをメモリに読み込みます。カーネルは自己解凍し、メモリへの実行を開始します。 
- RAM ディスクと bootconfig セクションをメモリに読み込み、 - initramfsを作成します。
 
ブートローダー関連のその他の機能
実装可能なブートローダー関連のその他の機能は次のとおりです。
- デバイスツリー オーバーレイ(DTO): デバイスツリー オーバーレイにより、ブートローダーはさまざまなハードウェア構成をサポートできます。DTO は、ブートローダーが使用するデバイスツリー blob(DTB)にコンパイルされます。 
- カーネル イメージ仮想アドレス ランダム化: ブートローダーは、カーネル イメージを読み込む仮想アドレスのランダム化をサポートしています。アドレスをランダム化するには、カーネル構成で - RANDOMIZE_BASEを- trueに設定します。ブートローダーは、ランダムな u64 値を- /chosen/kaslr-seedデバイスツリー ノードに渡してエントロピーを指定する必要があります。
- 確認付きブート: 確認付きブートにより、ブートローダーは、信頼できる提供元のコードを確実に実行できます。 
- ブート構成: ブート構成は Android 12 以降で利用できます。ビルドとブートローダーからオペレーティング システムに構成の詳細を渡すメカニズムです。Android 12 より前のバージョンでは、接頭辞が - androidbootのカーネル コマンドライン パラメータが使用されます。
- 無線(OTA)アップデート: 実際に利用中の Android デバイスで、システム、アプリ ソフトウェア、タイムゾーン ルールの OTA アップデートを受信してインストールできます。この機能は、ブートローダーの実装に影響します。OTA の一般的な情報については、OTA アップデートをご覧ください。ブートローダー固有の OTA 実装の詳細については、OTA アップデートのサポートをご覧ください。 
- バージョン バインディング: バージョン バインディングは、オペレーティング システムとパッチレベルのバージョンにセキュリティ キーをバインドします。バージョン バインディングにより、攻撃者が古いバージョンのシステムまたは TEE ソフトウェアに脆弱性を見つけても、デバイスを脆弱なバージョンにロールバックして新しいバージョンで作成された鍵を使用することができなくなります。ブートローダーは、バージョン バインディングをサポートするために、特定の情報を提供する必要があります。詳しくは、AVB プロパティ内のバージョン情報をご覧ください。 
カーネル コマンドライン
次の場所からカーネル コマンドラインを連結します。
- ブートローダー コマンドライン: ブートローダーにより決定される静的パラメータと動的パラメータのセット 
- デバイスツリー: - chosen/bootargsノードから
- defconfig:- CONFIG_CMDLINEから
- boot.img: コマンドラインから(オフセットとサイズについては、- system/core/mkbootimg/bootimg.hを参照)
Android 12 以降では、Android ユーザー空間に渡す必要がある androidboot.* パラメータについて、カーネル コマンドラインの代わりに bootconfig を使用できます。