Как запретить GCC передавать флаги по умолчанию? - PullRequest
3 голосов
/ 01 ноября 2009

Я пытаюсь кросс-компилировать Linux для архитектуры ARM.

Хост - это компьютер X86, на котором работает ubuntu-jaunty. Я скачал кросс-компиляцию инструментария для ARM из http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/. Я скачал версию 2.95.3 для инструментария.

Проблема, с которой я столкнулся, заключается в том, что GCC сам передает некоторые флаги по умолчанию, из-за чего GCC затем выдает ошибку:

/ usr / local / arm / 2.95.3 / bin / arm-linux-gcc -specs = / home / feroze / wnr834m / marvell_WNR834M / gcc_specs -D__KERNEL__ -I / home / feroze / wnr834m / marvell_WuxR834ff lin / -1_1_3_gtk / include -Wall -Wstrict-прототипы -Wno-триграфы -Os -fno-строго-псевдонимы -fno-common -DLED_DUAL_COLOR -DFOR_ROUTER -I / home / feroze / wnr834m / marvell_WNR8343 / armux-88_f_inx_180f / linux-88_f1 / mach-mv88fxx81 / Soc / gpp / -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH __ = 5 -march = armv5 -mtune = arm9tdmi -mshort-load-bytes -msoft-float -Uarm -march = strongarm - DKBUILD_BASENAME = main -c -o init / main.o init / main.c cc1: неверное значение (сильное оружие) для -march = switch make [1]: *** [init / main.o] Ошибка 1 make [1]: выход из каталога `/ home / feroze / wnr834m / marvell_WNR834M / linux-88fxx81-1_1_3_gtk '

Я проверил весь make-файл и не смог найти места, где определяются LINUX_ARM_ARCH_5 и -march = armv5. Я определяю -march = strongarm в make-файле, но затем он добавляется в соответствии с определением ARMv5.

Итак, я создал файл defs из gcc, изменил его, чтобы иметь только параметры для ARMv4, а затем использовал его, указав параметр -specs =. Однако это все еще не решает проблему.

Может кто-нибудь помочь? Как мне решить эту проблему?

Спасибо!

Фероз

Ответы [ 3 ]

1 голос
/ 01 ноября 2009

Это не поможет вам устранить проблему, но вы можете gcc -dM -E <empty_file.c> или gcc -dM -E -x c /dev/null распечатать список всех предопределенных #define s для gcc. Объедините -dM с другим флагом, таким как -march, и вы сможете отследить причину проблемы #define.

1 голос
/ 02 ноября 2009

Флаг -march устанавливается в arch / ARM / Makefile и зависит от машины, которую вы выбрали в файле конфигурации. Если вам не нужен флаг armv5, обязательно выберите правильную архитектуру в файле конфигурации.

Вы должны предположить, что добавленные в ядро ​​CFLAGS верны (при условии, что ваш конфиг в порядке), и если ваш набор инструментов не поддерживает один из них, у вас нет другого выбора, кроме как самостоятельно скомпилировать набор инструментов, используя original Crosstol скрипт , который должен работать с 2.95.3

Редактировать: оригинальный ответ
Что вы пытаетесь построить? 2.95.3 набор инструментов довольно древний. Вы должны попробовать более свежий набор инструментов. Вы можете найти предварительно скомпилированный здесь Выберите EABI, чтобы начать.

Это не прямой ответ на вашу проблему, но если вы собираете ядро ​​Linux, вам не нужно возиться с Makefiles. Вы получите больше помощи, если сможете получить более «стандартный» набор инструментов.

1 голос
/ 01 ноября 2009

Обязательно проверьте переменные среды, так как они могут убедить make сделать неожиданные вещи.

Если Makefile включает другой файл, он может изменить CFLAGS до вызова CC. Можете ли вы распечатать содержимое CFLAGS непосредственно перед вызовом CC?

...