dragigrja 0 13 января, 2009 Опубликовано 13 января, 2009 · Жалоба Здравствуйте. Какое значение опции -mfpu GCC должно использоваться для полностью аппаратной (и максимально эффективной, без оглядки на совместимость) плавающей точки в ядре ARM926EJ-S? Что нужно собрать для компиляции кроме gcc и binutils? Поскольку проект использует printf() и проч. нужна ли uClibc? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 13 января, 2009 Опубликовано 13 января, 2009 · Жалоба Здравствуйте. Какое значение опции -mfpu GCC должно использоваться для полностью аппаратной (и максимально эффективной, без оглядки на совместимость) плавающей точки в ядре ARM926EJ-S? Что нужно собрать для компиляции кроме gcc и binutils? Поскольку проект использует printf() и проч. нужна ли uClibc? А у него (ARM926EJ-S) точно есть FPU? Если FPU точно есть - то Вы должны знать и его тип. А ОС будет? Если Linux - то да, uClibc или обычная glibc нужна. Если нет ОС, то можно и самому написать printf. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dragigrja 0 13 января, 2009 Опубликовано 13 января, 2009 (изменено) · Жалоба amw: А у него (ARM926EJ-S) точно есть FPU? Если FPU точно есть - то Вы должны знать и его тип. Спасибо за ответ, оказалось, что в gcc 4.1.1 есть вариант vfp для -mfpu, которого не было в моём 3.4.3. А ОС будет? Если Linux - то да, uClibc или обычная glibc нужна. Если нет ОС, то можно и самому написать printf. ОС не будет, но кроме printf() в проекте есть достаточное количество функций стандартной библиотеки, которые было бы тягостно писать. Попробовал собрать тулчейн заново, но наткнулся на ошибки, итак: архитектура ARMv5TEJ, ядро — ARM926EJ-S хост: i686-pc-linux-gnu, gcc-4.3.2 задача: собрать тулчейн, генерирующий по возможности полностью использующий аппаратные возможности код (например, встроенный векторный FPU) 1. binutils-2.19: ./configure --target=arm-elf --prefix=/tmp/arm-elf --with-float=hard --enable-interwork --enable-multilib --disable-nls – собрано успешно, собранные бинарники были добавлены в $PATH 2. gcc-4.1.2: ./configure --target=arm-elf --with-arch=armv5te --with-cpu=arm926ej-s --with-fpu=vfp --with-float=hard --enable-interwork --disable-nls --prefix=$PREFIX --enable-languages=c --disable-libssp --with-newlib --disable-multilib --disable-tls --disable-mudflap --disable-shared --disable-threads – выдаёт ошибку: make[4]: Entering directory `/<...>/gcc-4.1.2/host-i686-pc-linux-gnu/gcc' /<..>/gcc-4.1.2/host-i686-pc-linux-gnu/gcc/xgcc -B/<...>/gcc-4.1.2/host-i686-pc-linux-gnu/gcc/ -B$PREFIX/arm-elf/bin/ -B$PREFIX/arm-elf/lib/ -isystem $PREFIX/arm-elf/include -isystem $PREFIX/arm-elf/sys-include -O2 -O2 -g -O2 -DIN_GCC -DCROSS_COMPILE -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -I. -I. -I../.././gcc -I../.././gcc/. -I../.././gcc/../include -I../.././gcc/../libcpp/include -g0 -finhibit-size-directive -fno-inline-functions -fno-exceptions -fno-zero-initialized-in-bss -fno-unit-at-a-time -Dinhibit_libc \ -c ../.././gcc/crtstuff.c -DCRT_BEGIN \ -o crtbegin.o ../.././gcc/crtstuff.c:1: sorry, unimplemented: -mfloat-abi=hard and VFP При этом, в документации к этой версии gcc есть следующее: -mfpu=name -mfpe=number -mfp=number This specifies what floating point hardware (or hardware emulation) is available on the target. Permissible names are: `fpa', `fpe2', `fpe3', `maverick', `vfp'. -mfp and -mfpe are synonyms for -mfpu=`fpe'number, for compatibility with older versions of GCC. If -msoft-float is specified this specifies the format of floating point values. Проект gnuarm прилагает для самостоятельной сборки исправленный файл gcc-4.1.2/gcc/config/arm/t-arm-elf, в котором раскоментировано большое количество строк с опциями MULTILIB. Это как–нибудь относится к ошибке? Заранее спасибо. Изменено 13 января, 2009 пользователем dragigrja Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbour 0 14 января, 2009 Опубликовано 14 января, 2009 · Жалоба Во-первых - нафига собирать старый 4.1.2 ? Во-вторых там же на gnuarm английским по белому все написано. Берем тупо последний 4.2.3 и по шажочкам : 1. ../binutils-2.x.x.x.x/configure --prefix=/usr --target=arm-elf --disable-nls --enable-interwork --enable-multilib 2. uz newlib-* 3. cp t-arm-elf gcc-4.3.2/gcc/config/arm/ 4. cd gcc-build ../gcc-4.3.2/configure --target=arm-elf --prefix=/usr --enable-interwork --enable-multilib --with-float=soft --enable-languages="c,c++" --with-newlib --with-headers=[newlib-source]/newlib/libc/include make all-gcc install-gcc 5. [newlib-source]/configure --target=arm-elf --prefix=/usr --enable-interwork --enable-multilib --with-float=soft make all install 6. cd [gcc-build] make all install 7. cd [gdb-build] [gdb-source]/configure --target=arm-elf --prefix=/usr --enable-interwork --enable-multilib --with-float=soft make all install Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 14 января, 2009 Опубликовано 14 января, 2009 · Жалоба ... оказалось, что в gcc 4.1.1 есть вариант vfp для -mfpu, которого не было в моём 3.4.3. Опции то есть, а вот есть ли FPU в железе? Вероятно Вам потребуется libfloat для Вашего конкретного процессора. Обычно они предоставляются производителем. По крайней мере с Интеловским IXP425 у меня именно так и было. ОС не будет, но кроме printf() в проекте есть достаточное количество функций стандартной библиотеки, которые было бы тягостно писать. http://sourceware.org/newlib/ Попробовал собрать тулчейн заново, но наткнулся на ошибки: ... Это как–нибудь относится к ошибке? Вроятно да. Не знаю точно, что там именно раскоментировано, но GCC не знает, в Вашем случае, какой FPU использовать для hard-float. Вот в настройках MULTILIB они и задаются. Сам я никогда не встречал ARM чип с FPU, кроме IXP425 (см выше). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha 0 14 января, 2009 Опубликовано 14 января, 2009 · Жалоба Опции то есть, а вот есть ли FPU в железе? --with-float=softfp --with-fpu=vfp Собирается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 14 января, 2009 Опубликовано 14 января, 2009 · Жалоба ARM чип с FPU, кроме IXP425 (см выше). LPC3180 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 14 января, 2009 Опубликовано 14 января, 2009 · Жалоба LPC3180 Я не правильно выразился. Не работал с другими чипами с FPU кроме IXP425. Я не отрицаю существоание таких чипов. И знаю что такие есть. Но точного ответа по обсуждаемому вопросу дать не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dragigrja 0 15 января, 2009 Опубликовано 15 января, 2009 (изменено) · Жалоба Harbour: Во-первых - нафига собирать старый 4.1.2 ?Я взял его с сайта gnuarm, подумав, что он наиболее подходящ, коль они его используют для раздачи страждущим. При прежних параметрах для configure и заменённым t-arm-elf у gcc-4.2.3 ошибка прежняя: ../.././gcc/crtstuff.c:1: sorry, unimplemented: -mfloat-abi=hard and VFP Во-вторых там же на gnuarm английским по белому все написано. Берем тупо последний 4.2.3 и по шажочкам : 1. <...> 2. <...> 3. <...> Сделано. К четвёртому пункту есть вопрос. 4. cd gcc-build ../gcc-4.3.2/configure --target=arm-elf --prefix=/usr --enable-interwork --enable-multilib --with-float=soft --enable-languages="c,c++" --with-newlib --with-headers=newlib-source/newlib/libc/include make all-gcc install-gcc Согласно User Manual LPC32x0 имеет векторный сопроцессор для работы с ПЗ (VFP), который мне хотелось бы использовать в генерируемом тулчейном коде. Если configure указать --with-float=soft, то, как я понимаю, gcc будет эмулировать ПЗ? Мне хотелось бы иметь полностью аппаратную точку. amw: Опции то есть, а вот есть ли FPU в железе?Да, есть. Выше есть ссылка на описание серии µC. Вероятно Вам потребуется libfloat для Вашего конкретного процессора. Обычно они предоставляются производителем. По крайней мере с Интеловским IXP425 у меня именно так и было.А разве libfloat используется не для программной эмуляции FPU для конкретной архитектуры или ядра? Мне хотелось бы иметь именно аппаратную точку. Вроятно да. Не знаю точно, что там именно раскоментировано, но GCC не знает, в Вашем случае, какой FPU использовать для hard-float. Вот в настройках MULTILIB они и задаются.Спасибо, попробую собрать с ним. gosha: --with-float=softfp --with-fpu=vfp Собирается? Возможно, но согласно с мануалом к gcc: -mfp=number This specifies what floating point hardware (or hardware emulation) is available on the target. Permissible names are: `fpa', `fpe2', `fpe3', `maverick', `vfp'. -mfp and -mfpe are synonyms for -mfpu=`fpe'number, for compatibility with older versions of GCC. If -msoft-float is specified this specifies the format of floating point values. при --with-float=softpfp и --with-fpu=vfp точка останется эмулируемой, но при этом будет хранится в формате VFP. Мне бы хотелось иметь аппаратную точку. Благодарю за ответы. Изменено 15 января, 2009 пользователем dragigrja Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrew2000 0 15 января, 2009 Опубликовано 15 января, 2009 · Жалоба ...чипами с FPU кроме IXP425. а разве в IXP425 есть FPU? где это написано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 15 января, 2009 Опубликовано 15 января, 2009 · Жалоба а разве в IXP425 есть FPU? где это написано? Чесного (по ARM) нету. Написано в разделе про DSP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dragigrja 0 18 января, 2009 Опубликовано 18 января, 2009 (изменено) · Жалоба Снова здравствуйте. В деле появился некоторый прогресс. С FPU вопрос решился банальным гуглением: (в прошлый раз я умудрился пропустить эту страницу) Generating VFP Instructions Question How do I get the compiler to generate VFP instructions? Answer Use the options -mfpu=vfp -mfloat-abi=softfp to enable VFP instructions. If you have a VFPv3 you may use -mfpu=vfp3 -mfloat-abi=softfp to enable VFPv3 instructions. The compiler then assumes that your target hardware has VFP and generates appropriate code. GCC still uses the same ABI used on non-VFP processors, so your program will work fine if part of your code is compiled with software floating-point and other parts are compiled with the options given above. Do not use -mfloat-abi=hard, which is not yet implemented. When this option is implemented it will generate code that is incompatible with the supplied runtime libraries. Благодаря сообщению Harbour удалось установить gcc-4.3.2: вместо make all, компилирующего всё, что есть, нужно было сделать make all-gcc, собирающего только сам компилятор. Плюс, configure нужно было передать -mfpu=vfp -mfloat-abi=softfp. Следующая проблема состоит в том, что arm-elf-ld не находит crti.o (которого нет в $PREFIX/arm-elf). Я собирал gcc с --disable-multilib, и потому подправил gcc-4.3.2/gcc/config/arm/t-arm-elf: было: EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o # If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here # EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o стало: # EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o # If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o Увы, crti.o так и не появился. Изменено 18 января, 2009 пользователем dragigrja Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbour 0 18 января, 2009 Опубликовано 18 января, 2009 · Жалоба disable-multilib подразумевает компиляцию только одного варианта библиотек, если вдруг (в процессе компиляции) нужна crt от другого имеем его отсутсвие. Собирать нужно именно так как я сказал, вот к примеру что у меня стоит, без никаких правок : /usr/lib/gcc/arm-elf/4.3.2/crti.o /usr/lib/gcc/arm-elf/4.3.2/interwork/crti.o /usr/lib/gcc/arm-elf/4.3.2/fpu/crti.o /usr/lib/gcc/arm-elf/4.3.2/fpu/interwork/crti.o /usr/lib/gcc/arm-elf/4.3.2/be/crti.o /usr/lib/gcc/arm-elf/4.3.2/be/interwork/crti.o /usr/lib/gcc/arm-elf/4.3.2/be/fpu/crti.o /usr/lib/gcc/arm-elf/4.3.2/be/fpu/interwork/crti.o /usr/lib/gcc/arm-elf/4.3.2/thumb/crti.o /usr/lib/gcc/arm-elf/4.3.2/thumb/interwork/crti.o /usr/lib/gcc/arm-elf/4.3.2/thumb/be/crti.o /usr/lib/gcc/arm-elf/4.3.2/thumb/be/interwork/crti.o Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться