Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сборка ядра кросс-компилятором GCC под ARM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Impossibility
При сборке ядра кросс-компилятором под ARM выдаются ошибки.
Вот какие команды подавались:
[niagara@stend1-h11 linux-3.2.1]$ make clean
[niagara@stend1-h11 linux-3.2.1]$ make ARCH=arm defconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
*** Default configuration is based on 'versatile_defconfig'
#
# configuration written to .config
#
[niagara@stend1-h11 linux-3.2.1]$ make ARCH="arm" CROSS_COMPILE="arm-eabi-" zImage modules
Вот какая ошибка выдается:
Kernel: arch/arm/boot/Image is ready
AS arch/arm/boot/compressed/head.o
GZIP arch/arm/boot/compressed/piggy.gzip
AS arch/arm/boot/compressed/piggy.gzip.o
CC arch/arm/boot/compressed/misc.o
CC arch/arm/boot/compressed/decompress.o
CC arch/arm/boot/compressed/string.o
AS arch/arm/boot/compressed/lib1funcs.o
LD arch/arm/boot/compressed/vmlinux
arm-eabi-ld: ERROR: arch/arm/boot/compressed/misc.o uses VFP instructions, whereas arch/arm/boot/compressed/vmlinux does not
arm-eabi-ld: failed to merge target specific data of file arch/arm/boot/compressed/misc.o
arm-eabi-ld: ERROR: arch/arm/boot/compressed/decompress.o uses VFP instructions, whereas arch/arm/boot/compressed/vmlinux does not
arm-eabi-ld: failed to merge target specific data of file arch/arm/boot/compressed/decompress.o
arm-eabi-ld: ERROR: arch/arm/boot/compressed/string.o uses VFP instructions, whereas arch/arm/boot/compressed/vmlinux does not
arm-eabi-ld: failed to merge target specific data of file arch/arm/boot/compressed/string.o
make[2]: *** [arch/arm/boot/compressed/vmlinux] Error 1
make[1]: *** [arch/arm/boot/compressed/vmlinux] Error 2
make: *** [zImage] Error 2
Собственно вопрос как избежать этой ошибкиsm.gif
Компилятор собирал сам с использованием newlib
Конфигурация для сборки компилятора:
$DST/$SRCNAME/$GCC_SRC/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++ --without-fp --with-softfloat-support=internal --enable=multilib --with-float=soft --with-gnu-as --with-gnu-ld --with-newlib --with-gxx-include-dir=$PREFIX/$TARGET/include --with-mpfr-lib=/usr/local/lib --with-gmp-lib=/usr/local/lib
где TARGET=arm-eabi (если в качестве цели выбрать arm-elf ошибка таже)
klen
линкер Вам сообщает что объектники скомпилированы поддержкой инструкций FPU а слинковать образ вы пытаетесь без поддержки оной. Направление решение проблемы - в ключи линкера добавить аналогичные ключи относящиеся к FPU которые проталкиваются при компиляции. По сути линкер в такой ситуации незнает какой набор библиотек линковать с объектниками.
Impossibility
Сейчас я, похоже, выдам свое полное непонимание вопроса..sm.gif
Не могли бы Вы мне еще немного пояснить ситуацию?
Какие ключи, используемые при компиляции, имеются ввиду? Те, что задаются в Makefile при сборке ядра, или те, с кторыми я собирал сам кросс-компилятор (--without-fp --with-softfloat-support=internal, например) ?
И если первый вариант, то ключи к запуску линкера также в Makefile надо добавлять?
klen
чтобы все было бы понятно приведите ключи компиляции с которыми компилируется файл arch/arm/boot/compressed/misc.o
и ключи с которыми линкуется arch/arm/boot/compressed/vmlinux

у меня подозрение что они отличаются в плане использования fpu. отсюда не видно - надо больше информации

полный лог с ключами достигается компиляцие или ликовковкой с дополнительным ключем -v
Impossibility
Ядро собралось... Смешно сказать, но все заработало после выставления параметра CONFIG_AEABI=y в Kernel Features. Что называется - не надо лезть в дебри, надо проверить не дурак ли ты...
klen, хотелось бы все же поднабраться опыта, если Вы, конечно, не против. Не понял куда надо добавить этот самый ключ -v sad.gif Я сделал вот что: в Makefile в строках
# Make variables (CC, etc...)

AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld -v
CC = $(CROSS_COMPILE)gcc -v
Добавил ключ -v (выделено жирным). После запуска процесса сборки стала вроде вываливаться отладочная информация, но команда grep на нее не реагирует...
Я что-то опять не так делаю?
andrew_b
Цитата(Impossibility @ Feb 1 2012, 09:15) *
После запуска процесса сборки стала вроде вываливаться отладочная информация, но команда grep на нее не реагирует...
Я что-то опять не так делаю?
Что именно вы делаете? Выхлоп gcc идёт в stderr, а если вы делаете что-то типа gcc -v | grep , то пайп подключен к stdout, и перенаправлять инфу нужно туда. Попробуйте что-то типа
Код
gcc -v 2>&1 | grep
Impossibility
andrew_b, спасибо, с помощью Вас закрылась еще одна дырка в моей головеsm.gif

А по теме, если кому-то интересно...
Получил логи компиляции и линковки ядра, оказалось, что все дело в ключе -mabi. Он у меня в работающем варианте вот такой: -mabi=aapcs-linux.
Правда я еще не нашел, что же это за магическое сочитание букв - "aapcs-linux", но думаю гугл тут рано или поздно поможетsm.gif

PS klen, благодарю за помощь в получении ценных сведенийsm.gif
xor.kruger
2 Impossibility:
А каким кросс-компилятором вы пользовались?
Обычно при использовании CodeSourcery или Buildroot'овского КК никаких подобных проблем не возникает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.