0

x64 での起動プロセスに関するこの有益なブログ投稿を読んでいました。ARM の起動プロセスはどのように異なりますか? Raspberry pi を見てみたところ、制御が ARM プロセッサに渡される前に GPU が実行されるようです。ARM プロセッサに関する同様のリソースはありますか?

4

1 に答える 1

1

x86 ブート プロセスが intel.com で入手可能なドキュメントに記載されているように、arm ブート プロセスは、ドキュメントに記載されている他のプロセッサと同様に arm.com に記載されています。

フル サイズ (非 Cortex-m) アーム コアは、リセットのためにアドレス 0 で実行することによって開始します。リセット用の 1 つの命令ロケーション、データ アボート、未定義の命令など用の 1 つの命令ロケーションがあります。割り込みベクトル テーブルに似ていますが、アドレスの代わりに命令があり、理想的には分岐があります。

プロセッサは歴史的に、ブートスペースやベクターテーブルなどにマッピングされた不揮発性 RAM を持っており、他の場所に揮発性 RAM がある場合は揮発性 RAM を持っています。x86 は歴史的に RAM の上部近くにあり、アームは下部にあります。

ARM は Intel のようなチップを作成しません。ARM は、独自のコアを設計してコンパイラなどを維持する代わりに、チップを作成する他の人々がチップ設計に含めるプロセッサ コアを設計します。いくつかの方法では、不揮発性が低くマップされているものもあり、起動後に RAM をそのアドレス空間にスワップできます。Broadcom 製の Raspberry Pi チップの場合、実際にチップを起動する独自の GPU があり、最終的には Linux カーネルとルート ファイル システムであると想定されるファイルを読み取りますが、そうである必要はありません。このファイルは、redboot や uboot などのブートローダー (この場合は gpu のアームローダー) によって Linux カーネルがロードされる場所の ram (デフォルト) に配置されます。次に、gpu は、Linux カーネルに分岐するために必要なリセット命令を含むいくつかのブレッドクラムを配置し (通常は非常に些細なことです)、アーム コアでリセットを解放して起動できるようにします。したがって、基本的にアームはRAMのみを認識しますが、これは一種の素晴らしいことですが、アームや他のプロセッサがそれを行うのはやや非典型的です。通常、メイン プロセッサは不揮発性ストレージ (eeprom、フラッシュなど) から起動し、Linux などをロードしてそこに分岐します。

サム命令セットのみのコアであるarm cortex-mシリーズを含む、他の多くのプロセッサタイプには割り込みベクトルテーブルがあります。それらはマイクロコントローラーとして設計されており、それほどオーバーヘッドを運ばないように設計されているため、最初のアドレス スロットは実際にはスタック ポインターの初期値で埋められ、次に 2 番目がリセット用のアドレスになり、その他は無数になります。ハードウェアはレジスタを保持するように設計されているため、C 関数へのアドレスをテーブルに正しく配置することができ、自分やツールチェーンをこのプラットフォームに移植した人々によって作成された「何らかのアセンブリが必要な」ラッパーを用意する必要はありません。他のタイプのプロセッサにはベクタ テーブルだけがあり、一部のアセンブリは割り込みなどをラップする必要があります。

于 2015-06-22T23:35:02.817 に答える