AR# 15292

|

MicroBlaze - LMB と OPB の命令メモリについて

説明

キーワード : linker, GNU, LMB, OPB, instruction, memory, segmented, code, リンカ, 命令, メモリ, セグメント, コード

重要度 : 標準

概要 :
LMB と OPB など、CRT0 とアプリケーション コードを別々のテキスト セクションに配置する ELF ファイルを作成するには、どうしたらよいですか。

ソリューション

次のリンカ スクリプトを使用すると、この問題を解決できます。 このリンカ スクリプトを使用するには、mb-gcc コマンド ラインに次のオプションを追加する必要があります。

--save-temps
-Wl,--script linker_script

/*
* メモリのレイアウトを定義し、開始アドレスおよび各メモリの領域の範囲を指定します。
*/
MEMORY
{
LMB : ORIGIN = 0x00000000, LENGTH = 2K
OPB : ORIGIN = 0x00800000, LENGTH = 4K
}

/*
* プログラムへのデフォルトのエントリ ポイントを指定します。
*/
ENTRY(_start)

/*
* セクションおよび各セクションがマップされる場所を定義します。
*/

SECTIONS
{

/*
* すべての入力オブジェクト ファイルから成る .text セクションが LMB メモリの出力ファイル
* セクション .text に配置されるように指定します。 mb-gdb では、実行ファイルに
* .text セクションが必要です。
*/
.text : {
*(EXCLUDE_FILE(system.o).text)
} >LMB

/* スタックおよびヒープの空間を定義します。*/
/* 変数 _heap はこの領域の最初に設定し、*/
/* _stack はこの領域の最後に設定する必要があります。*/
. = ALIGN(4);
_heap = .;

.bss : {
_STACK_SIZE = 0x400;
. += _STACK_SIZE;
. = ALIGN(4);
} >OPB
_stack = .;

/* */
/* OPB メモリの開始 */
/* */

/* 次の行は実行セクションを OPB メモリに追加します。*/
.opb_text : {
system.o(.text)
} >OPB
. = ALIGN(4);

.rodata : {
*(.rodata)
} >OPB
/* 8 ビットで配置すると _SDA2_BASE_ がワードの境界に配置されます。*/
. = ALIGN(8);
_ssrw = .;

.sdata2 : {
*(.sdata2)
} >OPB
. = ALIGN(8);
_essrw = .;
_ssrw_size = _essrw - _ssrw;
_SDA2_BASE_ = _ssrw + (_ssrw_size / 2 );
. = ALIGN(4);

.data : {
*(.data)
} >OPB
/* 8 ビットで配置すると _SDA_BASE_ がワードの境界に配置されます。*/
/* .sdata と .sbss は隣接させる必要があります。*/
. = ALIGN(8);
_ssro = .;

.sdata : {
*(.sdata)
} >OPB
. = ALIGN(4);

.sbss : {
*(.sbss)
} >OPB
. = ALIGN(8);
_essro = .;
_ssro_size = _essro - _ssro;
_SDA_BASE_ = _ssro + (_ssro_size / 2 );
. = ALIGN(4);

.opb_bss : {
*(.bss) *(COMMON)
} > OPB
. = ALIGN(4);
_end = .;
}
AR# 15292
日付 04/28/2006
ステータス アーカイブ
種類 一般
People Also Viewed