|
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)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/3926e4f2f590.html, оценка из 5, голосов 10
|