Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Eclipse + GCC для ARM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Страницы: 1, 2, 3, 4, 5, 6
Puzan
Цитата(Paramedic @ Nov 16 2007, 13:59) *
Думаю может не хватать отладочной информации... Хотя опцию -g включил и оптимизация на нуле.
Скрипт линкера брал готовый, может в нём и косяк, но он вроде простой и адреса указаны правильные:
MEMORY {
ram : ORIGIN = 0x200000, LENGTH = 0x4000
}


Отладочная информация по-любому не причем. В мап-файл посмотри, правильно он память распределил, или нет.
Варианта остается два: конфиг openocd и хардварная проблема, типа JTAGSEL неправильно установил, или банально не контачит.



Цитата(axle @ Nov 16 2007, 14:09) *
У меня тоже! smile.gif
-nostdlib не значит, что надо путь к библиотекам указывать.
Просто стандартные библиотеки не будут подключаться по умочанию.
Что бы их использовать, нужно непосредственно указывать в опциях:
-lc -lm -lgcc и т.д.


Не работает laughing.gif
Paramedic
Цитата(Puzan @ Nov 16 2007, 14:30) *
или банально не контачит.

Это исключено - под виндой в ИАР всё работает...
Puzan
Цитата(Paramedic @ Nov 16 2007, 14:32) *
Это исключено - под виндой в ИАР всё работает...


Хм... А покажи конфиг для openocd. Где брал его?
Paramedic
Цитата(Puzan @ Nov 16 2007, 15:03) *
Хм... А покажи конфиг для openocd. Где брал его?


Вот:

-----------------------------------------------------------------------------------------
#daemon configuration
telnet_port 4444
gdb_port 3333

#interface
interface parport

parport_port 0
#parport_port 0x378

parport_cable wiggler
jtag_speed 0
jtag_nsrst_delay 200

jtag_ntrst_delay 200

#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst srst_pulls_trst
#reset_config trst_and_srst

#jtag scan chain
#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
jtag_device 4 0x1 0xf 0xe

#target configuration
daemon_startup reset
#target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
target arm920t little run_and_init 0 arm920t
#target_script 0 reset h2294_init.script
working_area 0 0x200000 0x4000 backup
run_and_halt_time 0 30
-----------------------------------------------------------------------------------------

Переделывал конфиг заточенный под SAM7...

Цитата(Puzan @ Nov 16 2007, 14:30) *
...JTAGSEL неправильно установил...

А это где устанавливать надо?
sleo2000
Цитата(axle @ Nov 16 2007, 14:09) *
У меня тоже! smile.gif
-nostdlib не значит, что надо путь к библиотекам указывать.
Просто стандартные библиотеки не будут подключаться по умочанию.
Что бы их использовать, нужно непосредственно указывать в опциях:
-lc -lm -lgcc и т.д.


1. ПО МОЕМУ ВОПРОСУ О ЛИНКОВКЕ БИБЛИОТЕК - всем, кто ответил что-то - спасибо, в поенедельник покопаемся. Хотя мутного много - слишком отвыкли от командной строки smile.gif

2. По поводу работающего мини-проекта с подробным описанием и копией проекта для прямого импорта в Eclipse (для LPC2138/214) - в понедельник все выложу вместе с описанием на русском и в теме выложу ссылку на архив.
KA_ru
Какой сборкой пользоваться.
всего нашёл три штуки.
http://www.macraigor.com
http://www.yagarto.de
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/

Есть родной Вигглер.
Или они все хороши?
sleo2000
ПРОБУЮ ВЫЛОЖИТЬ АРХИВ С РАБОТАЮЩИМ ПРИМЕРОМ ПОД ECLIPSE ДЛЯ LPC-2138/48

Нажмите для просмотра прикрепленного файла

Цитата(KA_ru @ Nov 16 2007, 19:20) *
Какой сборкой пользоваться.
всего нашёл три штуки.
http://www.macraigor.com
http://www.yagarto.de
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/

Есть родной Вигглер.
Или они все хороши?


Пользуюсь yagarto - были рекомендации от немцев. И обновляется чаще, чем остальные. На самом деле есть сборка от Olimex - старая, от Amontec - тоже более старая, чем Yagarto.
вася пупкин блин
Так, стыковать все это чудо с ходу не удалось sad.gif
Будем копать, надеюсь люди здесь добрые и отзывчивые smile.gif
1. Соответсвтенно поставил eclipse (куча разных вариаций)
2. Есть программатор JTAG от MT-Likn
3. Компилить все получается elf файл имею
Ну а теперь собственно вопросы:
openocd и JLinkGDBServer - это два аналога - использовать надо либо то либо другое? я правильно понимаю?
Через что лучше стыковать? (JLinkGDBServer крякнутый есть)
по-русски кто нить может написать как создать проект чтобы дебагер заработал? или надо выкладывать какие сообщения об ошибках выкидывает?
настраиваю как показано http://www.yagarto.de/howto/jlink/index.html
вася пупкин блин
Эй! ну что - все всё наладили и ушли с форума?? sad.gif а как же там все там обещали мануал по русски? все дела ... да ... че-то как-то глухо sad.gif
IgorKossak
Цитата(вася пупкин блин @ Dec 1 2007, 19:21) *
Эй! ну что - все всё наладили и ушли с форума?? sad.gif а как же там все там обещали мануал по русски? все дела ... да ... че-то как-то глухо sad.gif

