2017-01-21 3 views
0

私が知っているように、プロセッサはRAMに直接アクセスできます。起動時のデバイスのRAMは空であり、CPUはブートローダーをどこにロードしてRAMから実行するのかを知りません。コールスタックは空でなければならないので、何もできません。 さらに実行するためにブートローダプログラムをRAMにコピーする方法はありますか?ARM CPUがブートローダをロードする方法は?

これは、スマートフォンなどの埋め込みデバイスで発生するはずです。 x86 PC BIOSは、ディスクからRAMへのMBRセクションのロードを担当します。

+1

ハードコードされた初期ブートローダを搭載したROMオンチップの一部です。これはCPUに、ブートデバイスから(CPUピンをアップ/ダウンさせることによって構成された)次のブートローダをオンチップSRAMにロードして実行するように指示します。次に、2段目はより多くのハードウェアを初期化します。ブートデバイスのDRAMとファイルシステムをオフチップにして、3番目のブートローダをDRAMに入れて実行してください。第3段階の後、CPUはOSカーネルをロードして実行できるはずです。場合によっては、第3ステージ全体がDRAMにロードされる前に、第3ステージの一部をオンチップSRAMに圧迫する追加の2.5ステージがあります。 – user3528438

+0

どのARMアーキテクチャを参照していますか?彼らは全く同じように働くわけではありません。さらに、多くの場合ベンダー固有のものであり、異なるARMライセンシーは実装が異なります。 – Clifford

+0

@Clifford私はARMv7を参照しました – Alex

答えて

0

RAMのブートローダは、セカンダリブートローダです。 ROMに何らかの種類のコードがあり、セカンダリブートストラップをロードするプライマリブートストラップを含んでいます。多くの場合、そのROMはチップ上のマスクROMです。

通常、Cortex-AなどのARMアプリケーションプロセッサでは、プライマリブートストラップがNANDフラッシュまたはSDカードからRAMにコードをロードします。 ARM Cortex-Mでは、どのような場合でもROMから直接コードを実行することがよくあります。

0

x86にも同じ問題があります。一般的に同じソリューション(他のプロセッサと同じように)では、プロセッサが起動するアドレス空間と/またはベクタテーブルがある場所にROM /フラッシュを配置します。

いくつかの不揮発性ストレージから読み込み、ブート/ベクトル空間に配置する他のロジック、または他のプロセッサ/コンピュータがボード/チップにダウンロードするためのインターフェイスを提供するその他のロジックその後リセットを解除します。

関連する問題