为什么在我构建 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]。
我通过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]。