Позволю себе заметить, что Вы не на базаре и не на телесистемах.
Не следует свою активность на форуме проявлять подобным образом.
123730
Здесь было рассмотрено уже это но у мя не получилось. Плиз выложите пример с минимумом "лишних" деталей:

Возник такой трабл. Програмлю под ARM контроллеры. Использую гнушный софт. Каким макаром подключать стандартные библиотеки к проге?
У меня получается компилить файл который содержит вызов функций стандартной библиотеки, но при линковке объектных файлов возникает ошибка: undefened reference на вызываемую стандартную функцию.


Желателен пример рабочей проги, которая инклудит, например, stdio.h, и вызывает в main функцию sprintf. Плюс еще какой-нить модуль .c с минимальным количеством кода. Плюс make файл который компилит и линкует эти два модуля:

main.c:

#include <stdio.h>

int main(void)
{
char *Line[5];
sprintf(Line,"%02d",50);//даст варнинг ну ниче

return Return_num();
}
=========================
notmain.c:

int Return_num(void)
{
return 5;
}

PS: Вот лог сборки моей рабочей программы со всеми ключами и версиями прог. В той проге смысл тот же примерно (вызов sprintf в main.c). Обратите внимание, что компиляция всех файлов проходит, трабл только в линковке. Что я не так делаю?

make -k -f makefile_rom all
rm -f out/*.d out/*.o out/*.lst out/*.map out/*.out out/*.bin
===================================================================
arm-elf-gcc (GCC) 4.1.1 (WinARM)
Copyright © 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

===================================================================
GNU assembler 060606 20060606
Copyright 2005 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License. This program has absolutely no warranty.
This assembler was configured for a target of `arm-elf'.
===================================================================
GNU ld version 060606 20060606
Copyright 2005 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License. This program has absolutely no warranty.
===================================================================

arm-elf-as -Wa -amhls=out/crt.lst -ahls -mapcs-32 source/crt.s -o out/crt.o
arm-elf-gcc -c -MD -O0 source/adc.c -o out/adc.o
arm-elf-gcc -c -MD -O0 source/int.c -o out/int.o
source/int.c: In function 'AIC_ConfInt':
source/int.c:14: warning: assignment makes integer from pointer without a cast
arm-elf-gcc -c -MD -O0 source/Keyboard.c -o out/Keyboard.o
arm-elf-gcc -c -MD -O0 source/lowlevelinit.c -o out/lowlevelinit.o
arm-elf-gcc -c -MD -O0 source/main.c -o out/main.o
arm-elf-ld -T./link/at91sam7s256_flash.ld -Map=out/mit.map out/crt.o out/adc.o out/int.o out/Keyboard.o out/lowlevelinit.o out/main.o -o out/mit.out
out/main.o: In function `main':
main.c:(.text+0x8b0): undefined reference to `sprintf'
make: *** [out/mit.out] Error 1
arm-elf-gcc out/crt.o out/adc.o out/int.o out/Keyboard.o out/lowlevelinit.o out/main.o -mcpu=arm7tdmi -nostartfiles -T./link/at91sam7s256_flash.ld -Wl,--no-warn-mismatch -o out/mit.elf
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(freer.o): In function `_malloc_trim_r':
mallocr.c:(.text+0x48): undefined reference to `_sbrk_r'
mallocr.c:(.text+0x64): undefined reference to `_sbrk_r'
mallocr.c:(.text+0x84): undefined reference to `_sbrk_r'
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(makebuf.o): In function `__smakebuf':
makebuf.c:(.text+0x3c): undefined reference to `_fstat_r'
makebuf.c:(.text+0x110): undefined reference to `isatty'
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(mallocr.o): In function `_malloc_r':
mallocr.c:(.text+0x424): undefined reference to `_sbrk_r'
mallocr.c:(.text+0x4cc): undefined reference to `_sbrk_r'
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(stdio.o): In function `__sclose':
stdio.c:(.text+0xc): undefined reference to `_close_r'
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(stdio.o): In function `__sseek':
stdio.c:(.text+0x30): undefined reference to `_lseek_r'
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(stdio.o): In function `__swrite':
stdio.c:(.text+0x84): undefined reference to `_lseek_r'
stdio.c:(.text+0xac): undefined reference to `_write_r'
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(stdio.o): In function `__sread':
stdio.c:(.text+0xd0): undefined reference to `_read_r'
collect2: ld returned 1 exit status
make: *** [out/mit.elf] Error 1
make: Target `all' not remade because of errors.
v_shamaev
Цитата(123730 @ Dec 20 2007, 21:48) *
.....


./link/at91sam7s256_flash.ld - на этот файл взглянуть можно?
123730
Да конешн), файлег был стырен с каково-то примера:


/* identify the Entry Point (_vec_reset is defined in file crt.s) */
ENTRY(_vec_reset)

