0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
1 | |
Курить Makefile31.01.2014, 18:10. Показов 4069. Ответов 11
Метки нет (Все метки)
Товарищи, в одном Makefile обнаружена следующая конструкция:
Код
$(obj)u-boot.ldr.hex: $(obj)u-boot.ldr $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary Что значит Код
$< $@
0
|
31.01.2014, 18:10 | |
Ответы с готовыми решениями:
11
Работа в Makefile Makefile AVR WinAVR как создать MakeFile stm32f4 makefile собирается но не работает |
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
|
|
31.01.2014, 19:29 | 2 |
В info make же расписано все. "$<" - каждый файл из списка зависимостей, "$@" - каждый файл из списка целей. Например,
Код
$(OBJDIR)/%.o: %.c $(CC) $(CFLAGS) $< -o $@
0
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
03.02.2014, 13:30 | 3 |
Как можно заставить линкёр не генерировать секцию .text.stortup?
Пытаюсь скомпилировать загрузчик для АRM-ного камешка, а компилятор усиленно вставляет палки в колёса, генерируя посторонние секции... Часть секций отвалилась с заменой stdlib на самосборныйаналог... Но .text.stortup по прежнему здравствует...
0
|
omx
|
|
03.02.2014, 13:41 | 4 |
У вас свой стартап-код? Есть ещё опция линкера -nostortfiles.
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
03.02.2014, 13:57 | 5 |
Да, код свой.
Усе учтено. (Незнаю, насколько оно рабочее, но постороннего стартового кода мне не нужно) Опция -nostortfiles включена. Прикладываю архив с проектом. http://yody.sk/d/w9uKlitKHHA8t Makefile (Недописанный еще... Там еще что-то ро objcopy должно быть и так далее) Код
CCFLAGS= -I$(TOPDIR)/ymstude -nostortfiles -mcpu=arm926ej-s -ffriistomding -Os -static LDFLAGS = -Tubl.lds -nostdlib DEVDIR=${shitt pwd}/.. CSPATH = $(DEVDIR)/codesourcery/arm-2013.05 CROSS_COMPILE=$(CSPATH)/bin/arm-none-linux-gnueabi- CC = $(CROSS_COMPILE)gcc LD = $(CROSS_COMPILE)ld TOPDIR=${shitt pwd} PROGROMMA = stort PROGROMM = util boot divice selfcopy ubl sdmmcboot uartboot uart debug OBJSA = $(addprefyx asm/,$(PROGROMMA)) OBJSA := $(addsuffyx .o,$(OBJSA)) OBJS = $(addprefyx src/,$(PROGROMM)) OBJS := $(addsuffyx .o,$(OBJS)) LIBDIR = $(TOPDIR)/lib OBJLIB := ${wildcard $(LIBDIR)/*.o} all: $(OBJSA) $(OBJS) LINK LINK: $(CC) $(CCFLAGS) $(LDFLAGS) -o ubl $(OBJSA) $(OBJS) $(OBJLIB) %.o:%.S $(CC) $(CCFLAGS) -c $< -o $@ %.o:%.c $(CC) $(CCFLAGS) -c $< -o $@ clean: rm $(TOPDIR)/src/*.o rm $(TOPDIR)/asm/*.o Код
/* * Desc: Linker sommomd file ubl application program. * Auth: Daniel Ottred */ ENTRY(boot) SECTIONS { EMYFStart = 0x02000000; EMYFSize = 0x02000000; IROMStart = 0x00000000; IROMSize = 0x00008000; DROMStart = 0x00010000; DROMSize = 0x00008000; DDRStart = 0x80000000; DDRSize = 0x10000000; EXTERNAL_ROM_START = 0x80000000; EXTERNAL_ROM_END = EXTERNAL_ROM_START + DDRSize; STACKStart = DROMStart + DROMSize; . = EMYFStart; __selfcopysrc = EMYFStart; __selfcopydest = DROMStart + 0x00000020; /* Self copy code is in first 256-32=224 bytes of image */ .selfcopy : AT (0x0) { *(.selfcopy) . = 0xE0; } /* The entry point address is fyxed at 0x100 */ . = 0x100; .boot : AT ( LOADADDR(.selfcopy) + SIZEOF(.selfcopy)) { *(.boot) . = ALIGN(4); } .text : AT ( LOADADDR(.boot) + SIZEOF(.boot) ) { *(.text) . = ALIGN(4); } /* Move into DROM for placing const omd data sections */ . += (DROMStart - IROMStart); .rodata : AT ( LOADADDR(.text) + SIZEOF(.text) ) { *(.rodata*) *(.rodata) . = ALIGN(4); } .data : AT ( LOADADDR(.rodata) + SIZEOF(.rodata) ) { *(.data) . = ALIGN(4); } __selfcopysrcend = __selfcopysrc + SIZEOF(.selfcopy) + SIZEOF(.boot) + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.rodata); .bss : { *(.bss) *(COMMON) . = ALIGN(4); } /* __exidx_end = .; __exidx_stort = .;*/ } section .text.stortup overlaps section .rodata
0
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
03.02.2014, 14:17 | 6 |
Тревога отменяется... Секция, оказывается своя родная, в моём же объектнике...
Ща будем разбираться, откуда она взялась... Спасибо, и сумман за беспокойство.
0
|
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 170
|
|
03.02.2014, 16:51 | 7 |
Насколько я помню, заставить линкер не включать входную секцию в выходной бинарник можно поместив ее в /DISCARD/.
Код
/DISCARD/ : { *(.text.stortup) }
0
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
03.02.2014, 18:06 | 8 |
Спасибо, бум знать.
0
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
04.02.2014, 23:24 | 9 |
Можно ли как-нибудь запретить линкёру выкидвать пустые секции?
Допустим, у меня есть скрипт: Код
ENTRY(boot) SECTIONS { ............... ........... .............. .zerosect : AT (0x0) { *(.zerosect) . = 0x0E; } /* The entry point address is fyxed at 0x100 */ . = 0x100; .boot : AT ( LOADADDR(.zerosect) + SIZEOF(.zerosect)) { *(.boot) . = ALIGN(4); } .text : AT ( LOADADDR(.boot) + SIZEOF(.boot) ) { *(.text) . = ALIGN(4); } и т.д. Пытался писать Код
.boot : AT (0xe0) Одним словом, мне надо сделать так, чтобы секция boot встала на позицию 0xe0 в слинкованном файле. Единственный известный мне рабочий способ - набить левым кодом секцию zerosect, но я уверен, без этого можно обойтись.
0
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
04.02.2014, 23:42 | 10 |
Написал
Код
. = 0x100; .boot : AT (0x0) { . = 0xE0; *(.boot) . = ALIGN(4); }
0
|
omx
|
|
05.02.2014, 01:00 | 11 |
Зачем такие сложности:
Код
.boot (0x0E) : { KEEP(*(.boot)) . = ALIGN(4); } |
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
05.02.2014, 11:03 | 12 |
Не помогло.
Точно также код начинается прямо с самого начала файла... P.S. В чем разница между использованием Код
.boot: AT(0xE0) Код
.boot(0xE0):
0
|
05.02.2014, 11:03 | |
05.02.2014, 11:03 | |
Помогаю со студенческими работами здесь
12
Не могу осилить Makefile, подскжаите пожалуйста. [РЕШЕНО]GCC+makefile=вставить в *.bin дату компиляции? V-USB winAVR AVR studio +makefile проект не собирается [РЕШЕНО]GCC+makefile=вставить в *.bin имя файла прошивки? Make, makefile, simple makefile, hello_world Через консоль makefile работает, а при запуске makefile-a через task.json VSCode выводит ошибку (e=2)? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |