无法使用 armv8-rpi4-linux-gnueabihf-gcc 编译 u-boot
Cannot compile u-boot with armv8-rpi4-linux-gnueabihf-gcc
我在尝试为 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
和 arch64-rpi4-linux-gnu
.
要列出可能的配置,请在 ng-crosstool
目录中键入以下内容。输出将显示常用系统的所有可能配置。
bin/ct-ng list-samples
正确的配置是带有 arch64-
前缀的配置。如果您使用该选项生成工具链,问题将得到解决。
特别感谢 @NateEldredge、@TomRini 和来自 Linux 土耳其社区的一个人给我一些线索:)
我在尝试为 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
和 arch64-rpi4-linux-gnu
.
要列出可能的配置,请在 ng-crosstool
目录中键入以下内容。输出将显示常用系统的所有可能配置。
bin/ct-ng list-samples
正确的配置是带有 arch64-
前缀的配置。如果您使用该选项生成工具链,问题将得到解决。
特别感谢 @NateEldredge、@TomRini 和来自 Linux 土耳其社区的一个人给我一些线索:)