Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Dmitry E. Oboukhov                   2:5004/75.151  04 Sep 2006  14:17:55
 To : Dmitry E. Oboukhov
 Subject : получить чистый бинарник
 -------------------------------------------------------------------------------- 
 
 
 $ make
 arm-linux-gcc -c -MMD  -mcpu=arm7tdmi -fomit-frame-pointer main.c -o
 obj/main.o
 arm-linux-gcc -mcpu=arm7tdmi -fomit-frame-pointer -nostartfiles
 -nodefaultlibs -Wl,--entry=main -Ttext=0x00100000 -Tdata=0x00200000
 obj/main.o   -o obj/test.elf
 arm-linux-size --format=SysV  obj/test.elf
 obj/test.elf  :
 section    size      addr
 .text       100   1048576
 .data        44   2097152
 .rodata      24   1048676
 .bss          0   2097196
 .comment     58         0
 Total       226
 arm-linux-objcopy  -O binary -S -j .text obj/test.elf obj/test.bin.rom
 arm-linux-objcopy  -O binary -S -j .rodata obj/test.elf
 obj/test.bin.romdata
 arm-linux-objcopy  -O binary -S -j .data obj/test.elf obj/test.bin.ram
 cat obj/test.bin.rom obj/test.bin.romdata obj/test.bin.ram > test.bin
 
 то есть на выходе имею чистый бинарник у которого все секции разложены
 туда куда надо (в смысле констаты типа
 
 const i=1;
 работают нормально, а копия инициализированных RAM-данных лежит в ROM
 сразу за константами.
 теперь осталось свой стартап код написать, такой чтобы он эту копию
 RAM-данных переносил в ОЗУ.
 
 (контроль за переполнением флэш я пока не писал в Makefile, но он вроде
 просто делается)
 
 вопрос 1: как из C узнать размеры сегментов .text, .rodata и .data?
 очень не хочется на Асме стартап код писать. но соответственно если
 альтернатив нет, то тот же вопрос про АСМ: как узнать в нем размеры тех
 же сегментов?
 
 вопрос 2: есть ли гарантия того что линкуемое последним попадает в
 конец?
 то есть теоретически можно было бы определить один из модулей с
 псеводофункцией в сегменте .text (меткой) по которой и по адресу начала
 сегмента .text вычислили бы его размер.
 
 то есть если мы линкеру передадим файлы
 a.o b.o c.o
 именно в таком порядке, то насколько можно быть уверенным что c.o
 попадает точно в конец?
 
 вопрос 3: как слинковать так чтобы сегмент .data попадал сразу после
 сегмента .text? то есть если .text меняет свои размеры от компиляции к
 компиляции чтобы и .data менял свое положение?
 
 --- Mutt/1.5.11+cvs20060403
  * Origin: Гуманизм породил геноцид (2:5004/75.151)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 получить чистый бинарник   Dmitry E. Oboukhov   16 Aug 2006 17:12:03 
 Re: получить чистый бинарник   Grishka Chervonets   17 Aug 2006 13:08:49 
 получить чистый бинарник   Dmitry Ponyatov   17 Aug 2006 18:14:08 
 получить чистый бинарник   Dmitry E. Oboukhov   04 Sep 2006 14:17:55 
 получить чистый бинарник   Sergey Khvatov   04 Sep 2006 15:09:40 
 получить чистый бинарник   Boris Shklyaev   04 Sep 2006 23:43:11 
 Re: получить чистый бинарник   Dmitry Fedorov   05 Sep 2006 10:05:09 
 получить чистый бинарник   Dmitry E. Oboukhov   05 Sep 2006 13:24:06 
 Re: получить чистый бинарник   Dmitry Fedorov   05 Sep 2006 17:03:48 
Архивное /ru.linux/3926e4f2f590.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional