реклама на сайте
подробности

 
 
> Вопрос по GCC для ARM926EJ-S
dragigrja
сообщение Jan 13 2009, 10:27
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 17-03-08
Из: Москва
Пользователь №: 35 969



Здравствуйте.

Какое значение опции -mfpu GCC должно использоваться для полностью аппаратной (и максимально эффективной, без оглядки на совместимость) плавающей точки в ядре ARM926EJ-S?
Что нужно собрать для компиляции кроме gcc и binutils? Поскольку проект использует printf() и проч. нужна ли uClibc?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 12)
amw
сообщение Jan 13 2009, 11:58
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(dragigrja @ Jan 13 2009, 12:27) *
Здравствуйте.

Какое значение опции -mfpu GCC должно использоваться для полностью аппаратной (и максимально эффективной, без оглядки на совместимость) плавающей точки в ядре ARM926EJ-S?
Что нужно собрать для компиляции кроме gcc и binutils? Поскольку проект использует printf() и проч. нужна ли uClibc?

А у него (ARM926EJ-S) точно есть FPU? Если FPU точно есть - то Вы должны знать и его тип.

А ОС будет? Если Linux - то да, uClibc или обычная glibc нужна. Если нет ОС, то можно и самому написать printf.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
dragigrja
сообщение Jan 13 2009, 17:42
Сообщение #3





Группа: Новичок
Сообщений: 9
Регистрация: 17-03-08
Из: Москва
Пользователь №: 35 969



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. Это как–нибудь относится к ошибке?

Заранее спасибо.

Сообщение отредактировал dragigrja - Jan 13 2009, 17:43
Go to the top of the page
 
+Quote Post
Harbour
сообщение Jan 14 2009, 07:31
Сообщение #4


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



Во-первых - нафига собирать старый 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
Go to the top of the page
 
+Quote Post
amw
сообщение Jan 14 2009, 12:19
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(dragigrja @ Jan 13 2009, 19:42) *
... оказалось, что в 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 (см выше).


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
gosha
сообщение Jan 14 2009, 14:41
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 15-06-04
Из: Менделеево
Пользователь №: 30



Цитата(amw @ Jan 14 2009, 15:19) *
Опции то есть, а вот есть ли FPU в железе?


--with-float=softfp --with-fpu=vfp

Собирается?
Go to the top of the page
 
+Quote Post
vik0
сообщение Jan 14 2009, 18:12
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



Цитата(amw @ Jan 14 2009, 14:19) *
ARM чип с FPU, кроме IXP425 (см выше).

LPC3180
Go to the top of the page
 
+Quote Post
amw
сообщение Jan 14 2009, 19:00
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(vik0 @ Jan 14 2009, 20:12) *

Я не правильно выразился.
Не работал с другими чипами с FPU кроме IXP425.
Я не отрицаю существоание таких чипов. И знаю что такие есть. Но точного ответа по обсуждаемому вопросу дать не могу.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
dragigrja
сообщение Jan 15 2009, 10:38
Сообщение #9





Группа: Новичок
Сообщений: 9
Регистрация: 17-03-08
Из: Москва
Пользователь №: 35 969



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. Мне бы хотелось иметь аппаратную точку.

Благодарю за ответы.

Сообщение отредактировал dragigrja - Jan 15 2009, 10:55
Go to the top of the page
 
+Quote Post
Andrew2000
сообщение Jan 15 2009, 14:59
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675



Цитата(amw @ Jan 14 2009, 22:00) *
...чипами с FPU кроме IXP425.

а разве в IXP425 есть FPU? где это написано?
Go to the top of the page
 
+Quote Post
amw
сообщение Jan 15 2009, 16:19
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(Andrew2000 @ Jan 15 2009, 16:59) *
а разве в IXP425 есть FPU? где это написано?

Чесного (по ARM) нету.
Написано в разделе про DSP.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
dragigrja
сообщение Jan 18 2009, 08:15
Сообщение #12





Группа: Новичок
Сообщений: 9
Регистрация: 17-03-08
Из: Москва
Пользователь №: 35 969



Снова здравствуйте.

В деле появился некоторый прогресс.
С 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 так и не появился.

Сообщение отредактировал dragigrja - Jan 18 2009, 08:17
Go to the top of the page
 
+Quote Post
Harbour
сообщение Jan 18 2009, 08:26
Сообщение #13


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 18:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01499 секунд с 7
ELECTRONIX ©2004-2016