30

私は主に、BIOS (ファームウェア) が PowerON からブートローダー (GRUB など) をロードし、次に OS をロードする x86 システムのバックグラウンドから来ました。私は現在、ARM システムで同等のブート シーケンスを読んでいますが、Web には bootrom と bootloader という 2 つの用語を参照している記事があるようです。

一部の記事では、PowerON からはブートローダー (u-boot など) が最初に実行されると述べていますが、一部の記事では、PowerON からブートロム (通常はプロセッサの内部 ROM にフラッシュされます) が最初に実行され、ブートローダー ( uboot) が OS をロードします。

ブートロムとブートローダーについて明確に説明できる人はいますか? また、ARM システムで一般的に使用されている一般的な bootrom の名前を知りたいです。

4

2 に答える 2

55

これが私が用語をどのように理解するかです。

ブートロム

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 にサービスも提供します)。

于 2013-03-27T17:59:18.867 に答える
-1

ARM CPU はフラッシュ ROM を持つことができます。つまり、チップ マスクには BIOS をロードするためのコードが含まれています。GPU がブート シーケンスのほとんどを実行することについては多くのことが言われていますが、私には留保があります。GPU は ARM コードを実行しますか? いいえ、公式バージョンのブート シーケンスに直面して、元の GPU データから、32K が L2 キャッシュにコピーされ (DRAM がオンになっていないため)、その時点から CPU がコードを実行して、 SDRAM から BIOS をロードします。ブート シーケンスでは、Trustzone 設定は有効になりません。これにより、ベアメタル コーダー (組み込みシステム) は大部分の CPU FlashROM をベクター テーブルとして使用できるため、必要に応じてハードウェアをポーリングし、ベクターをセットアップできます。The Smurf Suite が安全ではないことを証明しているため、TZ のものには有用なプロパティはありません。しかし、そのスペースをベクトルに使用すると、誰かが再フラッシュすると、OS が停止します。

于 2016-09-05T11:17:17.823 に答える