リンカー スクリプト - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: エンベデッド ソフトウェア開発 (UG1400)

Document ID
UG1400
Release Date
2022-04-26
Version
2022.1 日本語

リンカー ユーティリティは、リンカー スクリプトで指定したコマンドを使用してユーザー プログラムを複数のメモリ ブロックに分割します。リンカー スクリプトは、すべての入力オブジェクト ファイルのすべてのセクションから実行ファイルへのマップを記述します。出力セクションは、システムのメモリにマップされます。プログラム データを連続するメモリに割り当てるというデフォルト操作を変更しない場合は、リンカー スクリプトは必要ありません。リンカーには、セクションの内容を連続的に割り当てる、デフォルトのリンカー スクリプトが用意されています。

プログラムの開始ロケーションのみを変更するには、次の例に示すように、MicroBlaze の場合は _TEXT_START_ADDR リンカー シンボル、Arm の場合は START_ADDR シンボルを定義します。

mb-gcc <input files and flags> -Wl,-defsym -Wl,_TEXT_START_ADDR=0x100
mb-ld <.o files> -defsym _TEXT_START_ADDR=0x100

$XILINX_/gnu/<procname>/<platform>/<processor_name>/lib/ldscripts からリンカーが使用するデフォルト スクリプトの選択肢は、次のとおりです (<procname> =microblaze<processor_name> = microblaze<platform> = lin または nt)。

  • elf32<procname>.x: この後に示すオプションのいずれも使用されていない場合のデフォルト。
  • elf32<procname>.xn: -n オプションを使用してリンカーが起動された場合。
  • elf32<procname>.xbn: -N オプションを使用してリンカーが起動された場合。
  • elf32<procname>.xr: -r オプションを使用してリンカーが起動された場合。
  • elf32<procname>.xu: -Ur オプションを使用してリンカーが起動された場合。

リンカー スクリプトを使用するには、GCC コマンド ラインで指定します。コンパイラには、次のように -T <script> コマンド ライン オプションを使用します。

compiler -T <linker_script> <Other Options and Input Files>

リンカーを個別に実行する場合は、リンカー スクリプトを次のように指定します。

linker -T <linker_script> <Other Options and Input Files>

このコマンドを使用すると、デフォルトのリンカー スクリプトの代わりに指定したリンカー スクリプトが使用されます。プログラム用のリンカー スクリプトは、IP インテグレーターおよび Vitis ソフトウェア プラットフォームから生成できます。

IP インテグレーターまたは Vitis IDE で、Tools > Generate Linker Script をクリックします。

これでリンカー スクリプト生成ユーティリティが開きます。セクションのメモリへのマップは、ここで実行されます。スタックおよびヒープのサイズとメモリ マップもここで設定できます。リンカー スクリプトが生成されると、IP インテグレーターまたは Vitis 環境内で対応するアプリケーションをコンパイルしたときにそのスクリプトが自動的に GCC に入力されます。

リンカー スクリプトは、メモリに変数または関数を割り当てるために使用できます。これには、C コードのセクション属性を使用します。また、リンカー スクリプトでメモリのセクションにオブジェクト ファイルを割り当てることもできます。これらの機能およびその他の機能については、binutils マニュアルの一部である GNU リンカーのマニュアルを参照してください。MicroBlaze プロセッサ リンカー スクリプトによって割り当てられる入力セクションの特定のリストについては、MicroBlaze リンカー スクリプトで割り当てられるセクション を参照してください。