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