ハードウェアが実行を開始するアドレスでブート コードを使用できるようにする必要があります。
これは通常、ハードウェアがある種のフラッシュまたはブート ROM をブート アドレスにマップし、そこから実行を開始することによって実現されます。
マイクロコントローラーでは、起動時に実行を開始するコードの寿命はかなり厳しいことに注意してください-ハードウェアはまだ初期化されておらず、ハードウェアがないということは、RAMへのアクセスを制御するDDRコントローラーでさえまだ機能していないことを意味します...したがって、コードは RAM なしで実行する必要があります。
最初のブート コードでハードウェアを十分に設定した後 (たとえば、RAM チップの設定、TLB の設定、MAC のプログラムなど) を実行すると、ブートローダーが実行されます。
一部のシステムでは、初期ブート コードはブート ローダーの最初の部分にすぎません。一部のシステムでは、専用のブート コードが設定を行い、フラッシュからブート ローダーを読み取って実行します。
ブートローダの仕事は、カーネル/OS のイメージを、通常はフラッシュまたはネットワークから RAM に取り込むことです (まれですが、別のボードや PCI バスなどとメモリを共有することもできます)。ブート ローダーがカーネル/OS バイナリのイメージを RAM に格納すると、必要に応じて圧縮を解除し、カーネル/OS イメージの開始アドレスを制御 (呼び出し) します。
場合によっては、カーネル/OS イメージが、実際には圧縮されたカーネルの小さなデコンプレッサおよびブロブであることがあります。
いずれにせよ、最終的な結果として、カーネル/OS は RAM で利用可能になり、ブートローダーは、オプションでピギーバック圧縮解除プログラムを介して制御を渡します。
その後、カーネル/OS が実行を開始し、OS が起動します。