1

これが私の問題です。コードを異なる領域に分割するリンカー スクリプトを作成しました。それがリンカースクリプトです:

OUTPUT_ARCH(arm)

SECTIONS {

. = 0x400000;
.stack1 : {
    __stack_start1 = . ;
}

. = 0x800000;
.stack2 : {
    __stack_start2 = . ;
}

. = 0x19900000;
.vectors1 : {
    *(.resetvector1)
}

. = 0x19900018;
.irq_vector : {
    *(.irqvector)
}

. = 0x19908000;
.init : {           /* Init code and data   */
    *(.text1.init)
    *(.text2.init)
}

/DISCARD/ : {           /* Exit code and data   */
    *(.text.exit)
    *(.data.exit)
    *(.exitcall.exit)
}

.text : {           /* Real text segment    */
    _text = .;      /* Text and read-only data*/
        *(.text)
    _etext = .;     /* End of text section  */
}

. = ALIGN(8192);

.data : {
    /*
     * first, the init task union, aligned
     * to an 8192 byte boundary.
     */
    *(.init.task)

    /*
     * then the cacheline aligned data
     */
    . = ALIGN(32);
    *(.data.cacheline_aligned)

    /*
     * and the usual data section
     */
    *(.data)
    CONSTRUCTORS

    _edata = .;
}

.bss : {
    __bss_start = .;    /* BSS  */
    *(.bss)
    *(COMMON)
    _end = . ;
}

. = ALIGN(8192);
_end_kernel = . ;

.vectors2 : {
        *(.resetvector2)
}

}

正常に動作しますが、プログラム全体が約数kbの場合、出力ファイルは約450Mbです!! どうして??ld は、スタック、データ、テキストなどの領域の間の空の領域を (0x0 で) 埋めていると思います。この問題を回避するには?

前もって感謝します。

4

1 に答える 1

1

の代わりに.sectionname ロケーション構文を使用してみます。= 場所 .section . これで問題が解決しない場合は、MEMORY で別のメモリ領域を定義し、そこにセクションを作成すると、この動作は確実に停止するはずです。

于 2012-03-28T09:59:14.890 に答える