如何解决无法使用 armv8-rpi4-linux-gnueabihf-gcc 编译 u-boot
我在尝试为 Raspberry Pi 4 构建 u-boot 时遇到问题。我使用的交叉编译工具是armv8-rpi4-linux-gnueabihf-gcc。我通过使用 ng-crosstool 自动工具链生成器来获得它。我遵循的步骤如下。
首先,在 u-boot 目录中,我声明了 CROSS_COMPILE
和 ARCH
环境变量,同时更改了 PATH
还有:
export CROSS_COMPILE=armv8-rpi4-linux-gnueabihf-
export ARCH=arm
export PATH=/home/caglayan/x-tools/armv8-rpi4-linux-gnueabihf/bin:$PATH
其次,我使用名为 rpi_4_defconfig
的板特定配置文件调用构建过程。
make rpi_4_defconfig
make
不幸的是,构建过程失败了。以下是该过程的简化终端输出。
scripts/kconfig/conf --syncconfig Kconfig
CFG u-boot.cfg
cc1: warning: unknown register name: x18
GEN include/autoconf.mk
GEN include/autoconf.mk.dep
cc1: warning: unknown register name: x18
CFGCHK u-boot.cfg
UPD include/generated/timestamp_autogenerated.h
CC lib/asm-offsets.s
cc1: warning: unknown register name: x18
CC arch/arm/lib/asm-offsets.s
cc1: warning: unknown register name: x18
............. *(Redundant lines removed intentionally.)*
CC arch/arm/cpu/armv8/cpu.o
cc1: warning: unknown register name: x18
{standard input}: Assembler messages:
{standard input}:36: Error: unexpected character `n' in type specifier
{standard input}:36: Error: bad instruction `b.ne 1b'
make[1]: *** [scripts/Makefile.build:266: arch/arm/cpu/armv8/cpu.o] Error 1
make: *** [Makefile:1784: arch/arm/cpu/armv8] Error 2
你认为我做错了什么?我应该如何继续寻找合适的解决方案?
解决方法
你的编译器有问题。请为您的发行版中的 aarch64 使用标准的,或使用 tools/buildman/buildman
从 kernel.org 为您下载工具链。
与您的问题无关,在 U-Boot 中设置 ARCH=arm
不是必需的,在某些情况下可能是有害的。然而,在这种情况下,它不是罪魁祸首,因为您的工具链在应该和必须的时候没有将 -ffixed-x18
视为有效。
问题是由生成的工具链引起的。 ng-crosstool 工具链生成器在生成您需要的正确工具链时有许多选项。如果您在调用 ng-crosstool 之前列出配置选项,您将看到 Raspberry Pi 4 开发板有两个选项:armv8-rpi4-linux-gnueabihf
和 {{ 1}}。
要列出可能的配置,请在您的 arch64-rpi4-linux-gnu
目录中键入以下内容。输出将显示常用系统的所有可能配置。
ng-crosstool
正确的配置是带有 bin/ct-ng list-samples
前缀的配置。如果您使用该选项生成工具链,则问题将得到解决。
特别感谢 @NateEldredge、@TomRini 和 Linux 土耳其社区的一个人给我一些线索 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。