これが私が用語をどのように理解するかです。
ブートロム
Bootrom (または Boot ROM) は、プロセッサ チップ内に組み込まれた小さなマスク ROM または書き込み保護されたフラッシュです。電源投入時またはリセット時にプロセッサによって実行される最初のコードが含まれています。一部のストラップ ピンまたは内部ヒューズの構成に応じて、実行するコードの次の部分をどこからロードするか、およびその正確性または有効性を検証する方法または検証するかどうかを決定する場合があります。場合によっては、起動中または起動後にユーザー コードで使用できる追加機能が含まれる場合があります。いくつかの例:
iPhone ブート ROM。マスク ROM に組み込まれており、変更することはできません。フラッシュまたは USB (DFU モード) から次の段階のブート ローダーをロードし、組み込みの RSA 実装を使用してその署名を検証します。また、次の段階のブートローダに高速化された復号化機能も提供します。
TI の OMAP4 ブート ROM。フラッシュ (NOR、NAND、OneNAND)、外部メモリ、SD/MMC、USB、または UART からユーザー コードをロードできます。ブート順序とオプションは、ストラップ (SYSBOOT) ピンによって設定されます。後の段階でいくつかの機能を提供します (キャッシュ/TLB 管理など)。
NXPのLPCxxxxシリーズのBoot ROM。電源投入時に 0 にマップされる内部フラッシュの隠れた部分に配置されます。CRP (コード読み取り保護)、ISP (インシステム プログラミング) を実装し、UART 経由で新しいコードをアップロードおよびフラッシュできます。有効なユーザー コードがフラッシュ内にある場合 (適切なチェックサムが必要)、それを 0 にマップしてそこにジャンプします。bootrom の一部は、IAP (In-Application Programming) およびその他のサービスを提供するためにマッピングされたままです。
ブートローダー
ブートローダーは、チップ上で実行される最終的な OS またはファームウェアを見つけてロードする役割を果たします。bootrom との主な違いの 1 つは、通常は書き込み可能なフラッシュにあり、交換またはアップグレードできることです。
bootrom がブートローダーの仕事を実行できる場合があります。たとえば、OMAP の bootrom は非常に複雑なので (FAT32 を解析できます!)、Linux カーネルを直接ロードして起動することができます。
ただし、多くの場合、ブート ROM の機能が十分でない (または存在しない) か、追加の柔軟性が必要なため、別のブートローダーが使用されます。非常に単純な場合 (RAM の固定フラッシュ ロケーションからカーネルをロードしてそこにジャンプする) もあれば、はるかに複雑な場合もあります。たとえば、U-Bootはそれ自体がミニ OS のようなものです。コンソールといくつかのコマンドがあり、ブート プロセスを中断したり、カーネル コマンド ライン引数を変更したり、別の場所 (SD/ MMC または USB)、いくつかのテストなどを実行します。
ブートローダーは通常、OS を起動する前にセットアップが必要な多かれ少なかれ複雑な OS を使用している場合に使用されます。NXP の LPC シリーズのような小型のマイクロコントローラーは、通常、モノリシック ファームウェアを使用するため、それがなくても問題はありません (ただし、カスタム ブートローダーも存在する場合があります)。
非常に単純なチップでは、ブート ROM やブートローダーがまったくない場合があります。それらは、固定の起動アドレスから命令を取得して実行しようとするだけです。実際、今日までのほとんどの x86 チップはこのように動作します。チップセットが BIOS フラッシュ チップをそこにマッピングしたことを期待して、FFFFFFFF0 でコードの実行を開始するだけです。ここでは、BIOS がブートローダーであると言えます (ただし、bootrom と同様に、OS にサービスも提供します)。