树莓派3移植U-Boot编译报错:cc1: error: bad value (‘armv8-a’) for ‘-march=’ switch
Fixing "cc1: error: bad value (‘armv8-a’) for ‘-march=’ switch" When Building U-Boot for Raspberry Pi 3
问题根源
这问题我之前帮不少开发者解决过——你当前用的arm-bcm2708hardfp-linux-gnueabi-交叉编译器是给树莓派1/2(ARMv6/ARMv7架构)设计的,而树莓派3是ARMv8-A架构。老版本的这个工具链根本不认识-march=armv8-a这个编译选项,所以编译时直接抛出错误。
解决方案:换用支持ARMv8的交叉编译器
下面是一步步的修复步骤:
清理旧工具链(可选)
如果不需要保留旧的ARMv6/7工具链,可以直接删除对应的目录:sudo rm -rf /scratch/rpi-tools/arm-bcm2708/下载兼容ARMv8的交叉编译器
推荐使用ARM官方维护的GNU工具链,或者树莓派官方更新的版本。这里以ARM官方的armhf工具链为例(完美支持ARMv8-A):cd /scratch # 下载工具链包(可根据需求替换为最新版本) wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-arm-linux-gnueabihf.tar.xz # 解压到当前目录 tar -xf gcc-arm-10.3-2021.07-x86_64-arm-linux-gnueabihf.tar.xz更新交叉编译器环境变量
把CROSS_COMPILE指向新的工具链:export CROSS_COMPILE=/scratch/gcc-arm-10.3-2021.07-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-重新编译U-Boot
先清理之前的编译残留,再重新配置编译:# 彻底清理之前的编译文件 sudo make distclean # 重新加载RPi 3的配置 sudo make rpi_3_defconfig # 开始编译,-j后面的数字建议和你的CPU核心数一致,比如-j4 sudo make -j4
额外说明
U-Boot的rpi_3_defconfig默认会启用ARMv8-A的编译参数,而旧的arm-bcm2708工具链没有添加对ARMv8的支持,这就是冲突的核心。换用新工具链后,编译器能识别-march=armv8-a选项,编译就能正常进行了。
内容的提问来源于stack exchange,提问作者asach
相关产品推荐
相关产品推荐

