3.1.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.1.3 イメージのロードビューと実行ビュー
3.2 単純イメージ
3.1 ARM ELF イメージの構造
3.1.2 入力セクション、出力セクション、領域、およびプログラムセグメント
関連する参考文書
12.62 --first=section_id
12.80 --last=section_id
12.118 --ro_base=address
12.119 --ropi
12.120 --rosplit
12.122 --rw_base=address
12.123 --rwpi
12.125 --scatter=filename
12.135 --split
12.170 --xo_base=address
12.174 --zi_base=address
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.