【问题标题】:Will using aarch64-none instead of aarch64-elf yield any benefit in Bare Metal?使用 aarch64-none 代替 aarch64-elf 会在 Bare Metal 中产生任何好处吗?
【发布时间】:2018-04-10 23:16:14
【问题描述】:

我正在关注Rpi 3 bare metal 教程。我已经使用 Dave Welche 的优秀 repo 和其他资源在 Rpi A+ 和 Zero 的裸机上花费了大量时间。

这个 Rpi 3 教程的伟大之处在于

1) it's 64 bit
2) it's multi core 

根据我的表面理解,我知道aarch64-elf 将构建一个“二进制”,该“二进制”可由使用 ELF 文件格式的操作系统加载,例如任何基于 Unix 的(Linux、OSX)。

aarch64-none 用于裸机,这意味着它不会在生成的二进制文件中创建任何操作系统加载程序信息。

令人困惑的是Rpi 3 tutorial 将他们的工具链构建为aarch64-elf

如果您查看 make 文件的 line 40,他最终仍然会执行 objcopy,我认为无论如何都会删除任何与 ELF 相关的信息,对吗?

所以我的问题是:在每个示例中将他们的 Makefile 更改为 aarch64-none 是否值得?不幸的是,他们也没有做好将其作为参数的工作!

在裸机中到aarch64-none 有什么额外的好处吗?无论如何,我仍然必须使用objcopy,对吗?

【问题讨论】:

  • 对于相同的输入,两者产生的输出应该没有区别。

标签: cross-compiling raspberry-pi3 arm64 bare-metal


【解决方案1】:

我正在以不同的顺序回答您的问题,因为有些答案对其他答案有直接影响。

1) 我仍然需要做 objcopy?
是的。
2) 在裸机到 aarch64-none 时有什么额外的好处吗?
没有我会知道的。例如,ARM Trusted Firmware 和 u-boot 可以使用 aarch64-elf 进行正常编译。
3) 在每个示例中将其 Makefile 更改为 aarch64-none 是否值得? 我会说不是。我宁愿建议从here 下载并安装 Linaro aarch64-elf 工具链:
如果您的编译系统运行的是 32 位版本的 Linux,请下载 gcc-linaro-7.2.1-2017.11-i686_aarch64-elf.tar.xz,如果运行的是 64 位版本,请下载 gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf.tar.xz

安装过程(x86_64 Linux):

mkdir -p /opt/linaro
wget https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-elf/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf.tar.xz
tar Jxf gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf.tar.xz -C /opt/linaro
export PATH=/opt/linaro/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf/bin:$PATH

aarch64-elf-gcc  --version
aarch64-elf-gcc (Linaro GCC 7.2-2017.11) 7.2.1 20171011
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2016-05-05
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多