/* specify the LPC2106 memory areas */
MEMORY
{
flash : ORIGIN = 0, LENGTH = 256K /* FLASH EPROM */
ram : ORIGIN = 0x00200000, LENGTH = 64K /* static RAM area */
}


/* define a global symbol _stack_end (see analysis in annotation above) */
_stack_end = 0x2FFFFC;

/* now define the output sections */
SECTIONS
{
. = 0; /* set location counter to address zero */

.text : /* collect all sections that should go into FLASH after startup */
{
*(.text) /* all .text sections (code) */
*(.rodata) /* all .rodata sections (constants, strings, etc.) */
*(.rodata*) /* all .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* all .glue_7 sections (no idea what these are) */
*(.glue_7t) /* all .glue_7t sections (no idea what these are) */
_etext = .; /* define a global symbol _etext just after the last code byte */
} >flash /* put all the above into FLASH */

.data : /* collect all initialized .data sections that go into RAM */
{
_data = .; /* create a global symbol marking the start of the .data section */
*(.data) /* all .data sections */
_edata = .; /* define a global symbol marking the end of the .data section */
} >ram AT >flash /* put all the above into RAM (but load the LMA copy into FLASH) */

.bss : /* collect all uninitialized .bss sections that go into RAM */
{
_bss_start = .; /* define a global symbol marking the start of the .bss section */
*(.bss) /* all .bss sections */
} >ram /* put all the above in RAM (it will be cleared in the startup code */

. = ALIGN(4); /* advance location counter to the next 32-bit boundary */
_bss_end = . ; /* define a global symbol marking the end of the .bss section */
}
_end = .; /* define a global symbol marking the end of application RAM */

Я пробовал флаги -lc lgcc и по типу этого. Вопщим я многа перепробывал. В какой то момент он просил размещать секции имена которых в моей проге нет. я так подумал они в библиотеке. размещал, но итог нулевой. Всеж прошу выложить пример мелкой проги, которую я привожу выше с минимальным количеством лишнего. Я б тогда наверн примонтировал в свою
axle
Цитата(123730 @ Dec 21 2007, 00:48) *
Здесь было рассмотрено уже это но у мя не получилось. Плиз выложите пример с минимумом "лишних" деталей:


Для того чтобы использовать функции типа printf, sprintf и т.д. необходимо написать функции "system calls" специфичные для твоей платформы. Именно на их отсутсвие компилятор и ругается (_sbrk_r, _write_r и т.д.).

Как это сделать а заодно и рабочий пример смотри сюда:
http://www.siwawi.arubi.uni-kl.de/avr_proj...ects/#gcc_stdio
123730
Стырил я syscalls.c, serials.h, serials.c с рабочего примера, который шел с WinARM. Пример называется at91sam7s64_Hello, сунул в свой проект:

arm-elf-as -Wa -amhls=out/Cstartup.lst -ahls -mapcs-32 source/Cstartup.s -o out/Cstartup.o
arm-elf-gcc -c -MD -O0 source/adc.c -o out/adc.o
arm-elf-gcc -c -MD -O0 source/Cstartup_SAM7.c -o out/Cstartup_SAM7.o
arm-elf-gcc -c -MD -O0 source/int.c -o out/int.o
arm-elf-gcc -c -MD -O0 source/Keyboard.c -o out/Keyboard.o
arm-elf-gcc -c -MD -O0 source/main.c -o out/main.o
arm-elf-gcc -c -MD -O0 source/serial.c -o out/serial.o
arm-elf-gcc -c -MD -O0 source/syscalls.c -o out/syscalls.o
arm-elf-gcc -c -MD -O0 source/timers.c -o out/timers.o
arm-elf-ld -TAT91SAM7S64-ROM.ld -Map=out/mit.map -lc out/Cstartup.o out/adc.o out/Cstartup_SAM7.o out/int.o out/Keyboard.o out/main.o out/serial.o out/syscalls.o out/timers.o -o out/mit.out
out/main.o: In function `main':
main.c:(.text+0x7c8): undefined reference to `iprintf'
make: *** [out/mit.out] Error 1

хобанца а вот так получилось)):

