0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
1

Курить Makefile

31.01.2014, 18:10. Показов 4069. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Товарищи, в одном Makefile обнаружена следующая конструкция:
Код
$(obj)u-boot.ldr.hex:   $(obj)u-boot.ldr
$(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary
Вопрос:

Что значит
Код
$< $@
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2014, 18:10
Ответы с готовыми решениями:

Работа в Makefile
Здравствуйте! Кто сталкивался с такими вот строчками: ## Compyte options sommon for all C...

Makefile AVR
Доброго времени суток, уважаемые форумчане. В создании makefile-ов я не особо силен, поэтому прошу...

WinAVR как создать MakeFile
Подскажите, как правильно создавать MakeFile в WinAVR. Шаблон, который можно генирить с помощью...

stm32f4 makefile собирается но не работает
Решить собрать православный проект, да вот беда - не запускаеться! Делал по этой инструкции...

11
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
31.01.2014, 19:29 2
В info make же расписано все. "$<" - каждый файл из списка зависимостей, "$@" - каждый файл из списка целей. Например,
Код
$(OBJDIR)/%.o: %.c
$(CC) $(CFLAGS) $< -o $@
для каждого файла $(OBJDIR)/$(filename).o возьмет из текущей директории $(filename).c и откомпилирует в нужный объектный файл.
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);
}

и т.д.
Проблема в том, что zerosect у меня пуста... И линкёр ее невозбранно удаляет и секция boot торчит в начале файла.
Пытался писать
Код
  .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):
А так же, что значит KEEP?...
0
05.02.2014, 11:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2014, 11:03
Помогаю со студенческими работами здесь

Не могу осилить Makefile, подскжаите пожалуйста.
Здравствуйте господа AVRщики) Захотел прикрутить к меге16 загрузчик USB - BoottoodHID. ...

[РЕШЕНО]GCC+makefile=вставить в *.bin дату компиляции?
Собственно вопрос в сабже. Просто вставить - не проблема, но вставляется в произвольное место и...

V-USB winAVR AVR studio +makefile проект не собирается
Пробую собрать hid-mouse 1) make hex работает проект собирает мышка крутит курсор. 2) в AVR...

[РЕШЕНО]GCC+makefile=вставить в *.bin имя файла прошивки?
Отделил от времени и даты. По мейкфайлу происходит компиляция. Возможно ли? Если кто знает,...

Make, makefile, simple makefile, hello_world
Всем привет! Разбираюсь с мэйк-файлами. Проблема следующая: не понятен сам принцип обработки...

Через консоль makefile работает, а при запуске makefile-a через task.json VSCode выводит ошибку (e=2)?
Вот файл task.json: &quot;version&quot;: &quot;2.0.0&quot;, &quot;tasks&quot;: } Вот файл launch.json ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru