最近开始学习i.mx6ull开发,在ubuntu中安装了最新版的交叉编译工具,arm-linux-gnueabihf-gcc的版本是13.3.0。
在编译正点原子提供的u-boot源码时,一直提示“arm-linux-gnueabihf-gcc: error: unrecognized -march target: armv5”,导致编译不通过。
经过各种询问deepseek,外加运气成分,将u-boot源文件/arch/arm/Makefile文件中第19行
“arch-$(CONFIG_CPU_V7) =$(call cc-option, -march=armv7-a, -march=armv5)”
修改为
“arch-$(CONFIG_CPU_V7) =$(call cc-option, -march=armv7-a)”
就可以编译成功了。
询问deepseek后,deepseek的解释是,原本这行指令的作用是:
尝试用 -march=armv7-a 编译,如果失败则回退到 -march=armv5。 新版 GCC 移除了对 -march=armv5 的支持,导致回退时直接报错(即使 -march=armv7-a 本可正常工作)。 i.MX6ULL 是 Cortex-A7,属于 ARMv7 架构,因此 -march=armv7-a 或 -march=armv7ve 才是正确的选项。
在此基础上,我把原本的
“arch-$(CONFIG_CPU_V7) =$(call cc-option, -march=armv7-a, -march=armv5)”,
改成了
“arch-$(CONFIG_CPU_V7) =$(call cc-option, -march=armv7-a, -march=armv7ve)”,
测试之后,能正常编译。
后续再测试使用新编译器编译出的u-boot.imx下载到开发板后会不会有问题。
|