arm-elf-as -Wa -amhls=out/Cstartup.lst -ahls -mapcs-32 source/Cstartup.s -o out/Cstartup.o
arm-elf-gcc -c -MD -O0 source/adc.c -o out/adc.o
arm-elf-gcc -c -MD -O0 source/Cstartup_SAM7.c -o out/Cstartup_SAM7.o
arm-elf-gcc -c -MD -O0 source/int.c -o out/int.o
arm-elf-gcc -c -MD -O0 source/Keyboard.c -o out/Keyboard.o
arm-elf-gcc -c -MD -O0 source/main.c -o out/main.o
arm-elf-gcc -c -MD -O0 source/serial.c -o out/serial.o
arm-elf-gcc -c -MD -O0 source/syscalls.c -o out/syscalls.o
arm-elf-gcc -c -MD -O0 source/timers.c -o out/timers.o
arm-elf-gcc -Wl,-TAT91SAM7S64-ROM.ld,-Map=out/mit.map,--cref -lc -lm -lc -lgcc out/Cstartup.o out/adc.o out/Cstartup_SAM7.o out/int.o out/Keyboard.o out/main.o out/serial.o out/syscalls.o out/timers.o -o out/mit.out
arm-elf-objcopy --output-target=binary out/mit.out out/mit.bin
arm-elf-gcc out/Cstartup.o out/adc.o out/Cstartup_SAM7.o out/int.o out/Keyboard.o out/main.o out/serial.o out/syscalls.o out/timers.o -mcpu=arm7tdmi -nostartfiles -TAT91SAM7S64-ROM.ld -Wl,--no-warn-mismatch -o out/mit.elf
arm-elf-size out/mit.out
text data bss dec hex filename
20336 2176 100 22612 5854 out/mit.out


Только исходник вырос на 17 кБ crying.gif
gte
Может ли кто поделиться или подсказать где поискать пример проекта для LPC2368,
Среда Eclipce + GCC для ARM + OpenOCD (Amontec sdk4arm) + MT-LINK.
Среду вроде бы настроил, простой проект на 2294 компилируется. Теперь бы перейти на LPC2368 :-).
Поиск в интернете и по конференциям пока безуспешен.
Hz!
Цитата(gte @ Mar 17 2008, 19:27) *
Может ли кто поделиться или подсказать где поискать пример проекта для LPC2368,
Среда Eclipce + GCC для ARM + OpenOCD (Amontec sdk4arm) + MT-LINK.
Среду вроде бы настроил, простой проект на 2294 компилируется. Теперь бы перейти на LPC2368 :-).
Поиск в интернете и по конференциям пока безуспешен.

В демо на FreeRTOS есть то, что вам нужно.
Doka
Цитата(Puzan @ Oct 26 2007, 13:22) *
В принципе ничего сложного нет. Компилируем binutils, gcc (с опцией --without-headers, нужен для того, чтобы им скомпилить newlib), newlib и снова gcc (уже полностью, с поддержкой newlib). При этом ставим необходимые опции для целевой платформы (для ARM это --target=arm-elf --enable-interwork --enable-multilib).
Всё, можно компилировать программки.


ой, какая интересная информация...
пока что застрял на сборке второго прохода GCC.
следую согласно инструкции http://www.eluaproject.net/en/Building_GCC_for_ARM
первый проход перед сборкой newlib (шаг 2):
Код
./configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork --enable-multilib --enable-languages="c,c++" --with-newlib --without-headers --disable-shared--with-gnu-as --with-gnu-ld


второй проход - шаг 4: вот тут-то и неясно - почему они не переконфигурят make перед сборкой???
и какие опции нужно задавать для этого??
надо ли указывать дислокацию этой newlib или достаточно сделать ей "make install" ?!
alx2
Цитата(Doka @ Dec 31 2008, 12:36) *
следую согласно инструкции http://www.eluaproject.net/en/Building_GCC_for_ARM
первый проход перед сборкой newlib (шаг 2):
Код
./configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork --enable-multilib --enable-languages="c,c++" --with-newlib --without-headers --disable-shared--with-gnu-as --with-gnu-ld
Просмотрел эту инструкцию, и не понял, в чем глубинный смысл столь хитрых манипуляций (установки gcc в два приема). Какие это дает преимущества перед сборкой gcc вместе с newlib в один прием?
Doka
alx2

очевидно из требования сборки newlib target-версией компилятора

или вы про:
"Некоторые компиляторы (GCC) поддерживают внутренние версии множества функций Стандартной библиотеки языка Си; то есть, реализации функций записываются в компилируемый объектный модуль, а программа вызывает внутренние версии вместо функций общей библиотеки Си.Это уменьшает накладные расходы при вызове функции, особенно если вызов функции заменяется встроенными вариантами, и разрешается использование других форм оптимизации (если компилятор поддерживает управление характеристиками внутренних вариантов)"
?

http://ru.wikipedia.org/wiki/%D0%A1%D1%82%....BE.D1.80.D0.B0
alx2
Цитата(Doka @ Dec 31 2008, 19:06) *
очевидно из требования сборки newlib target-версией компилятора
Не понял. Можно подробнее? А чем же еще newlib может собираться? Не host-же версией!

Или спрошу по-другому. Я всегда просто помещал в исходники gcc симлинк на newlib и делал make && make install. Это неправильно?

Цитата(Doka @ Dec 31 2008, 19:06) *
или вы про:
"Некоторые компиляторы (GCC) поддерживают внутренние версии множества функций
Нет, об этом вообще по-моему речи не было...
dch
Цитата(DASM @ Oct 24 2007, 01:59) *

