|
Не могу собрать проект 'Hello Wirld !', под gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) для lpc2478 |
|
|
|
Sep 16 2009, 17:56
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Итак: работаю под linux (до недавнего времени имел дело с Keil и iAR (юзал uCOSII собранную под ними)). Перехожу под linux. Использую кросскомпилятор Цитата [yra@localhost HelloWorld]$ arm-none-linux-gnueabi-gcc -v Using built-in specs. Target: arm-none-linux-gnueabi Configured with: /scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp--disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}' --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2009q1-203' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin Thread model: posix gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) Скачал freeRTOS. Конкретно заинтересовал порт под lpc2368 GCC. Бинарник с помощью прилагаемого Make- файла так и не собрался: Цитата error: no memory region specified for loadable section `.rel.dyn' Нигде не нашел что это за секция `.rel.dyn' фокус с подсовывынием в ld - файл строчки Цитата . = ALIGN(32 / 8); .rel.dyn : { *(.rel.dyn) } > sdram не прокатил. Полный текст ld - файла: Цитата MEMORY { flash : ORIGIN = 0x00000000, LENGTH = 512K ram : ORIGIN = 0x40000000, LENGTH = 64K usbram : ORIGIN = 0x7FD00000, LENGTH = 16K ethram : ORIGIN = 0x7FE00000, LENGTH = 16K sdram : ORIGIN = 0xA0000000, LENGTH = 32M }
__stack_end__ = 0x40000000 + 64K - 4;
SECTIONS { . = 0; startup : { *(.startup)} >flash
prog : { *(.text) *(.rodata) /* (. rodata) => сегмент для постоянных данных */ *(.rodata*) /* *(.glue_7) эти участки предоставляются для хранения ARM / Thumb межсетевого код. */ /* *(.glue_7t) эти участки предоставляются для хранения ARM / Thumb межсетевого код. */ } >flash
__end_of_text__ = .;
.data : { __data_beg__ = .; __data_beg_src__ = __end_of_text__; *(.data) *(.interp) /* ХЗ что это за секция. ПОка не нашел на неё описания... */ *(.plt) /* ХЗ что это за секция. ПОка не нашел на неё описания... */ __data_end__ = .; } >ram AT>flash
.bss : { __bss_beg__ = .; *(.bss) } >ram
/* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. */ . = ALIGN(32 / 8); _bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
.usbram (NOLOAD): { __usbram_beg__ = .; *(.dmaram) __usbram_end__ = .; } >usbram
.ethram (NOLOAD): { __ethram_beg__ = .; *(.ethram) __ethram_end__ = .; } >ethram
. = ALIGN(4); .dynsym : { *(.dynsym) } > sdram
. = ALIGN(32 / 8); .dynamic : { *(.dynamic) } > sdram
. = ALIGN(32 / 8); .got.plt : { *(.got.plt) } > sdram
. = ALIGN(4); .dynstr : { *(.dynstr) } > sdram
. = ALIGN(32 / 8); .hash : { *(.hash) } > sdram
. = ALIGN(32 / 8); .gnu.version : { *(.gnu.version) } > sdram /* эти секции нужны для stdlib */
. = ALIGN(32 / 8); .gnu.version_r : { *(.gnu.version_r) } > sdram /* эти секции нужны для stdlib */
. = ALIGN(32 / 8); .rel.dyn : { *(.rel.dyn) } > sdram
. = ALIGN(4); .ARM.exidx : { *(.ARM.exidx) } > sdram
} . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); секция sdram в данном случае непринципиальна.(всё равно предполагаю через u-boot грузиться.) Помогите пожалуйста разобраться что не так (Точн знаю, что эта секция нужна для stdlib. Подозреваю, что эта секция для определения диапазона динамически выделяемой памяти.) Самое интересное, что u-boot у меня собирается и работает (но там make - файл слишком наворочен, а ld - файл упрощён).
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
 |
