Итак: работаю под 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 - файл упрощён).