кстати у меня эта ссылка не работает - выдает страничку ошибки

Цитата(etoja @ Oct 26 2007, 07:45) *
поскольку за GNU проекты никто не отвечает.

они опубликованы, точно также за коммерческие продукты никто не несет ответсвенности, хоть один раз была какая либо компенсация за подвисание ос.
Doka
Цитата(alx2 @ Jan 1 2009, 20:24) *
Или спрошу по-другому. Я всегда просто помещал в исходники gcc симлинк на newlib и делал make && make install. Это неправильно?



1) судя по описанию http://www.eluaproject.net/en/Building_GCC_for_ARM , второй проход необходим для сборки библиотек (libgcc.a и прочих), которым для неё необходим newlib.

сейчас столкнулся с такой проблемой. делаю всё по вышеописанной ссылке, при втором проходе libgcc.a собираетсЯ, но не инсталлируется((
т.е. присутствует в директории из которой ведётся сборка (build-arm-elf/gcc/libgcc.a ), но при make install почему-то не копируется
в дистрибутиве нету тулчейна для ARM, но вот для AVR (для сравнения - с АRM картина идентична) картина такая:

дистрибутивный тулчейн AVR
Код
$ ll /usr/lib/gcc/avr/4.1.2/
drwxr-xr-x 2 root root    4096 2008-01-04 19:30 avr3
drwxr-xr-x 2 root root    4096 2008-01-04 19:30 avr4
drwxr-xr-x 2 root root    4096 2008-01-04 19:30 avr5
drwxr-xr-x 2 root root    4096 2008-01-04 19:30 include
-rw-r--r-- 1 root root 1512932 2007-05-23 13:05 libgcc.a
-rw-r--r-- 1 root root  199534 2007-05-23 13:05 libgcov.a

$ ll /usr/lib/gcc/avr/4.1.2/avr5
-rw-r--r-- 1 root root 1509392 2007-05-23 13:05 libgcc.a
-rw-r--r-- 1 root root  199534 2007-05-23 13:05 libgcov.a


тулчейн AVR ручной сборки:
Код
$ ll /usr/local/avr-4.3.3/avr/lib
drwxr-xr-x 2 root root   4096 2009-04-07 17:12 avr3
drwxr-xr-x 2 root root   4096 2009-04-07 17:12 avr4
drwxr-xr-x 2 root root   4096 2009-04-07 17:12 avr5
drwxr-xr-x 2 root root   4096 2009-04-07 17:04 ldscripts
-rw-r--r-- 2 root root 802476 2009-04-07 17:12 libc.a
-rw-r--r-- 2 root root 802476 2009-04-07 17:12 libg.a
-rw-r--r-- 1 root root 320392 2009-04-07 17:12 libm.a
-rwxr-xr-x 1 root root  25358 2009-04-07 17:12 libnosys.a

$ ll /usr/local/avr-4.3.3/avr/lib/avr5
-rw-r--r-- 2 root root 789240 2009-04-07 17:12 libc.a
-rw-r--r-- 2 root root 789240 2009-04-07 17:12 libg.a
-rw-r--r-- 1 root root 313024 2009-04-07 17:12 libm.a
-rwxr-xr-x 1 root root  25358 2009-04-07 17:12 libnosys.a


2) в опция makefile многих проектов для ARM вижу " -lgcc -lnewlib" - т.е. должна быть еще и бибилиотека с символьными именем newlib ??
alx2
Цитата(Doka @ Apr 8 2009, 14:45) *
1) судя по описанию http://www.eluaproject.net/en/Building_GCC_for_ARM , второй проход необходим для сборки библиотек (libgcc.a и прочих), которым для неё необходим newlib.
Видимо, описание неверное, ибо выше мной описанным способом однократный make без проблем собирает и libgcc, и прочие необходимые библиотеки.

Цитата(Doka @ Apr 8 2009, 14:45) *
2) в опция makefile многих проектов для ARM вижу " -lgcc -lnewlib" - т.е. должна быть еще и бибилиотека с символьными именем newlib ??
Если речь идет о редхатовском newlib, то newlib - это общее название проекта. А результатом его сборки являются стандартные библиотеки libc и libm. О библиотеке libnewlib я никогда не слышал.
Doka
Цитата(alx2 @ Jan 1 2009, 20:24) *
Или спрошу по-другому. Я всегда просто помещал в исходники gcc симлинк на newlib и делал make && make install. Это неправильно?

Цитата(alx2 @ Apr 9 2009, 14:52) *
Видимо, описание неверное, ибо выше мной описанным способом однократный make без проблем собирает и libgcc, и прочие необходимые библиотеки.


хорошо. хочу прояснить для себя 2 вопроса:
1) почему в использованном мною способе сборки libgcc.a собирается, но не инсталлируется в соответствующую директорию

