ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
8 сентября
94205 Топик полностью
-=Max=- (13.07.2007 11:14, просмотров: 1) ответил she на Не, не похоже. К тому же единственный прописанный в тексте h-ник - с описанием периферии проца.
задача забавная... вообщем мысли примерно следующие. :) такого я никогда сам не делал, потому есс-но всё ИМХО 1) можно попытаться скопировать секции, если есть objcopy выглядеть должно примерно так: gcc ... file.c objcopy --rename-section .text=.data file.o 2) можно написать свой сценарий линкера, или поправить существующий сценарий выглядит примерно так:
SECTION
{
     .=0x0100000l;
     .text : 
     {
           *(.text)
     }
     .=0x80000000;
     .data :
     {
           *(.data)
     }
     .bss :
     {
            *(.bss)
     }
}
где - .text-секция содержит код программы - .data-секция содержит инициализированные данные; - .bss-секция содержит инициализированные данные; соответственно можно подсунуть нужный диапазон адресов и, я думаю, линкер затолкает всё как надо. запуск линкера примерно такой ld -T tra-la-la.start obj1.o obj2.o obj3.o my_great_program где tra-la-la.start - сценарий линкера obj1.o obj2.o obj3.o -объектные файлы, которых наплодил компилятор my_great_program -выходная программа да, у меня по тексту в фигурных скобках стоит например *(.data) * -значит для всех имен объектников, можно на самом деле указывать явно имя, тогда для разных объектников линкер может действовать по разному. сценарий может быть другого вида, например:
MEMORY
{
    rom (rx)   : ORIGIN 0x00000000 LENGTH 512k
    ram (rwx)  : ORIGIN 0x00010000 LENGTH 512k
}
SECTION
{
     .text rom : 
     {
           *(.text)
     }
     .data :
     {
           _StartOfData=.;
           *(.data)
           _EndOfData=.;
     }
     .bss :
     {
            *(.bss)
     }
     _StackLocation=0x80000000;
}
но смысл в принципе я думаю понятен :). Вот собственно всё что удалось нарыть по этому вопросу :).