【问题标题】:Selecting a specific ARM arch for compiling选择特定的 ARM 架构进行编译
【发布时间】:2021-08-26 07:45:11
【问题描述】:

我是嵌入式 linux 的新手,刚刚开始为 raspberry 4 板构建自定义内核。有几个关于如何为特定板编译 linux 内核的教程。据我了解,我可以指定 cpu 类型和工具链作为参数来使用 ARCH 和 CROSS_COMPILE 创建命令,但我想知道编译器如何识别我想要获取内核映像的特定 ARM 架构(ARMv7、ARMv8 等)。

【问题讨论】:

  • 编译器默认使用一组基本的 ARM 指令,这可以使生成的图像具有可移植性。 gcc 的 Linux man 页面提到 -march=-mtune=-mcpu= 作为可以指定/调整生成指令的选项。请参阅stackoverflow.com/questions/40442218/… 您还可以为特定的子架构和/或处理器类型自定义构建工具链,以确保项目的所有代码都以所需的优化一致地编译。
  • 编译器不知道你的产品需要什么架构,你必须告诉它。如果问题是编译器如何知道为特定架构生成什么代码,那么该信息就在编译器代码本身中。

标签: types arm cpu embedded-linux


【解决方案1】:

由于 Armv7a 和 Armv8a 架构使用不同/不兼容的指令集,您将使用的编译器将特定于 Armv7a/Armv8a 架构之一。

因此它不需要“知道”它为哪个架构编译内核,因为它别无选择。

您的“make”命令必须以下列语句之一开头:

# Armv7a/Aarch32/32 bit Arm Linux kernel
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf-  ... 

# Armv8a/Aarch64/64 bit Arm Linux kernel
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu-  ...

ARCH/CROSS_COMPILE 的所有不同组合都不起作用。

请注意,工具链的确切名称可能略有不同 - 我使用 Arm toolchains 三元组来回答此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2010-10-04
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多