【问题标题】:Determine machine architecture reliably in a BitBake recipe在 BitBake 配方中可靠地确定机器架构
【发布时间】:2021-09-23 16:08:42
【问题描述】:

我正在为需要了解底层机器微架构的软件包编写配方。换句话说,对于 64 位 Arm 系统,我想要一个字符串,例如 aarch64arm64,对于 64 位 Intel 系统,我想要一个字符串,例如 x86_64

到目前为止,我已经确定:

  • MACHINE - 这似乎是meta-* 层作者决定命名他们的机器并且可能包含架构,它可能不包含。例如,beaglebone 是没有用的。

  • MACHINE_ARCH - 这似乎与我要找的很接近。但是,以this BSP 层为例,快速搜索一下,似乎没有在任何地方设置这个变量。只能从几个包中读取。

  • TUNE_PKGARCH - 可能是迄今为止最好的选择。但是,这个变量是什么格式的?使用了哪些架构命名约定?同样,前面提到的 BSP 层似乎也没有在任何地方设置它。

我本以为以明确定义的格式了解机器架构很重要,但似乎并不那么简单。有什么建议吗?

【问题讨论】:

  • DEFAULTTUNE 也许?

标签: yocto bitbake yocto-recipe


【解决方案1】:

我习惯于使用uname -m 执行此操作(Windows 粉丝可以使用SET processor 的输出),所以对于 Yocto 中的我来说,这最终是一个折腾:

  1. 根据 TARGET_ARCH 的 Mega-Manual 条目:
TARGET_ARCH

The target machine's architecture. The OpenEmbedded build system supports many
architectures. Here is an example list of architectures supported. This list is by
no means complete as the architecture is configurable:

     arm
     i586
     x86_64
     powerpc
     powerpc64
     mips
     mipsel

uname -m 会好一些,因为您还可以获得子架构信息。从我目前可以访问的机器:

Intel-based Nuc build system:  x86_64
ARM embedded system:           armv7l
Raspberry Pi 4B:               aarch64
  1. 我发现 GNU automake(本机)和 libtool(可用于目标)包计算一个名为 UNAME_MACHINE_ARCH 的有用变量。如果您已经在使用libtool 或愿意接受它只是为了为您完成此操作:-@),您可以通过这种方式解决。在构建的树中查找名为 config.guess 的文件。

  2. 通过使用 Yocto BUILD_ARCH,您可能比 libtool 更通用:

BUILD_ARCH

Specifies the architecture of the build host (e.g. i686). The OpenEmbedded build
system sets the value of BUILD_ARCH from the machine name reported by the uname
command.

因此,请根据您的项目情况自行选择。

【讨论】:

  • TARGET_ARCH/TUNE_ARCH 似乎是我想要的。很高兴也有其他选择。
猜你喜欢
  • 2010-10-25
  • 2011-02-06
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 2014-07-06
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多