3

コードをコード用の 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 = .;

}
4

0 に答える 0