Build 当我构建raspberrypi时,为什么yocto要构建x86系统根?

Build 当我构建raspberrypi时,为什么yocto要构建x86系统根?,build,raspberry-pi,yocto,Build,Raspberry Pi,Yocto,我通过Yocto制作了树莓最小图像。 我只是按照下面文章中的说明进行操作 它为树莓和rpi系统根创建了一个合适的映像。但是,它也会生成x86_64系统根。如果不创建这些,构建时间将更短 为什么在生成ARM映像时生成x86_64二进制文件 $ ls build/tmp/sysroots raspberrypi raspberrypi-tcbootstrap x86_64-linux $ ls x86_64-linux/ bin etc lib sbin usr var $ fi

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

它为树莓和rpi系统根创建了一个合适的映像。但是,它也会生成x86_64系统根。如果不创建这些,构建时间将更短

为什么在生成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/
目录中看到的所有内容)。 因此,并不是您为raspberry映像本地构建选择的所有包,而是Yocto交叉编译所需的包

此外,Yocto仅在检测到包中的更改时才构建包。 因此,您只会“丢失”自上次生成以来尚未生成或更改的包的生成时间

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


[1]

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

此外,Yocto仅在检测到包中的更改时才构建包。 因此,您只会“丢失”自上次生成以来尚未生成或更改的包的生成时间

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

[1]