我正在尝试为ARM架构交叉编译linux。
主机是运行ubuntu-jaunty的X86机器。我从http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/下载了ARM的交叉编译工具链。我下载了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_WNR834M / linux-88fxx81 -1_1_3_gtk / include -Wall -Wstrict-prototypes -Wno-trigraphs -Os -fno-strict-aliasing -fno-common -DLED_DUAL_COLOR -DFOR_ROUTER -I / home / feroze / wnr834m / marvell_WNR834M / linux-88fxx81-1_1_3_gtk / arch / arm / 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的坏值(strongarm) make [1]:*** [init / main.o]错误1 make [1]:离开目录`/ home / feroze / wnr834m / marvell_WNR834M / linux-88fxx81-1_1_3_gtk'
我检查了整个makefile,找不到正在定义 LINUX_ARM_ARCH_5 和-march = armv5的地方。我在makefile中定义了-march = strongarm,但随后它被你的ARMv5定义附加。
因此,我从gcc创建了一个defs文件,将其修改为只有ARMv4的选项,然后通过指定-specs =选项来使用它。但是,这仍然无法解决问题。
有人可以帮忙吗?我该如何解决这个问题?
谢谢!
菲罗兹
答案 0 :(得分:1)
请务必检查您的环境变量,因为它们可以说服make做意想不到的事情。
如果Makefile包含另一个文件,则可能在调用CFLAGS
之前修改CC
。您可以在CFLAGS
来电之前打印CC
的内容吗?
答案 1 :(得分:1)
这不会严格帮助您消除问题,但您可以gcc -dM -E <empty_file.c>
或gcc -dM -E -x c /dev/null
打印出所有预定义#define
的列表用于gcc。将-dM
与您的-march
之类的其他标记结合起来,您就可以找到导致#define
问题的原因。
答案 2 :(得分:1)
-march标志在arch/ARM/Makefile中设置,取决于您在配置文件中选择的计算机。如果您不想使用armv5标志,请确保在配置文件中选择正确的体系结构。
您应该假设内核附加的CFLAGS是正确的(如果您的配置没问题),如果您的工具链不支持其中一个,那么您别无选择,只能使用{{3}自己交叉编译工具链。这应该适用于2.95.3
编辑:原始答案
你想要建造什么?
2.95.3工具链相当古老。你应该尝试一个更新的工具链。你可以找到一个预编译的original crosstol script
选择EABI开始。
这不是您问题的直接答案,但如果您正在构建Linux内核,则不需要使用Makefile。如果您能获得更“标准”的工具链,您将获得更多帮助。