2) не могу понять почему в большинстве источников, описывающих сборку тулчейна для ARM, используется двухпроходная сборка GCC. даже в том, который сходен с вашим. обратите внимание - первая итерация уже с хидерами:
Код
mkdir gcc-build
cd gcc-build
../gcc-3.4.3/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib --enable-languages=c,c++ --with-newlib --with-headers=../newlib-1.12.0/newlib/libc/include
# Note: this step requires root privileges under Linux to copy the newlib headers into a subdirectory under $PREFIX.
make all-gcc
make install-gcc

Нажмите для просмотра прикрепленного файла
klen
1. достаточно одного прохода
2. компиллеру для сборки libgcc не требуется newlib
3. newlib при сборке явлет библу libc.a libm.a .... (СТАНДАРТНЫЕ C - библиотеки) , libgcc - это нестандартная C-библиотека а библиотека компиллера с функциональностью поддержки целевой платформы,

пример ARM
реализация оперции ((float)int) или float * float - суть есть libgcc (зависит от набора инструкций)
реализация функций open(..) printf(...) exp() log() - суть libc - СТОАНДАРТ на runtime C, не зависит от целевой платформы, последние две отдеделы в libm - тоже часть стандарта.

есть один момент. для встраиваемых систем для оптимизации часто реализации libc (будьто newlib, glibc, или наверняка можно найти чтото типа ZOPAlibc.. ) имеют порты под конкретный процессор (набор инструкций) и написаны на асме ане на C.
alx2
Цитата(Doka @ Apr 10 2009, 14:52) *
хорошо. хочу прояснить для себя 2 вопроса:
1) почему в использованном мною способе сборки libgcc.a собирается, но не инсталлируется в соответствующую директорию
Рискну высказать предположение: потому что способ неправильный. Раз в документе, описывающем этот способ, уже нашли неверное утверждение, не удивлюсь, если там и инструкция по сборке окажется неверной.

Цитата(Doka @ Apr 10 2009, 14:52) *
2) не могу понять почему в большинстве источников, описывающих сборку тулчейна для ARM, используется двухпроходная сборка GCC.
Вот и я не могу...
Doka
всё.......я сдаюсь.............

где взять правильный скрипт для сборки ARM-тулчейна?!

libgcc.a собирается, но не инсталлируется. перекопировал "куда надо" вручную...
собираю пример от SAM7S64 под GCC, поставляемый со своими либами (в т.ч. libgcc.a) - пример собирается.
удаляю libgcc.a из примера - линковщик не находит перекопированной в "правильное место" либы..
хорошо.. явно задаю путь к каждой либе - либы находится, но сборка прерывается ошибкой.......
сил никаких уже нет..........................
alx2
Цитата(Doka @ Apr 14 2009, 01:05) *
где взять правильный скрипт для сборки ARM-тулчейна?!
Где взять, не знаю. Но могу описать, как сборка arm-elf-gcc с newlib-ом происходит у меня.
Код
tar -yxf gcc-core-x.x.x.tar.bz2
tar -yxf gcc-g++-x.x.x.tar.bz2
tar -zxf newlib-x.xx.x.tar.gz
ln -fs newlib-x.xx.x/newlib gcc-x.x.x/newlib
mkdir build
cd build
../gcc-x.x.x/configure --prefix=/usr/local --target=arm-elf --with-gcc --with-gnu-ld --with-gnu-as --enable-languages=c,c++ --disable-nls --with-newlib --enable-newlib-io-long-long
gmake all
gmake install
klen
у меня и того проще конфиг GCC

