Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

概要

ブートローダーとは、デバイス上でカーネルを起動するためのベンダー独自のイメージです。デバイスの状態を監視し、高信頼実行環境を初期化して、そのルート オブ トラストをバインドします。また、ブートローダーは実行をカーネルに移行する前に boot パーティションと recovery パーティションの整合性を検証し、ブート状態の警告を表示します。

ブート オペレーション

起動を開始するため、ブートローダーは、新しいイメージを適切なパーティションに直接フラッシュするか、recovery を使用して無線(OTA)アップデート用の再フラッシュ処理を開始します。デバイス メーカーによっては、複数に分割されたブートローダーを作成してから、組み合わせて 1 つの bootloader.img ファイルにしている場合があります。フラッシュ時にはブートローダーが個々のブートローダーを展開してフラッシュします。

ブートローダー フローの例:

  1. まず、ブートローダーが読み込まれ、メモリが初期化されます。

  2. A/B アップデートが使用される場合、ブートローダーは現在のブートスロットを判別します。

  3. ブートローダーが、リカバリモードを起動するかどうかを決定します(アップデートのサポートをご覧ください)。

  4. ブートローダーによって、カーネル イメージと RAM ディスク イメージを含むブートイメージが読み込まれます。

  5. ブートローダーによって、カーネルが自己実行型の圧縮バイナリとしてメモリに読み込まれます。カーネルは自己解凍し、メモリへの実行を開始します。

  6. ブートローダーによって、ramdisk パーティション(古いデバイスの場合)またはシステム パーティション(新しいデバイスの場合)から init が読み込まれます。

  7. システム パーティションから init が起動して他のすべてのパーティション(vendoroemodm など)をマウントし、コードの実行を開始してデバイスを起動します。

カーネル コマンドライン

次の場所からカーネル コマンドラインを連結します。

  • ブートローダー コマンドライン: ブートローダーにより決定される静的パラメータと動的パラメータのセット

  • デバイスツリー: 選択したノードまたは bootargs ノードから

  • defconfig: CONFIG_CMDLINE から

  • boot.img: cmdline から(オフセットとサイズについては system/core/mkbootimg/bootimg.h をご覧ください)

  • Android 互換性定義ドキュメント に適合する、正規の再起動またはシャットダウンの理由。電力管理集積回路(PMIC)、その他のハードウェア リソース、再起動マジック引数(LINUX_REBOOT_CMD_RESTART2)メッセージングにより決定されます。構文は次のとおりです。

    androidboot.bootreason=reason
    

デバイスツリーとデバイスツリー オーバーレイのサポート

ブートローダーは、デバイスのハードウェア / プロダクト リビジョンを特定し、適切なデバイスツリー オーバーレイのセットを読み込むことで、さまざまな構成をサポートできます。

カーネル アドレス空間レイアウトのランダム化のサポート

カーネル イメージを読み込む仮想アドレスのランダム化(カーネル構成 RANDOMIZE_BASE により有効化)をサポートするには、ブートローダーがランダムな u64 値をデバイスツリー ノード /chosen/kaslr-seed に渡してエントロピーを指定する必要があります。

確認付きブートのサポート

ブートローダーを使用して確認付きブートを実装する方法の詳細については、ブートの確認をご覧ください。