Перейти к содержанию
    

Распределение модулей по разным адресам

Столкнулся с необходимостью фиксированно распределить модули (и отдельные объекты) программы по двум адресным пространствам.

 

Есть ли у кого пример ldscript'а, который делает что-то подобное? А то уже выбился из сил изучая толмуты документации, не получая результата.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для данных и функций :

 

/*---------------------------------------------------------------------------*/

/* AT91SAM7S256 */

/*---------------------------------------------------------------------------*/

 

MEMORY

{

CODE (rx) : ORIGIN = 0x00000000, LENGTH = 256K

DATA (rw) : ORIGIN = 0x00200000, LENGTH = 64K

STACK (rw) : ORIGIN = 0x00210000, LENGTH = 0

}

 

/* Section Definitions */

 

SECTIONS

{

/* first section is .text which is used for code */

.text : { *cstartup.o (.text) } >CODE =0

.text :

{

*(.text) /* remaining code */

*(.glue_7t) *(.glue_7)

} >CODE =0

 

. = ALIGN(4);

 

/* .rodata section which is used for read-only data (constants) */

.rodata :

{

*(.rodata)

} >CODE

 

. = ALIGN(4);

_etext = . ;

PROVIDE (etext = .);

 

/* .data section which is used for initialized data */

/* Это секция для инициализируемых при старте данных, а так же для функций __ramfunc. */

/* Занимает пространство : _data ... _edata */

.data : AT (_etext)

{

_data = . ;

. = ALIGN(4);

*(.fastrun .fastrun.*) /* Это секция для функций __ramfunc. */

. = ALIGN(4);

*(.data)

SORT(CONSTRUCTORS)

} >DATA

 

. = ALIGN(4);

_edata = . ;

PROVIDE (edata = .);

 

/* Секция для перезаписываемых настроек */

/* Занимает пространство : 255К ... 256K, если выйдем за 256К - линкер выдаст ошибку. */

.dyndata 255K :

{

. = ALIGN(256);

*(.dyndata .dyndata.*);

. = ALIGN(256);

} >CODE =0x00 /* =0x00 - незаполненные ячейки заполнить 0x00 */

 

/* .bss section which is used for uninitialized data */

/* А это секция под все остальные ОЗУ-шные данные (т.е. те которые при старте не инициализируются константами). */

.bss :

{

__bss_start = . ;

__bss_start__ = . ;

*(.bss)

*(COMMON)

} >DATA

 

. = ALIGN(4);

__bss_end__ = . ;

_end = .;

PROVIDE (end = .);

 

. = ALIGN(4);

.int_data :

{

*(.internal_ram_top)

} >STACK

 

/* Stabs debugging sections. */

.stab 0 : { *(.stab) }

.stabstr 0 : { *(.stabstr) }

.stab.excl 0 : { *(.stab.excl) }

.stab.exclstr 0 : { *(.stab.exclstr) }

.stab.index 0 : { *(.stab.index) }

.stab.indexstr 0 : { *(.stab.indexstr) }

.comment 0 : { *(.comment) }

/* DWARF debug sections.

Symbols in the DWARF debugging sections are relative to the beginning

of the section so we begin them at 0. */

/* DWARF 1 */

.debug 0 : { *(.debug) }

.line 0 : { *(.line) }

/* GNU DWARF 1 extensions */

.debug_srcinfo 0 : { *(.debug_srcinfo) }

.debug_sfnames 0 : { *(.debug_sfnames) }

/* DWARF 1.1 and DWARF 2 */

.debug_aranges 0 : { *(.debug_aranges) }

.debug_pubnames 0 : { *(.debug_pubnames) }

/* DWARF 2 */

.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }

.debug_abbrev 0 : { *(.debug_abbrev) }

.debug_line 0 : { *(.debug_line) }

.debug_frame 0 : { *(.debug_frame) }

.debug_str 0 : { *(.debug_str) }

.debug_loc 0 : { *(.debug_loc) }

.debug_macinfo 0 : { *(.debug_macinfo) }

/* SGI/MIPS DWARF 2 extensions */

.debug_weaknames 0 : { *(.debug_weaknames) }

.debug_funcnames 0 : { *(.debug_funcnames) }

.debug_typenames 0 : { *(.debug_typenames) }

.debug_varnames 0 : { *(.debug_varnames) }

}

 

Использование для данных :

static const struct DeviceConfig_s StoredSettings __attribute__ ((section (".dyndata"))) = { ...... }

 

Использование для функций в ОЗУ :

#define __ramfunc __attribute__ ((long_call, section (".fastrun")))

__ramfunc void UnLockRegion(unsigned int region) { ...... }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...