为什么在我构建 raspberrypi 时 yocto 构建 x86 sysroots?

Why yocto build x86 sysroots when I build raspberrypi?

我通过Yocto制作了RaspberryPi最小镜像。 我只是按照下面文章中的说明进行操作。

http://www.cnx-software.com/2013/07/05/12mb-minimal-image-for-raspberry-pi-using-the-yocto-project/

它为 RaspberryPi 和 rpi sysroots 制作了一个合适的映像。但是,它也使 x86_64 成为 sysroot。如果不创建这些,构建时间会更短。

为什么在生成 ARM 映像时生成 x86_64 个二进制文件?

$ ls build/tmp/sysroots
raspberrypi  raspberrypi-tcbootstrap  x86_64-linux

$ ls x86_64-linux/
bin  etc  lib  sbin  usr  var

$ find -name sysroots
./build/tmp/work/armv6-vfp-poky-linux-gnueabi/binutils-cross/.../sysroots
...
./build/tmp/work/x86_64-linux/m4-native/.../sysroots
./build/tmp/work/x86_64-linux/gnu-config-native/.../tmp/sysroots
...
./build/tmp/work/x86_64-linux/sqlite3-native/.../sysroots
...
./build/tmp/work/x86_64-linux/openssl-native/.../sysroots
...

如您所见,为 x86_64 架构构建的所有软件包都以 -native 结尾。其他包需要这些本机包进行交叉编译。例如,您需要 x86_64 上的本机编译器来构建交叉编译器。这个交叉编译器还必须是原生的,才能为您的目标编译二进制文件。一些库和工具也是如此(您在 build/tmp/work/x86_64-linux/ 目录中看到的所有内容)。 因此,并非您为原生构建的树莓派镜像选择了所有包,而只有 Yocto 交叉编译所需的包。

此外,Yocto 仅在检测到包发生变化时才构建包。 因此,您 "lose" 构建时间仅适用于尚未构建或自上次构建以来未更改的包。

有关此主题的更多信息,请查看 Yocto 交叉工具链生成的功能原理 [1]。

[1] https://www.yoctoproject.org/docs/latest/mega-manual/mega-manual.html#cross-development-toolchain-generation