有没有办法 运行 在 yocto 生成的文件系统上进行存储统计?

is there a way to run storage statistics on a yocto-produced filesystem?

我使用 Yocto 构建了一个文件系统,使用了 core-image-minimal 的 .bbappend。两个问题:

  1. 我如何找出哪个包在 rootfs 上占用了巨大的存储空间space?

    除了查看每个包的 ${D} 并查看其组件有多大之外,我想不出其他方法。必须有一种更系统、更智能的方法来做到这一点。

根据我从清单中可以破译的内容,没有任何内容与所包含的包的大小有关。

此外,删除我使用 IMAGE_INSTALL 对象添加的一些包,似乎删除了包,但构建图像的最终结果并未显示其大小发生变化!!

  1. 我比较了构建机器和安装设备(虚拟机)上特定 .so 的大小,发现安装设备上的大小是构建机器上原始大小的 20-30% .有什么解释吗?

谢谢!

1) 一种方法是启用构建历史,方法是将以下内容添加到 local.con

INHERIT += "buildhistory"
BUILDHISTORY_COMMIT = "1"

这将在您的 $BUILDDIR 中创建目录(git 存储库)buildhistory。在那里你可以找到例如

images/$MACHINE/eglibc/$IMAGE/installed-package-sizes.txt

该文件将为您提供所有已安装软件包的大小。

您可以从 buildhistory 中学到很多东西,请参阅 buildhistory introduction

2) 您在哪里比较特定的 .so 文件?如果它来自包的 ${B}(即构建库的位置),这并不奇怪,因为安装的 .so 文件将被删除。调试信息安装到 -deb.rpm(因为调试信息通常在目标上没有用,较小的尺寸更重要)。

在 scripts/ 子目录内部进行一些查看,并在谷歌上搜索一些现有的脚本,事实证明,Yocto 的好人确实让这些脚本开箱即用: scripts/tiny/dirsize.py 和 ksize.py.

dirsize.py 将为您提供 rootfs 的 pkg 大小明细;而 ksize.py 将为您提供内核的等效信息。