コードをコード用の 2 つのメモリ領域と BSS 用の別のメモリ領域に分割する liker スクリプトを作成しようとしています。
2 つのコード セクションは一緒にリンクされますが、別々にロードされます。さまざまなバージョンのアライメントセクションを試しましたが、成功しませんでした。
ここに私が欲しいものの説明があります:
閃光:
------------ 0x0
| CODE 1 |
| |
------------
| fill to |
|alignment |
| |
------------ 0x200000
| CODE 2 |
| |
------------
メモリにロード:
------------ 0x5c010000
| CODE 1 |
| |
------------
. .
. .
------------ 0x81500000
| CODE 2 |
| |
------------
リンカーのマニュアル「入力セクションの例」を見ましたが、うまくいきません。
これが私のコードのサンプルです:
/*-------------------------------------------------------------------------
* Filename: startup.lds
*-----------------------------------------------------------------------*/
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_FORMAT("elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(__main)
SECTIONS
{
. = 0x5c006000;
__bss_start = .;
.bss : { *(EXCLUDE_FILE (../../release/eshel_lte_evb3/usbdownload.o
../../release/eshel_lte_evb3/usbdriver.o
../../release/eshel_lte_evb3/xllp_udc.o)
.bss) }
.bss2 : {
../../release/eshel_lte_evb3/usbdownload.o (.bss)
../../release/eshel_lte_evb3/usbdriver.o (.bss)
}
. = ALIGN(4);
. = 0x5c010000;
.__main = .;
. = ALIGN(4);
.text : {
*(EXCLUDE_FILE (../../release/eshel_lte_evb3/usbdownload.o
../../release/eshel_lte_evb3/usbdriver.o
../../release/eshel_lte_evb3/xllp_udc.o)
.text)
. = ALIGN(4);
}
.rodata : { *(EXCLUDE_FILE (../../release/eshel_lte_evb3/usbdownload.o
../../release/eshel_lte_evb3/usbdriver.o
../../release/eshel_lte_evb3/xllp_udc.o)
.rodata) }
. = ALIGN(4);
.got : { *(EXCLUDE_FILE (../../release/eshel_lte_evb3/usbdownload.o
../../release/eshel_lte_evb3/usbdriver.o
../../release/eshel_lte_evb3/xllp_udc.o)
.got) }
. = ALIGN(4);
__egot = .;
. = ALIGN(4);
__data_start = .;
.data : AT (__egot) {*(.data) } =0xFFFFFFFF
__data_end = .;
. = ALIGN(16);
_seg_CODE_end_ = .;
/* ASSERT((_seg_CODE_end_ <= 0x5c020000), "Error: Code size to big")*/
. = ALIGN(0x20000);
__topofcode__ = .;
. = 0x81500000;
.__usb_code_start = .;
.usb_code 0x81500000 :
AT(__topofcode__)
ALIGN(0x20000)
SUBALIGN(0x20000)
{
../../release/eshel_lte_evb3/usbdownload.o (.text)
../../release/eshel_lte_evb3/usbdriver.o (.text)
../../release/eshel_lte_evb3/usbdownload.o (.rodata)
../../release/eshel_lte_evb3/usbdriver.o (.rodata)
../../release/eshel_lte_evb3/usbdownload.o (.data)
../../release/eshel_lte_evb3/usbdriver.o (.data)
}
__bss_end = .;
}