2007年12月4日

CART実行するためのリンカスクリプト

GBAでCART実行するプログラムを作る場合、
  • コンパイル(リンク)したプログラムでは、.dataセクションはROM上に存在する
  • 実動作をさせる場合には、.dataセクションはRAM上にコピーしなければならない
そのため、リンカスクリプトもMB用のものとは変えて作成しなければならない。
リンカスクリプトの作成時には、.dataセクション(.bssセクションも)が、LMAはROM上のアドレスで、VMAはRAM上のアドレスになるようにしなければならない。

devkitARMのリンカスクリプトも参考に、以下のリンカスクリプトを作成した。


MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x03000000, LENGTH = 32K
ewram : ORIGIN = 0x02000000, LENGTH = 256K
}

SECTIONS {
. = ORIGIN(rom)
.text :
{
*(.text)
*(.glue_7)
*(.glue_7t)
} > rom
.rodata :
{
*(.rodata*)
} > rom

__data_lma = .;
.data : AT(__data_lma)
{
*(.data)
} > ewram
.bss :
{
*(.bss)
} > ewram
}
赤字の部分がポイント。
これで、リンカスクリプトは(たぶん)OK.

ただし、実際にROMで実行する場合は、.dataセクションをRAMへコピーするコードも作成する必要がある。


参考ページ
GNUリンカLDの使い方 : http://www.sra.co.jp/wingnut/ld/ld-ja_3.html

0 件のコメント: