4

ベアメタル ARM アプリケーション用にカスタマイズされたリンカー スクリプトを作成しています。アプリケーションはフラッシュ メモリに保存されます。現時点では、アプリケーション全体を SDRAM にコピーする起動コードがあり、高速化のために SDRAM で実行を続けています。このスクリプトを変更して、コード全体をフラッシュから直接実行したいのですが、特定の要素を理解するのに問題があります。

以下のリンカ スクリプトでは、.ram_dataセクションに実行アドレスRAMとロード アドレスがありますROM(どちらのセクションも SDRAM にあります)。私が理解していることから、リンカーは実行アドレスを使用して、PC 相対ではないすべての要素のシンボル解決を行いますが、ロードアドレスはどうですか? ベアメタル ARM のコンテキストでは、プログラム ローダーのようなものは存在せず、リンカがフラッシュ内のプログラムを書き込む場所に影響を与えることはできません。では、リンカは実際には何に使用されるのでしょうか?

同様に、リンカは実行時に SDRAM が (rx) または (rw) であることにどのように影響を与えることができますか? メモリ領域でこれらのオプションを変更すると、実際に何かが変更されますか?

MEMORY
{
  RAM(rw) : ORIGIN = 0x00001000, LENGTH = 12M-4K
  ROM(rx) : ORIGIN = 0x007f1000, LENGTH = 60K
}              

SECTIONS                                                                
{    
   .startup : 
   { ... } > VECTOR                

   .rom_text :   
   { ... } > ROM 

   .ram_data : 
   {   
      _data_start = .;                                                                 
      *(.data*)        
      _data_end = .;       
   } > RAM AT>ROM 

   .ram_bss :
   { ... } > RAM
}
4

2 に答える 2

1

私が理解していることから、リンカーは実行アドレスを使用して、PC 相対ではないすべての要素のシンボル解決を行いますが、ロードアドレスはどうですか? ベアメタル ARM のコンテキストでは、プログラム ローダーのようなものは存在せず、リンカがフラッシュ内のプログラムを書き込む場所に影響を与えることはできません。では、リンカは実際には何に使用されるのでしょうか?

その情報は ELF 実行可能ファイルに格納されobjcopy、バイナリ ファイル (.binや など.hex) の配置方法を決定するツールなどによって使用されます。最終的には、プログラマーにプログラムを配置する場所を伝えることになります。

同様に、リンカーは、実行時に SDRAM が (rx) または (rw) であることにどのように影響を与えることができますか? メモリ領域でこれらのオプションを変更すると、実際に何かが変更されますか?

この特定の使用例では、これらのフラグは情報提供のみを目的としています。これらは主に、動的にロードされるプログラムに使用されます。

于 2013-04-09T20:58:19.863 に答える
1

リンカー スクリプトの例を考えると、これら 2 つの質問は関連しています。

私が理解していることから、リンカーは実行アドレスを使用して、PC 相対ではないすべての要素のシンボル解決を行いますが、ロードアドレスはどうですか?

同様に、リンカーは、実行時に SDRAM が (rx) または (rw) であることにどのように影響を与えることができますか? メモリ領域でこれらのオプションを変更すると、実際に何かが変更されますか?

LOADすべてをFLASHにプログラムする必要があるため、アドレスは便利です。.ram_dataこれが持つべき理由AT>ROMです。LOADこれは、データがROM/Flash から送信されることをリンカに伝えています。この場合、フラッシュからSDRAMにコピーするアセンブラー ブート コードを作成する必要があります。

>ROM2番目の質問は、セクションに入れることで答えることができます.ram_data. これを行うと、リンカーは、書き込み可能なセクションが読み取り専用メモリに配置されていると文句を言います。セクションが正しい場所にあるMEMORYことを確認するのに役立つため、セクションに読み取り/書き込み情報をマークすることをお勧めします。つまり、リンカーに提供する情報のクロスチェックです。

>RAM AT>ROM代わりに is の間違い>ROMは、概念/質問を似たものにするだけです。

于 2013-04-09T22:22:34.487 に答える