67

ご存知のように、X86 アーキテクチャの場合: 電源ボタンを押すと、マシンは 0xFFFFFFF0 でコードの実行を開始し、ハードウェアの初期化を行うために BIOS でコードの実行を開始します。BIOS の実行後、ブートローダーを使用して OS イメージをメモリにロードします。最後に、OS コードの実行が開始されます。ARM アーキテクチャの場合、電源ボタンを押した後の起動プロセスは何ですか? ありがとう!

4

3 に答える 3

74

現在、ARM アーキテクチャには 2 つの例外モデルがあります (リセットは一種の例外と見なされます)。

以前の Cortex チップと現在の Cortex-A/R チップで使用されるクラシック モデル。その中で、0 のメモリにはいくつかの例外ハンドラが含まれています。

 Offset  Handler
 ===============
 00      Reset 
 04      Undefined Instruction
 08      Supervisor Call (SVC)
 0C      Prefetch Abort
 10      Data Abort
 14      (Reserved)
 18      Interrupt (IRQ)
 1C      Fast Interrupt (FIQ)

例外が発生すると、プロセッサは特定のオフセットから実行を開始するだけなので、通常、このテーブルにはコード内の完全なハンドラへの単一命令分岐が含まれます。典型的な従来のベクター テーブルは次のようになります。

00000000   LDR   PC, =Reset
00000004   LDR   PC, =Undef
00000008   LDR   PC, =SVC
0000000C   LDR   PC, =PrefAbort
00000010   LDR   PC, =DataAbort
00000014   NOP
00000018   LDR   PC, =IRQ
0000001C   LDR   PC, =FIQ

実行時に、ベクタ テーブルを 0xFFFF0000 に再配置できます。これは、多くの場合、最速の例外処理のために密結合メモリ範囲として実装されます。ただし、通常、パワーオン リセットは 0x00000000 から始まります (ただし、一部のチップでは、プロセッサ ピンによって 0xFFFF0000 に設定できます)。

新しいマイクロコントローラ モデルは、Cortex-M チップ ラインで使用されます。そこでは、0 のベクトル テーブルは、実際にはベクトル (ポインター) のテーブルであり、命令ではありません。最初のエントリには SP レジスタのスタートアップ値が含まれ、2 番目のエントリはリセット ベクターです。これにより、プロセッサがスタックを設定するため、リセット ハンドラを C で直接記述できます。ここでも、テーブルは実行時に再配置できます。Cortex-M の典型的なベクトル テーブルは次のように始まります。

__Vectors       DCD     __initial_sp              ; Top of Stack
                DCD     Reset_Handler             ; Reset Handler
                DCD     NMI_Handler               ; NMI Handler
                DCD     HardFault_Handler         ; Hard Fault Handler
                DCD     MemManage_Handler         ; MPU Fault Handler
                DCD     BusFault_Handler          ; Bus Fault Handler
                DCD     UsageFault_Handler        ; Usage Fault Handler
                [...more vectors...]

OMAP3 や Apple の A4 などの最新の複雑なチップでは、通常、最初に実行されるコードはユーザー コードではなく、オンチップのブート ROM であることに注意してください。さまざまな条件をチェックして、ユーザー コードをどこからロードするか、ロードするかどうかを決定する場合があります (たとえば、有効なデジタル署名が必要になる場合があります)。このような場合、ユーザー コードはさまざまな起動規則に準拠する必要があります。

于 2011-05-26T14:50:14.833 に答える