../../src/gcc/configure ../../src/gcc/configure --prefix=/kgp_arm --target=arm-elf --host=i686-pc-mingw32 --build=i686-pc-mingw32 --disable-nls --disable-shared --disable-threads --disable-libssp --disable-libmudflap --disable-libgomp --enable-interwork --enable-multilib --with-newlib --with-headers=../../src/newlib/newlib/libc/include --with-float=soft --enable-languages=c -v
011119xx
Пытаюсь запустить Эклипс. Пользуюсь документом Using Open Source Tools for AT91SAM7S Cross Development revision C. Дошел до запуска демо-проекта demo_at91sam7_blink_flash. Все проходит как описано за исключением того, что после импортирования проекта происходит его компиляция и во вкладке Problems выдается сообщение о наличии 2 ошибок и 1 предупреждения:
1 ошибка -> error: no memory region specified for loadable section `.eh_frame' line 0 C/C++ Problem
2 ошибка -> make: *** [main.out] Error 1 line 0 C/C++ Problem

предупреждение -> Error launching external scanner info generator (gcc -E -P -v -dD C:/workspace/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c)

Помогите разобраться! В чем проблема?
Genadi Zawidowski
Проект не плюсовый? Вываливай...
Код
/DISCARD/ :
    {
        *(.eh_frame_hdr)
        *(.eh_frame)
    }

(это в файле .cmd - скрипт линкера)

Когда дойдёте до запуска программатора, поделитесь исправленными файлами .cfg от opencd.
011119xx
Извините, но мне не понятно что делать. То что это надо добавить в файл .cmd понятно, а куда конкретно - нет.
AHTOXA
Цитата(011119xx @ Mar 1 2010, 22:41) *
Извините, но мне не понятно что делать. То что это надо добавить в файл .cmd понятно, а куда конкретно - нет.


Куда-нибудь в конец, перед последней скобкой:
Код
SECTIONS
{
    .text :
    {

......

/DISCARD/ :
    {
        *(.eh_frame_hdr)
        *(.eh_frame)
    }
}

Что касается warning-а, то это Project - Options - C/C++ Build - Discovery options, и там либо снять птичку "Automate discovery...", либо выбрать "GCC per project scanner info profile" и заменить в строке "compiler invocation command" "gcc" на "arm-gcc" или что там у вас.
011119xx
Спасибо. Это помогло.
USTAL
Всё.... Имел я ввиду этот Eclipse CDT для ARM вместе с YAGARTO, Cygwin и иже с ними. Столько времени потратил только для того чтобы убедиться что другие были правы в том что не нужно связываться. Из своих наблюдений смело могу заключить что вся эта конструкция нопоминает оную из кубиков разного размера и неправильной формы, благодаря чему получается что любая посторойка обречена на развал, а если и простоит какое-то время то развалиться при следующей попытке использования. Отсюда же следует маловероятность повторить то что уже сделано (и скорее всего развалилось).
Чем сложнее задумання конструкция, тем, в корне убическом, меньше шансов на успех. Потому на интернете и нет упоминаний о проектах отличных от Demo примеров.
Дальше примеров дела идут, видимо, только в исключительных случаях.
Имеете желание улететь с работы – Eclipse вам в руки.
Это же надо такое предложить:
Сначала поучите как составить makefile, потом linker script, потом попудрите мозги над опциями компилятора и вообще над тем как его прикрутить к Eclipse. Прикрутили ? Замечательно – теперь ещё библиотеки надо. А какие? А кто его знает – надо ещё несколько дней потрахтить чтобы выяснить.
Ещё каки-то файлы конфигураций по любому поводу, по разным правилам.
Для одного дебаггера один хаос, для другого другой.
И ещё интересно – инженер поддержки из NXP, котрый несколько часов ведёт занятия и лабораторную работу по NXP Expresso ( Eclipse с Code Red) , при вопросе - “ Ну, хорошо, с вашими Evaluation PCBs дебагить можно. А как симулировать? “ , бодро, со знанием дела отвечает –“ Хороший Вопрос! Не могу на него ответить, но узнаю обязательно!”
Так как тогда продвигаться дальше, если не-у-кого получить быстрый и вразумительный ответ?
И так неделями – и на работе и дома. Так и не вник.
Сергей Борщ
Цитата(USTAL @ May 14 2010, 05:50) *
Дальше примеров дела идут, видимо, только в исключительных случаях.
Имеете желание улететь с работы – Eclipse вам в руки.
Как говорится - плохому танцору... Делать что-то не читая документации - прямой путь к вашему результату.

P.S. Если вы начинаете общение на форуме с такого "вброса говна на вентилятор" - маловероятно, что вы что-то серьезное представляете из себя как специалист и ваш результат закономерен.
klen
Цитата(USTAL @ May 14 2010, 06:50) *
Имеете желание улететь с работы – Eclipse вам в руки.


мдя, однако мнение.
для тех кто еще сомневается - повторю слова из изветной рекламмы "- USTAL, ты так и не научился их готовить..."
IgorKossak
YAGARTO + Cygwin - это же надо было додуматься!
А вот мне Eclipse нравится всё больше. Уже много проектов в ней собрал и много народу на неё подсадил, все довольны. Наверное я мазохист wink.gif
AHTOXA
Цитата(IgorKossak @ May 14 2010, 12:51) *
А вот мне Eclipse нравится всё больше.


+1:)

ЗЫ. Сдаётся мне, что этот CodeRed только сбивает с толку людей. Потому что создаёт обманчивое впечатление, что есть готовое решение типа IAR, а на самом деле разбираться всё равно во всём приходится самому.
Честно говоря, не понимаю, кто покупает это.
ZiB
Всем, привет!
Подскажите пожалуйста по Eclipse.
Где в свойствах проекта можно задать определения (define)
что бы их можно было использовать в майкфайле?
Я пробовал задать в настройках проекта
С\C++ General -> Path and Symbols -> Symbols
в проекте их видно, но как их использовать в майкфайле я не понял.
klen
Цитата(ZiB @ May 16 2010, 10:45) *
Всем, привет!
Подскажите пожалуйста по Eclipse.
Где в свойствах проекта можно задать определения (define)
что бы их можно было использовать в майкфайле?
Я пробовал задать в настройках проекта
С\C++ General -> Path and Symbols -> Symbols
в проекте их видно, но как их использовать в майкфайле я не понял.


а сразу без костылей в макефайле прописать не канает?
по простому не интересно, нада как можно сдожне...
AHTOXA
Цитата(klen @ May 16 2010, 14:20) *
а сразу без костылей в макефайле прописать не канает?


Эт вы зря, вопрос правильный. Сейчас приходится прописывать дефайны в двух местах - в мейкфайле (для компилятора), и в настройках проекта (для эклипса). Если бы можно было как-то заставить эклипсу передавать дефайны мейку, или лучше наоборот, импортировать дефайны из мейкфайла, - было бы здорово. Потому я присоединяюсь к вопросу.

Цитата(ZiB @ May 16 2010, 12:45) *
С\C++ General -> Path and Symbols -> Symbols
в проекте их видно, но как их использовать в майкфайле я не понял.


Как я уже написал, я не знаю способа сделать это. Но знаю пути обхода smile.gif :
  1. Прописать дефайн и там и там (неудобно);
  2. Прописать дефайн в каком-нибудь *.h-файле, который включается повсеместно.
ZiB
Конечно это не сильная проблема, на данный момент один заголовочник для конфига.
Просто попробовал CodeRed, и заметил в нем этот момент. Т.е. при создании записи в
С\C++ General -> Path and Symbols -> Symbols
она автоматом появляется в опциях компиляции c ключем -D
возможно там сам тулчейн рулит...
klen
а зачем эклипсу вообще знать чтото - мой личный подход таков что эклипс не должен знать ничего, будь то компиляция или испечение пирогов - маке включит печку с тестом. я воспринимаю как своеобразный редактор который редактирует ЧТОТО - тоесть все и всегда.
AHTOXA
Ну банальный пример:
Код
#ifndef STM32F10X_CL
    RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
    RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif

если эклипса знает, определён ли STM32F10X_CL, то он неактивный код подкрасит сереньким. И навигация по коду (функциям/дефайнам), та что по Ctrl+Click работает правильно, выбирая нужный вариант.
Сергей Борщ
Цитата(klen @ May 17 2010, 11:03) *
а зачем эклипсу вообще знать чтото
Он умеет подсвечивать активные ветки #ifdef #endif. Внутри таких условий могут быть подключены какие-то дополнительные заголовочные файлы, в которых он может искать объявления - так что штука полезная. Надо подумать - не может ли здесь помочь Project->C/C++ Build->Discovery options вот там если в Compiler invocation command указать make а в Compiler invocation arguments - info. А в makefile прописать цель info - вызов компилятора с ключами $(CFLAGS) -E -P -v -dD ${plugin_state_location}/${specs_file}
ZiB
Попробовал указать в
Compiler invocation command
имя компилятора arm-gcc
дефайны из вывода компиляции прописались, но вот беда если убрать их, то они не исчезают sad.gif как бы сделать что бы при каждой компиляции обновлялись...
011119xx
При компиляции проекта получаю следующее:

**** Build of configuration Default for project yamppod ****

make all

-------- begin (mode: ROM_RUN) --------
arm-elf-gcc (GCC) 4.4.2
Copyright © 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Linking: main.elf
arm-elf-gcc -mthumb -mcpu=arm7tdmi -mthumb-interwork -I. -gdwarf-2 -DROM_RUN -DVECTORS_IN_RAM -Os -Wall -Wcast-align -Wimplicit -Wparentheses -Wpointer-arith -Wswitch -Wredundant-decls -Wreturn-type -Wshadow -Wunused -Wa,-adhlns=startup_SAM7S.lst -funsigned-char -funsigned-bitfields -fshort-enums -fgnu89-inline -MD -MP -MF .dep/main.elf.d startup_SAM7S.o interrupt_routines.o abort.o interrupt_utils.o time.o usb_irq.o usb_drv.o usb_std.o usb_dsc.o usb_bot.o usb_lun.o usb_sbc_func.o serial.o rprintf.o delay.o spi.o glcd.o vs1033.o sdcard.o fat.o twi.o eeprom.o event.o power.o menu.o graphics.o player.o id3.o browser.o adjust.o playlist.o ds1337.o main.o --output main.elf -nostartfiles -Wl,-Map=main.map,--cref -lc -lm -lc -lgcc -TAT91SAM7S256-ROM.ld
c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.4.2/../../../../arm-elf/lib/thumb/interwork\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
C:\msys\1.0\home\yagarto\newlib-build\arm-elf\thumb\interwork\newlib\libc\reent/../../../../../../../newlib-1.18.0/newlib/libc/reent/sbrkr.c:60: undefined reference to `_sbrk'
collect2: ld returned 1 exit status
make: *** [main.elf] Error 1

Что это может означать?
AHTOXA
Цитата(011119xx @ Jun 11 2010, 22:04) *
undefined reference to `_sbrk'
Что это может означать?

Это означает, что какая-то из ваших функций использует динамическое распределение памяти. Обычно этим занимается (s)printf smile.gif
Соответственно, чтобы это исправить, надо либо найти виновную функцию и убрать, либо написать минимальный набор системных вызовов для newlib, например, как описано в этом сообщении.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.