Yocto 如何简化sysroot本机配方

Yocto 如何简化sysroot本机配方,yocto,Yocto,目录recipe sysroot native占用了2亿多磁盘空间,我发现它存在于每个WORKDIR中,我认为它们都有保存内容。有这么多副本是对磁盘空间的浪费,而且可能会减慢构建时间。它是否可以放在一个固定的位置,并且每个WORKDIR都通过符号链接访问它???如本文所述,recipe sysroot和recipe sysroot native中的文件并不总是副本。Yocto尝试创建指向实际文件的硬链接(即,仅增加文件的引用计数) 因此,recipe sysroot和recipe sysroot

目录recipe sysroot native占用了2亿多磁盘空间,我发现它存在于每个WORKDIR中,我认为它们都有保存内容。有这么多副本是对磁盘空间的浪费,而且可能会减慢构建时间。它是否可以放在一个固定的位置,并且每个WORKDIR都通过符号链接访问它???

如本文所述,
recipe sysroot
recipe sysroot native
中的文件并不总是副本。Yocto尝试创建指向实际文件的硬链接(即,仅增加文件的引用计数)

因此,
recipe sysroot
recipe sysroot native
中的所有文件都是指向磁盘中一个源文件的硬链接。因此,磁盘上没有任何重复的空间被占用

您可以看到
staging.bbclass
的实际实现,它尝试创建硬链接,如果不允许,则创建一个副本

您始终可以使用
ls-i
检查它,以查看文件的引用计数

下面的文字是从yocto mega meanual复制的

第二个阶段介绍了希望使用来自 另一个配方,并通过 取决于变量。配方将有一个do\u prepare\u recipe\u sysroot 任务,并在执行此任务时,创建recipe sysroot和 配方工作目录中的配方系统根本机(即WORKDIR)。这个 OpenEmbedded build system创建指向相关文件副本的硬链接 将sysroot组件中的文件保存到recipe工作目录中

注意:如果无法硬链接,则生成系统使用实际链接 复印件。

如中所述,
recipe sysroot
recipe sysroot native
中的文件并不总是副本。Yocto尝试创建指向实际文件的硬链接(即,仅增加文件的引用计数)

因此,
recipe sysroot
recipe sysroot native
中的所有文件都是指向磁盘中一个源文件的硬链接。因此,磁盘上没有任何重复的空间被占用

您可以看到
staging.bbclass
的实际实现,它尝试创建硬链接,如果不允许,则创建一个副本

您始终可以使用
ls-i
检查它,以查看文件的引用计数

下面的文字是从yocto mega meanual复制的

第二个阶段介绍了希望使用来自 另一个配方,并通过 取决于变量。配方将有一个do\u prepare\u recipe\u sysroot 任务,并在执行此任务时,创建recipe sysroot和 配方工作目录中的配方系统根本机(即WORKDIR)。这个 OpenEmbedded build system创建指向相关文件副本的硬链接 将sysroot组件中的文件保存到recipe工作目录中

注意:如果无法硬链接,则生成系统使用实际链接 复印件。


在您的
conf/local.conf
中添加
INHERIT+=rmu-work
。查看此答案了解更多详细信息,应该是
INHERIT+=“rm_work”
感谢您的回答,但这不是我想要的。我不打算在构建后清理源文件,我希望所有配方共享同一个配方sysroot native,但不要每次都将其复制到WORKDIR。我的项目中有100多个配方,每个WORKDIR中都有100多个配方系统根本机副本,我认为这样做不明智。之前yocto为此使用了公共路径
tmp/sysroot/x86_64
。但这是前一段时间的改变,使用这个配方。假设您有一个依赖于
python native
的配方a,那么yocto会在
recipe sysroot native
中为配方a填充它。同样的情况也适用于
recipe sysroot
。是的,您已经在每个配方中安装了交叉编译器和所有工具链+特定配方。所以这是有理由的。我不确定是否仍然可以实现公共位置。在
conf/local.conf
中添加
INHERIT+=rm\u work
。查看此答案了解更多详细信息,应该是
INHERIT+=“rm_work”
感谢您的回答,但这不是我想要的。我不打算在构建后清理源文件,我希望所有配方共享同一个配方sysroot native,但不要每次都将其复制到WORKDIR。我的项目中有100多个配方,每个WORKDIR中都有100多个配方系统根本机副本,我认为这样做不明智。之前yocto为此使用了公共路径
tmp/sysroot/x86_64
。但这是前一段时间的改变,使用这个配方。假设您有一个依赖于
python native
的配方a,那么yocto会在
recipe sysroot native
中为配方a填充它。同样的情况也适用于
recipe sysroot
。是的,您已经在每个配方中安装了交叉编译器和所有工具链+特定配方。所以这是有理由的。我不确定是否能达到这个共同点。