3.4 リンカでイメージのメモリマップを指定する方法

1 つのイメージを構成する領域の数と出力セクションの数に制限はありません。領域には、異なるロードアドレスと実行アドレスを割り当てることができます。

イメージのメモリマップを作成すると、armlink は以下に関する情報に渡す必要があります。

  • 入力セクションを出力セクションと領域にグループ化する方法

  • メモリマップ内における領域の位置

イメージのメモリマップの複雑度に応じて、この情報は以下の 2 つの方法で armlink に渡すことができます。

単純なメモリマップの説明に関連するコマンドラインオプション

イメージ内のロード領域が 1 つか 2 つで、実行領域が最高でも 3 つしかないような単純なケースでは、以下のオプションを使用できます。

  • --first

  • --last

  • --ro_base

  • --rw_base

  • --ropi

  • --rwpi

  • --split

  • --rosplit

  • --xo_base

  • --zi_base

単純イメージについては、これらのオプションを使用した簡単な表記によって、スキャッタロード記述と同じ設定が可能です。ただし、これらのオプションの使用時に領域への無制限のチェックが使用可能となります。

--xo_base--ropi または --rwpi

複雑なメモリマップの説明のスキャッタファイル

スキャッタファイルは、メモリレイアウトおよびコードとデータの配置を記述したテキストです。イメージコンポーネントのグループ化と配置を厳密に制御する必要がある複雑な場合に、スキャッタファイルを使用します。スキャッタファイルを使用するには、以下を指定します。 コマンドラインでの --scatter=filename

--scatter は、他のメモリマップ関連のコマンドラインオプションと共に使用することはできません。

表 3-2 スキャッタファイルおよび対応するコマンドラインオプションの比較

スキャッタファイル 対応するコマンドラインオプション
LR1 0x0000 0x20000 {
 
    ER_RO 0x0 0x2000     {
--ro_base=0x0
        init.o (INIT, +FIRST)         *(+RO)     }
--first=init.o(init)
    ER_RW 0x400000     {          *(+RW)     }
--rw_base=0x400000
    ER_ZI 0x405000     {         *(+ZI)     } }
--zi_base=0x405000
LR_XO 0x8000 0x4000 {
                
 
    ER_XO 0x8000     {         *(XO)     } }
                
--xo_base=0x8000

XO セクションが存在する場合は、--xo_base を指定する時にのみ、個別のロード領域と実行領域が作成されます。--xo_base を指定しない場合、ER_XO 領域は --ro_base が指定したアドレスで LR1 領域に配置されます。ER_RO 領域は ER_XO 領域の直後に配置されます。

関連する概念
3.3 イメージのロードビューと実行ビュー
3.5 単純イメージのタイプ
3.1 ARM ELF イメージの構造
3.2 入力セクション、出力セクション、領域、およびプログラムセグメント
関連する参考文書
12.62 --first=section_id
12.81 --last=section_id
12.119 --ro_base=address
12.120 --ropi
12.121 --rosplit
12.123 --rw_base=address
12.124 --rwpi
12.126 --scatter=filename
12.136 --split
12.171 --xo_base=address
12.175 --zi_base=address
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.