当我们已经有 CROSS_COMPILE= 时为啥还要有 ARCH=
Posted
技术标签:
【中文标题】当我们已经有 CROSS_COMPILE= 时为啥还要有 ARCH=【英文标题】:Why having the ARCH= when we already have CROSS_COMPILE=当我们已经有 CROSS_COMPILE= 时为什么还要有 ARCH= 【发布时间】:2022-01-16 12:43:09 【问题描述】:这个问题对你们中的一些人来说可能听起来很明显,但对我来说,它似乎是我理解图片所需的缺失部分。
编辑:具体来说,我在我的 PC 上使用 Ubuntu VM,试图构建一个应该在 BeagleBone Black 上运行的 Out-of-Tree 内核模块,
在make命令中我通常需要输入以下2个参数:
-
ARCH=
CROSS_COMPILE=
对我来说,“1”看起来像是多余的信息,只会增加 make 命令的复杂性。
当然,同时使用它们是有充分理由的,我尝试在许多论坛和网站中进行搜索,但找不到“傻瓜答案” - 我想这就是我正在寻找的.
所以 - 我的问题:指定 CROSS_COMPILE= 不足以构建源代码吗?举个例子:
arm-linux-gnueabihf- aarch64-none-elf- arm-none-linux-gnueabihf在上述所有选项中,我们都有目标 CPU 架构,即 arm 或 aarch64(也是 arm64)。
那么,如果架构已经包含在 CROSS_COMPILE= 指令中,为什么我们还需要一个特定的指令,例如 ARCH=?
【问题讨论】:
ARCH
通常用于选择必须构建的项目部分,这取决于目标架构。 CROSS_COMPILE
一般用于选择特定的交叉编译器。如果您使用名为 ccSuper7
的自定义交叉编译器,构建系统如何猜测您的目标架构是 ARM?
【参考方案1】:
CROSS_COMPILE 是不够的。虽然 ARCH 可能主要来源于它, 不能保证机械提取规则会起作用 正确地为其所有未来的价值。没有要求 CROSS_COMPILE 应该以 ARCH 开头,这只是一个约定。
从 Cross-compiling the kernel, 看到它们根本不一样:
CPU 架构和交叉编译器前缀是通过 顶层 Makefile 中的 ARCH 和 CROSS_COMPILE 变量。
ARCH 是架构的名称。 它由内核源代码中 arch/ 中的子目录的名称定义 示例:如果你武装 想为 arm 架构编译内核。 CROSS_COMPILE 是交叉编译工具的前缀 示例:arm-linux- 如果你的编译器是 arm-linux-gcc
【讨论】:
以上是关于当我们已经有 CROSS_COMPILE= 时为啥还要有 ARCH=的主要内容,如果未能解决你的问题,请参考以下文章