7.16 スキャッタファイルを使用した ELF のマッピング

ELF にスキャッタファイルコンポーネントがどのようにマップされるかを示します。

単純イメージの場合、ELF 形式の実行可能なファイルには、以下のセグメントが含まれます。
  • PT_LOAD タイプの 1 つの ELF プログラムセグメントで表されるロード領域。
  • 以下の 1 つまたは複数の ELF セクションで表される実行領域。
    • XO
    • RO
    • RW
    • ZI

XO と RO が実行領域内に混在する場合、その実行領域は RO として処理されます。
例えば、以下のようなスキャッタファイルがあるとします。
LOAD 0x8000
{
    EXEC_ROM +0
    {
        *(+RO)
    }
    RAM+0
    {
        *(+RW,+ZI)
    }
    HEAP +0x100 EMPTY 0x100
    {
    }
    STACK +0 EMPTY 0x400
    {
    }
}
このスキャッタファイルでは、ロード領域のアドレスが 0x8000 である、PT_LOAD タイプの 1 つのプログラムセグメントが作成されます。
EXEC_ROM の内容を表す SHT_PROGBITS タイプの 1 つの出力セクションが作成されます。RAM を表す 2 つの出力セクションが作成されます。1 つは SHT_PROGBITS タイプで、初期化された読み出し/書き込みデータを含みます。もう 1 つは SHT_NOBITS タイプで、ゼロで初期化されたデータについての記述を含みます。
ヒープとスタックは、ELF ファイルの SHT_NOBITS セクションに記述されます。
イメージ内のスキャッタロードされたセクションを確認するには、以下の fromelf コマンドを入力します。
fromelf --text -v my_image.axf
シンボルテーブルを表示するには、以下のコマンドを入力します。
fromelf --text -s -v my_image.axf
以下は fromelf の出力例で、LOADEXEC_ROMRAMHEAP、および STACK の各セクションが示されています。
…
========================================================================
** Program header #0
    Type          : PT_LOAD (1)
    File Offset   : 52 (0x34)
    Virtual Addr  : 0x00008000
    Physical Addr : 0x00008000
    Size in file  : 764 bytes (0x2fc)
    Size in memory: 2140 bytes (0x85c)
    Flags         : PF_X + PF_W + PF_R + PF_ARM_ENTRY (0x80000007)
    Alignment     : 4
========================================================================
** Section #1
    Name        : EXEC_ROM
…
    Addr        : 0x00008000
    File Offset : 52 (0x34)
    Size        : 740 bytes (0x2e4)
…
====================================
** Section #2
    Name        : RAM
…
    Addr        : 0x000082e4
    File Offset : 792 (0x318)
    Size        : 20 bytes (0x14)
…
====================================
** Section #3
    Name        : RAM
…
    Addr        : 0x000082f8
    File Offset : 812 (0x32c)
    Size        : 96 bytes (0x60)
…
====================================
** Section #4
    Name        : HEAP
…
    Addr        : 0x00008458
    File Offset : 812 (0x32c)
    Size        : 256 bytes (0x100)
…
====================================
** Section #5
    Name        : STACK
…
    Addr        : 0x00008558
    File Offset : 812 (0x32c)
    Size        : 1024 bytes (0x400)
…
関連する概念
7.1.1 スキャッタロードの概要
7.1.6 メモリマップが単純なスキャッタロードイメージ
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.