LINUX.ORG.RU

LD, скрипт линкера ?


0

0

Может у кого есть опыт, подскажите пожалуйста,
как собрать 2 загружаемых файла по разным адресам,
адреса указываю в скрипте линковщика в выходных секциях
Мне нужно создать 2 файла:
- один загружать в ROM по адресу 0x00000000 ; rom.elf / rom.bin
- другой загружать в RAM по адресу 0xC0000000 ; ram.elf / ram.bin
Я написал такой скрипт:
ENTRY(_start)
MEMORY {
ROM : ORIGIN = 0x00000000, LENGTH = 4K
RAM : ORIGIN = 0xC0000000, l = 128K
}
SECTIONS
{
.vectors 0x00000000 : AT( 0x00000000)
{
_svectors = . ;
*(.vectors)
_evectors = . ;
} >ROM
.text 0xC0000000: AT( 0xC0000000)
{
_stext = . ;
*(.start)
*(.text)
*(.rodata)
*(.rodata*)
*(.glue_7)
*(.glue_7t)
*(.data)
*(.bss)
_etext = . ;
} >RAM
. = ALIGN(4);
}
.end

При конпиляции создается один файл *.elf, если его дизассемблировать, то
вроде соответствует желаемому.
А как мне теперь этот файл, формата *.elf распилить на 2 файла ?
Я пробовал:
objcopy -j .vectors image.out ROM.elf // копирую секцию '.vectors' в ROM.elf
objcopy -R .vectors image.out RAM.elf // все кроме '.vectors' в RAM.elf
Распиливаются но при создании ROM.bin из ROM.elf, ROM.bin получается 0 длины,
и дизассемблер ROM.elf не содержит assembler кода

Может так вообще делать нельзя ?
Не подскажите как правильно делают такие вещи, что сделал не так, как правильно ?
Подскажите если не сложно.

Ответ на: комментарий от fghj

Я так делал, но тогда нужно явно указывать адреса перехода из одного
загружаемого файла в другой. Я не уверен что так хорошо.
Создавая 1 файл линкер разрешает ссылки сам. Я просто не знаю можно ли
сделать как я спросил или нет, если можно то как ? Может кто подскажет,
где хоть копать, может где в ядре можно посмотреть ?

user209
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.