Ответов
|
Sep 18 2009, 20:17
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Хрен редьки не слаще: Цитата [yra@localhost RTOSDemo]$ arm-none-eabi-gcc -v Using built-in specs. Target: arm-none-eabi Configured with: /scratch/maxim/arm-lite/src-4.3-arm-none-eabi-lite/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-eabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --disable-shared --with-newlib --with-pkgversion='Sourcery G++ Lite 2009q1-161' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-headers=yes --with-sysroot=/opt/codesourcery/arm-none-eabi --with-build-sysroot=/scratch/maxim/arm-lite/install-4.3-arm-none-eabi-lite/arm-none-eabi --with-gmp=/scratch/maxim/arm-lite/obj-4.3-arm-none-eabi-lite/host-libs-2009q1-161-arm-none-eabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/maxim/arm-lite/obj-4.3-arm-none-eabi-lite/host-libs-2009q1-161-arm-none-eabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/maxim/arm-lite/install-4.3-arm-none-eabi-lite/arm-none-eabi/bin --with-build-time-tools=/scratch/maxim/arm-lite/install-4.3-arm-none-eabi-lite/arm-none-eabi/bin Thread model: single gcc version 4.3.3 (Sourcery G++ Lite 2009q1-161) другая проблемма: Цитата ortable/MemMang/heap_2.o boot.s -nostartfiles -Xlinker -oRTOSDemo.elf -Xlinker -M -Xlinker -Map=rtosdemo.map /home/yra/x-tools/arm-2009q1/bin/../lib/gcc/arm-none-eabi/4.3.3/../../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r': sbrkr.c:(.text+0x18): undefined reference to `_sbrk' /home/yra/x-tools/arm-2009q1/bin/../lib/gcc/arm-none-eabi/4.3.3/../../../../arm-none-eabi/lib/libc.a(lib_a-writer.o): In function `_write_r': writer.c:(.text+0x20): undefined reference to `_write' /home/yra/x-tools/arm-2009q1/bin/../lib/gcc/arm-none-eabi/4.3.3/../../../../arm-none-eabi/lib/libc.a(lib_a-closer.o): In function `_close_r': closer.c:(.text+0x18): undefined reference to `_close' /home/yra/x-tools/arm-2009q1/bin/../lib/gcc/arm-none-eabi/4.3.3/../../../../arm-none-eabi/lib/libc.a(lib_a-fstatr.o): In function `_fstat_r': fstatr.c:(.text+0x1c): undefined reference to `_fstat' /home/yra/x-tools/arm-2009q1/bin/../lib/gcc/arm-none-eabi/4.3.3/../../../../arm-none-eabi/lib/libc.a(lib_a-isattyr.o): In function `_isatty_r': isattyr.c:(.text+0x18): undefined reference to `_isatty' /home/yra/x-tools/arm-2009q1/bin/../lib/gcc/arm-none-eabi/4.3.3/../../../../arm-none-eabi/lib/libc.a(lib_a-lseekr.o): In function `_lseek_r': lseekr.c:(.text+0x20): undefined reference to `_lseek' /home/yra/x-tools/arm-2009q1/bin/../lib/gcc/arm-none-eabi/4.3.3/../../../../arm-none-eabi/lib/libc.a(lib_a-readr.o): In function `_read_r': readr.c:(.text+0x20): undefined reference to `_read' /home/yra/x-tools/arm-2009q1/bin/../lib/gcc/arm-none-eabi/4.3.3/libgcc.a(_divdi3.o)  .ARM.exidx+0x0): relocation truncated to fit: R_ARM_PREL31 against `.text' /home/yra/x-tools/arm-2009q1/bin/../lib/gcc/arm-none-eabi/4.3.3/libgcc.a(_udivdi3.o)  .ARM.exidx+0x0): relocation truncated to fit: R_ARM_PREL31 against `.text' collect2: ld returned 1 exit status make: *** [RTOSDemo.elf] Ошибка 1 Здесь не находит функций _sbrk _write ... Пробовал тупо в мэйкфайле в опциях компилятора указать -D MISSING_SYSCALL_NAMES \ т.к нашел файл : Цитата #ifndef __SYSLIST_H #define __SYSLIST_H
#ifdef MISSING_SYSCALL_NAMES #define _close close #define _execve execve #define _fcntl fcntl #define _fork fork #define _fstat fstat #define _getpid getpid #define _gettimeofday gettimeofday #define _isatty isatty #define _kill kill #define _link link #define _lseek lseek #define _open open #define _read read #define _sbrk sbrk #define _stat stat #define _times times #define _unlink unlink #define _wait wait #define _write write #endif /* MISSING_SYSCALL_NAMES */ не помогло..
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Aug 29 2013, 08:55
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(AHTOXA @ Sep 19 2009, 01:07)  Ну это уже мелочи. Добавьте к проекту вот это:
stf_syscalls_minimal.rar ( 1.34 килобайт )
Кол-во скачиваний: 1033Кстати, это я взял как раз из какого-то примера под FreeRtos... ИМХО, недавно нашёл более прямой способ (при использовании newlib): При линковке добавить -lnosys и в скрипте линкера добавить Цитата PROVIDE ( end = _end ); Тогда не нужно ваш файл цеплять к проекту. Ну и ещё очень полезным оказался ключик: Цитата LDFLAGS += --specs=nano.specs Посмотрел исходники ScmRtos: Чтобы с LTO собиралось стоит поправит стартап файл в части таблицы векторов, добавив used: Цитата __attribute__ ((used, section(".isr_vector"))) Хотел спросить зачем вы переименовали стандартные имена обработчиков векторов и дали им нестандартные имена? Цитата void PendSVC_ISR(void); void SystemTimer_ISR(void); Я потратил массу времени пытаясь понять почему не вызывается SysTick_Handler...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Aug 29 2013, 12:03
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(demiurg_spb @ Aug 29 2013, 14:55)  ИМХО, недавно нашёл более прямой способ (при использовании newlib): О, появилась реализация заглушек в тулчейне? В каком? Как там должен называться putchar()? Есть ли в _sbrk() проверка на перекрытие кучи и стека? Цитата(demiurg_spb @ Aug 29 2013, 14:55)  Ну и ещё очень полезным оказался ключик: Насколько я понял, это пока не портабельно. А где можно почитать, что это даёт? Цитата(demiurg_spb @ Aug 29 2013, 14:55)  Чтобы с LTO собиралось стоит поправит стартап файл в части таблицы векторов, добавив used: Хотел спросить зачем вы переименовали стандартные имена обработчиков векторов и дали им нестандартные имена? В примерах для F2xx и F4xx это уже есть. ЕМНИМС, имена поменял не я, а ST:) Я взял их из какого-то совсем старого ST-шного стартапа.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 29 2013, 12:19
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(AHTOXA @ Aug 29 2013, 16:03)  О, появилась реализация заглушек в тулчейне? В каком? 4.7.4 с launchpad.net Кстати этот тулчейн заметно быстрее собирает проекты инфа. Цитата Как там должен называться putchar()? Есть ли в _sbrk() проверка на перекрытие кучи и стека? Пока не имею ответов, но судя по форуму на ланчпаде они должны были вставить проверку. Цитата Насколько я понял, это пока не портабельно. А где можно почитать, что это даёт? В доке на newlib. Использует nano реализацию newlib, у меня чуть-ли не минус 15К с проекта ушло. Проблем с портабельностью пока не встретил. Цитата В примерах для F2xx и F4xx это уже есть. ЕМНИМС, имена поменял не я, а ST:) Я взял их из какого-то совсем старого ST-шного стартапа. Понятно. ИМХО стоит привести в соответствие с последним CMSIS'ом.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Aug 29 2013, 19:09
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(demiurg_spb @ Aug 29 2013, 18:19)  4.7.4 с launchpad.net gcc-arm-embedded? Понятно. Что-то у меня не получилось ничего, ругается на отсутствие _sbrk, _write, _close и проч. (Тестовый проект с printf). Версия вроде свежая: Код arm-none-eabi-gcc --version arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.7.4 20130613 (release) [ARM/embedded-4_7-branch revision 200083] Copyright (C) 2012 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. --specs=nano.specs работает прекрасно (первая строчка без этого ключа, вторая - с ним): Код text data bss dec hex filename 29692 2244 600 32536 7f18 ./exe/hello-stm32-printf.elf 6720 236 552 7508 1d54 ./exe/hello-stm32-printf.elf Осталось узнать, что мы при этом теряем  Цитата(demiurg_spb @ Aug 29 2013, 18:19)  Проблем с портабельностью пока не встретил. Ну вот, например, kgp-тулчейн не знает ничего про --specs=nano.specs. Цитата(demiurg_spb @ Aug 29 2013, 18:19)  ИМХО стоит привести в соответствие с последним CMSIS'ом. Зачем? Всё равно CMSIS-овский стартап не подходит, он не вызывает конструкторы. К тому же, потеряется совместимость с имеющимися проектами.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 30 2013, 07:17
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(AHTOXA @ Aug 29 2013, 23:09)  gcc-arm-embedded? Понятно. Что-то у меня не получилось ничего, ругается на отсутствие _sbrk, _write, _close и проч. (Тестовый проект с printf). Версия вроде свежая: Странно... У меня не ругается. Да и вы сами можете убедиться что всё это есть в либе libnosys.a. Код LDFLAGS = LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) LDFLAGS += -nostartfiles LDFLAGS += -nodefaultlibs LDFLAGS += --specs=nano.specs LDFLAGS += -Wl,--relax LDFLAGS += -Wl,--gc-section LDFLAGS += -Wl,--static LDFLAGS += -Wl,--start-group LDFLAGS += -lm -lc -lgcc -lnosys LDFLAGS += -Wl,--end-group LDFLAGS += -T$(LINKER_SCRIPT_FILE) LDFLAGS += -Wl,--Map=$(TARGET).map,--cref Цитата --specs=nano.specs работает прекрасно Осталось узнать, что мы при этом теряем  без Код LDFLAGS += -u _printf_float теряем возможность форматировать float. Цитата Ну вот, например, kgp-тулчейн не знает ничего про --specs=nano.specs. У него видимо newlib не той системы вкрячен  Это решается его пересборкой. Цитата Зачем? Всё равно CMSIS-овский стартап не подходит, он не вызывает конструкторы. К тому же, потеряется совместимость с имеющимися проектами. Дело хозяйское, но лично я бы всё-равно поменял.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
Yra Не могу собрать проект 'Hello Wirld !' Sep 16 2009, 17:56 Yra Дайте хотябы ссылку на бинарники нормального gcc -... Sep 17 2009, 18:36 AHTOXA У вас компилятор кажись не тот. Дл freeRtos надо н... Sep 17 2009, 21:11       AHTOXA Ага, теперь собралось. У меня не хватало флагов -n... Aug 30 2013, 08:16        demiurg_spb Цитата(AHTOXA @ Aug 30 2013, 12:16) Или я... Aug 30 2013, 08:41         AHTOXA Цитата(demiurg_spb @ Aug 30 2013, 14:41) ... Aug 30 2013, 08:47          demiurg_spb Цитата(AHTOXA @ Aug 30 2013, 12:47) Судя ... Aug 30 2013, 09:07          demiurg_spb Цитата(AHTOXA @ Aug 30 2013, 12:47) очере... Sep 2 2013, 08:16           AHTOXA С одной стороны, это может сделать нашу жизнь прощ... Sep 2 2013, 12:05 Yra Спасибо помогло: собирается. Насчёт работает-ли?..... Sep 19 2009, 20:04 Yra Следующие осложнения: для полураскошной отладки ко... Sep 22 2009, 20:06 AHTOXA В том stf_syscalls_minimal.c, который я постил, вы... Sep 22 2009, 20:25 Yra Вот код, вызывающий функции
Кодint main( void ... Sep 22 2009, 21:03 AHTOXA Насчёт uboot-а я не в курсах... Во всяком случае, ... Sep 23 2009, 08:22 mdmitry Цитата(AHTOXA @ Sep 23 2009, 12:22) Насчё... Sep 23 2009, 08:50  AHTOXA Цитата(mdmitry @ Sep 23 2009, 14:50) С по... Sep 23 2009, 09:37 Yra ЦитатаЭто всё понятно. А вот как им грузить standa... Sep 23 2009, 15:18 AHTOXA Цитата(Yra @ Sep 23 2009, 21:18) Linux - ... Sep 23 2009, 15:45 Yra странно: этот кусок скрипта остался от freeRTOS- о... Sep 23 2009, 15:48 AHTOXA Цитата(Yra @ Sep 23 2009, 21:48) странно:... Sep 23 2009, 16:05 Yra нет. Всё тоже: 12висим
----
попробовал так:
Кодint... Sep 23 2009, 16:15 AHTOXA Цитата(Yra @ Sep 23 2009, 22:15) некашерн... Sep 23 2009, 16:31 Yra нет. Всё тоже: 12висим Sep 23 2009, 16:39 AHTOXA Да, грустно. У меня закончились предположения.
Во... Sep 23 2009, 17:46 Flexz А вам действительно newlib нужен? Если просто prin... Sep 24 2009, 11:51 Yra ЦитатаА вам действительно newlib нужен? Если прост... Sep 25 2009, 12:59 alx2 Если вы действительно используете printf из newlib... Sep 26 2009, 21:27  AHTOXA Цитата(alx2 @ Sep 27 2009, 03:27) Если вы... Sep 27 2009, 07:54   alx2 Цитата(AHTOXA @ Sep 27 2009, 12:54) И в э... Oct 3 2009, 20:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|