如何简化recipe-sysroot-native

xia*_*iao 3 yocto

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

Par*_*ban 6

正如staging.bbclass中提到的,recipe-sysroot和中的文件recipe-sysroot-native并不总是副本。Yocto 尝试创建到实际文件的硬链接(即仅增加文件的引用计数)。

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

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

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

下面的文字是从 yocto megameanal 复制的,

第二阶段解决想要使用另一个配方中的某些内容的配方,并通过 DEPENDS 变量声明对该配方的依赖关系。该配方将有一个 do_prepare_recipe_sysroot 任务,当该任务执行时,它会在配方工作目录(即 WORKDIR)中创建配方-sysroot 和配方-sysroot-native。OpenEmbedded 构建系统创建硬链接,将相关文件的副本从 sysroots-components 复制到配方工作目录中。

注意:如果无法进行硬链接,则构建系统将使用实际副本。