Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: библиотеки для cortex-m
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Doka
собрал newlib для arm-none-eabi с опциями:
Код
../configure --target=arm-none-eabi --enable-interwork --disable-newlib-supplied-syscalls --with-gnu-ld --with-gnu-as --disable-shared


при сборке простейшего приложения выдаётся:
Код
$ cat math.c
#include <math.h>
int main(int argc,char** argv)
{
    double a=1.33,b=2.44;
    double c;
    c=sin(a)+cos(b);
    return 0;
}


Код
$ arm-none-eabi-gcc math.c -o math.o -lm    


arm-none-eabi-gcc math.c -o math.o -lm
/home/doka/cortex-4.4.2/lib/gcc/arm-none-eabi/4.4.2/../../../../arm-none-eabi/lib/libc.a(lib_a-exit.o): In function `exit':
exit.c:(.text.exit+0x14): undefined reference to `_exit'
/home/doka/cortex-4.4.2/lib/gcc/arm-none-eabi/4.4.2/../../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text._sbrk_r+0xe): undefined reference to `_sbrk'
/home/doka/cortex-4.4.2/lib/gcc/arm-none-eabi/4.4.2/../../../../arm-none-eabi/lib/libc.a(lib_a-writer.o): In function `_write_r':
writer.c:(.text._write_r+0x12): undefined reference to `_write'
/home/doka/cortex-4.4.2/lib/gcc/arm-none-eabi/4.4.2/../../../../arm-none-eabi/lib/libc.a(lib_a-closer.o): In function `_close_r':
closer.c:(.text._close_r+0xe): undefined reference to `_close'
/home/doka/cortex-4.4.2/lib/gcc/arm-none-eabi/4.4.2/../../../../arm-none-eabi/lib/libc.a(lib_a-lseekr.o): In function `_lseek_r':
lseekr.c:(.text._lseek_r+0x12): undefined reference to `_lseek'
/home/doka/cortex-4.4.2/lib/gcc/arm-none-eabi/4.4.2/../../../../arm-none-eabi/lib/libc.a(lib_a-readr.o): In function `_read_r':
readr.c:(.text._read_r+0x12): undefined reference to `_read'
collect2: ld returned 1 exit status
make: *** [math] Error 1



еще насторожилом отсутствие lib/thumb2 в директории установки.. присутствует только lib/thumb

а если смотреть примеры поставляемых с LPC17xx make-файлов там наличествует lib/thumb2:
Код
THUMB2GNULIB     ='$(GNU_INSTALL_ROOT)/lib/gcc/arm-none-eabi/$(GNU_VERSION)/thumb2'
THUMB2GNULIB2    ='$(GNU_INSTALL_ROOT)/arm-none-eabi/lib/thumb2'
klen
такой вопрос уже был

a.
1. если Вы сказали --disable-newlib-supplied-syscalls то не генерятся системные вызовы, реализация которых зависит от OС или чегото подобного если это не ОС.
в этом случае Вы сами должны подсунуть их реализацию в рабочем проекте.

2. если этого не говорить то генерятся реализации этих функций - обычно это враперы програмных прерываний для заданной ОC.
если собирается библа для arm-none-* то это значит newlib будет использоватся на сыром девайсе без ОС, это типа микроконтроллер с просто тупо кодом который выполняется CPU, никаких ос и тд (FreeRTOS сдесь нада понимать как не ОС, потому что она никаких системных вызовов не реализует). в этом случае все системные вызовы генерятся как заглушки. не гениерить их нельзя потому что их используют libc функции.


б.
если при сборке GCC не ковырять руками src/gcc/config/arm/t-arm-elf, то tumb2 будет лежать в lib/thumb/thumb2
если multilib компиллерf собран без подержки thumb2, то и при сборке newlib thumb2 тоже не соберется
Doka
>>если при сборке GCC не ковырять руками src/gcc/config/arm/t-arm-elf, то tumb2 будет лежать в lib/thumb/thumb2

нет.. lib/thumb/thumb2 у меня нету..


>>если multilib компиллерf собран без поддержки thumb2, то и при сборке newlib thumb2 тоже не соберется

newlib собирал так (согласно http://eluaproject.dreamhosters.com/en/Bui..._GCC_for_Cortex ):
Код
../configure --target=arm-none-eabi --prefix=$PREFIX --enable-interwork --disable-newlib-supplied-syscalls --with-gnu-ld --with-gnu-as --disable-shared || exit
make CFLAGS_FOR_TARGET="-ffunction-sections -fdata-sections -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -Os -fomit-frame-pointer -mcpu=cortex-m3 -mthumb -D__thumb2__ -D__BUFSIZ__=256" CCASFLAGS="-mcpu=cortex-m3 -mthumb -D__thumb2__" || exit
make install || exit


под поддержкой thumb2 со стороны gcc понимается сборка с параметрами:

Код
make CFLAGS="-mcpu=cortex-m3 -mthumb" CXXFLAGS="-mcpu=cortex-m3 -mthumb" LIBCXXFLAGS="-mcpu=cortex-m3 -mthumb" all || exit

?
klen
Цитата(Doka @ Nov 16 2009, 11:03) *
под поддержкой thumb2 со стороны gcc понимается сборка с параметрами:

Код
make CFLAGS="-mcpu=cortex-m3 -mthumb" CXXFLAGS="-mcpu=cortex-m3 -mthumb" LIBCXXFLAGS="-mcpu=cortex-m3 -mthumb" all || exit

?


неа smile.gif
есть понятие multilib - подержка библиотек для разных случаев (в данном случае для CPU c разными наборами инструкций), фактически это сборка библов с разными ключами.
а Вы запихнул для всего одинаковые.

то очем я говорю отражается в t-arm-elf

там видны группы строк для - это настройка одной из версии библиотек GCC, что добавить нада раскоментировать группу, там все просто и очевидно.
по сути это скрипт который при сборке говорит что типа нужна отдельная версия библиотек , положить ее отдедельно в такуюто директорию, собрать с такимито определенными ключами, и!! автоматически линковать если проект линкуется с такимире ключами. на этом основан выбор GCC подходящих версий библиотек из из множества.

при сборке newlib, gcc смотрит в своих внутренних спецификациях сколько и какие версии мультилиба и зеркально в также строить newlib

тоесть если GCC собран только с arm,tumb,float,soft то и newlib он тоже в этих версях соберет и разложит при инсталяции.

сам компилер cc1 - подерживает комиляцию любого типа - только сунь правильные ключи.
Doka
Цитата(klen @ Nov 16 2009, 11:28) *
то очем я говорю отражается в t-arm-elf

там видны группы строк для - это настройка одной из версии библиотек GCC, что добавить нада раскоментировать группу, там все просто и очевидно.
по сути это скрипт который при сборке говорит что типа нужна отдельная версия библиотек , положить ее отдедельно в такуюто директорию, собрать с такимито определенными ключами, и!! автоматически линковать если проект линкуется с такимире ключами. на этом основан выбор GCC подходящих версий библиотек из из множества.


раскомментировал в t-arm-elf всю секцию относящуюся к armv7 & thumb2 -
всё равно упорно не хотят собираться библиотеки thumb2..
klen
Цитата(Doka @ Nov 17 2009, 19:27) *
раскомментировал в t-arm-elf всю секцию относящуюся к armv7 & thumb2 -
всё равно упорно не хотят собираться библиотеки thumb2..


Вы хотите сказать что раскоментировали, собрали GCC и в рабочей папке где вы его собираете отсутствуют ./arm-none-eabi/thumb/thumb2 ?
если так то у Вас чтото сильно глюкавит. тогда непонятно в чем косяг.
Doka
в t-arm-elf в дополнении к
Код
MULTILIB_OPTIONS     = marm/mthumb
MULTILIB_DIRNAMES    = arm thumb
MULTILIB_EXCEPTIONS  =
MULTILIB_MATCHES     =

было раскоментировано:
Код
MULTILIB_OPTIONS      += march=armv7
MULTILIB_DIRNAMES     += thumb2
MULTILIB_EXCEPTIONS   += march=armv7* marm/*march=armv7*
MULTILIB_MATCHES      += march?armv7=march?armv7-a
MULTILIB_MATCHES      += march?armv7=march?armv7-r
MULTILIB_MATCHES      += march?armv7=march?armv7-m
MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3


при сборке newlib & gcc указано ----enable-multilib

что в итоге:
нигде в директории установки (--prefix) нету даже пустой папки с названием thumb2

в директории, из которой производилась сборка gcc имеется:
Код
$ ll arm-none-eabi/thumb2
drwxrwxr-x 2 doka doka 4096 Nov 17 16:01 libgcc

$ ll arm-none-eabi/thumb2/libgcc/
-rw-rw-r-- 1 doka doka     0 Nov 17 16:01 config.cache
-rw-rw-r-- 1 doka doka 15584 Nov 17 16:01 config.log


однако это "слёзы" по сравнению с содержимым arm-none-eabi/thumb:

CODE
$ ll arm-none-eabi/thumb
drwxrwxr-x 2 doka doka 12288 Nov 17 16:08 libgcc
drwxrwxr-x 3 doka doka 4096 Nov 17 16:09 libiberty
drwxrwxr-x 5 doka doka 4096 Nov 17 16:10 libssp
drwxrwxr-x 9 doka doka 4096 Nov 17 16:09 libstdc++-v3

$ ls arm-none-eabi/thumb/libgcc/
_absvdi2.dep _arm_fixunsdfsi.o _bswapdi2.dep _divdi3.dep fixdfsi.o floatsisf.dep _gcov_indirect_call_profiler.dep _lshrdi3.dep _negvdi2.dep _trampoline.o
_absvdi2.o _arm_fixunssfsi.dep _bswapdi2.o _divdi3.o _fixsfdi.dep floatsisf.o _gcov_indirect_call_profiler.o _lshrdi3.o _negvdi2.o truncdfsf2.dep
_absvsi2.dep _arm_fixunssfsi.o _bswapsi2.dep _divsc3.dep _fixsfdi.o _floatundidf.dep _gcov_interval_profiler.dep __main.dep _negvsi2.dep truncdfsf2.o
_absvsi2.o _arm_floatdidf.dep _bswapsi2.o _divsc3.o fixsfsi.dep _floatundidf.o _gcov_interval_profiler.o __main.o _negvsi2.o _ucmpdi2.dep
adddf3.dep _arm_floatdidf.o _call_via_rX.dep divsf3.dep fixsfsi.o _floatundisf.dep _gcov_ior_profiler.dep Makefile _paritydi2.dep _ucmpdi2.o
adddf3.o _arm_floatdisf.dep _call_via_rX.o divsf3.o _fixtfdi.dep _floatundisf.o _gcov_ior_profiler.o _moddi3.dep _paritydi2.o _udivdi3.dep
addsf3.dep _arm_floatdisf.o _clear_cache.dep _divsi3.dep _fixtfdi.o _floatunditf.dep _gcov_merge_add.dep _moddi3.o _paritysi2.dep _udivdi3.o
addsf3.o _arm_floatundidf.dep _clear_cache.o _divsi3.o _fixunsdfdi.dep _floatunditf.o _gcov_merge_add.o _modsi3.dep _paritysi2.o _udivmoddi4.dep
_addvdi3.dep _arm_floatundidf.o _clz.dep _divtc3.dep _fixunsdfdi.o _floatundixf.dep _gcov_merge_delta.dep _modsi3.o _popcountdi2.dep _udivmoddi4.o
_addvdi3.o _arm_floatundisf.dep _clzdi2.dep _divtc3.o _fixunsdfsi.dep _floatundixf.o _gcov_merge_delta.o _muldc3.dep _popcountdi2.o _udivsi3.dep
_addvsi3.dep _arm_floatundisf.o _clzdi2.o _divxc3.dep _fixunsdfsi.o floatunsidf.dep _gcov_merge_ior.dep _muldc3.o _popcountsi2.dep _udivsi3.o
_addvsi3.o _arm_muldivdf3.dep _clz.o _divxc3.o _fixunssfdi.dep floatunsidf.o _gcov_merge_ior.o muldf3.dep _popcountsi2.o _udiv_w_sdiv.dep
_aeabi_lcmp.dep _arm_muldivdf3.o _clzsi2.dep _dvmd_tls.dep _fixunssfdi.o floatunsisf.dep _gcov_merge_single.dep muldf3.o _popcount_tab.dep _udiv_w_sdiv.o
_aeabi_lcmp.o _arm_muldivsf3.dep _clzsi2.o _dvmd_tls.o _fixunssfsi.dep floatunsisf.o _gcov_merge_single.o _muldi3.dep _popcount_tab.o _umoddi3.dep
_aeabi_ldivmod.dep _arm_muldivsf3.o _cmpdi2.dep emutls.dep _fixunssfsi.o __gcc_bcmp.dep _gcov.o _muldi3.o _powidf2.dep _umoddi3.o
_aeabi_ldivmod.o _arm_negdf2.dep _cmpdi2.o emutls.o _fixunstfdi.dep __gcc_bcmp.o _gcov_one_value_profiler.dep _mulsc3.dep _powidf2.o _umodsi3.dep
_aeabi_ulcmp.dep _arm_negdf2.o config.cache _enable_execute_stack.dep _fixunstfdi.o _gcov_average_profiler.dep _gcov_one_value_profiler.o _mulsc3.o _powisf2.dep _umodsi3.o
_aeabi_ulcmp.o _arm_negsf2.dep config.log _enable_execute_stack.o _fixunsxfdi.dep _gcov_average_profiler.o _gcov_pow2_profiler.dep mulsf3.dep _powisf2.o unaligned-funcs.dep
_aeabi_uldivmod.dep _arm_negsf2.o config.status _eprintf.dep _fixunsxfdi.o _gcov.dep _gcov_pow2_profiler.o mulsf3.o _powitf2.dep unaligned-funcs.o
_aeabi_uldivmod.o _arm_truncdfsf2.dep crtbegin.o _eprintf.o _fixunsxfsi.dep _gcov_execl.dep gedf2.dep _multc3.dep _powitf2.o unorddf2.dep
_arm_addsubdf3.dep _arm_truncdfsf2.o crtend.o eqdf2.dep _fixunsxfsi.o _gcov_execle.dep gedf2.o _multc3.o _powixf2.dep unorddf2.o
_arm_addsubdf3.o _arm_unorddf2.dep crti.o eqdf2.o _fixxfdi.dep _gcov_execle.o gesf2.dep _mulvdi3.dep _powixf2.o unordsf2.dep
_arm_addsubsf3.dep _arm_unorddf2.o crtn.o eqsf2.dep _fixxfdi.o _gcov_execl.o gesf2.o _mulvdi3.o pr-support.dep unordsf2.o
_arm_addsubsf3.o _arm_unordsf2.dep _ctors.dep eqsf2.o _floatdidf.dep _gcov_execlp.dep _interwork_call_via_rX.dep _mulvsi3.dep pr-support.o unwind-arm.dep
_arm_cmpdf2.dep _arm_unordsf2.o _ctors.o extendsfdf2.dep _floatdidf.o _gcov_execlp.o _interwork_call_via_rX.o _mulvsi3.o subdf3.dep unwind-arm.o
_arm_cmpdf2.o _ashldi3.dep _ctzdi2.dep extendsfdf2.o _floatdisf.dep _gcov_execv.dep ledf2.dep _mulxc3.dep subdf3.o unwind-c.dep
_arm_cmpsf2.dep _ashldi3.o _ctzdi2.o _ffsdi2.dep _floatdisf.o _gcov_execve.dep ledf2.o _mulxc3.o subsf3.dep unwind-c.o
_arm_cmpsf2.o _ashrdi3.dep _ctzsi2.dep _ffsdi2.o _floatditf.dep _gcov_execve.o lesf2.dep negdf2.dep subsf3.o
_arm_fixdfsi.dep _ashrdi3.o _ctzsi2.o _ffssi2.dep _floatditf.o _gcov_execv.o lesf2.o negdf2.o _subvdi3.dep
_arm_fixdfsi.o _bb_init_func.dep _divdc3.dep _ffssi2.o _floatdixf.dep _gcov_execvp.dep libgcc.a _negdi2.dep _subvdi3.o
_arm_fixsfsi.dep _bb_init_func.o _divdc3.o _fixdfdi.dep _floatdixf.o _gcov_execvp.o libgcov.a _negdi2.o _subvsi3.dep
_arm_fixsfsi.o bpabi.dep divdf3.dep _fixdfdi.o floatsidf.dep _gcov_fork.dep libunwind.dep negsf2.dep _subvsi3.o
_arm_fixunsdfsi.dep bpabi.o divdf3.o fixdfsi.dep floatsidf.o _gcov_fork.o libunwind.o negsf2.o _trampoline.dep
klen
ваще както странно, thumb2 должен лежать в thumb
какая версия ветки и какая ревизия?
Doka
только релизные версии:

Код
GCC=gcc-4.4.2
NEWLIB=newlib-1.17.0
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.