3

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

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

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

从我可以从清单中破译的内容来看,与包含的包的大小无关。

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

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

谢谢!

4

2 回答 2

6

1) 一种方法是启用 b​​uildhistory,将以下内容添加到 local.con

INHERIT += "buildhistory"
BUILDHISTORY_COMMIT = "1"

这将在 $BUILDDIR 中创建一个目录 (git repo) buildhistory。在那里你可以找到例如

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

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

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

2)您在哪里比较了特定的 .so 文件?如果它来自包的 ${B} (即构建库的位置),那就不足为奇了,因为安装的 .so 文件将被剥离。调试信息安装在 -deb.rpm 中(因为调试信息通常在目标上无用,并且较小的大小具有更高的重要性)。

于 2015-01-27T08:03:03.113 回答
0

通过查看 scripts/ subdir 并在谷歌上搜索一些现有脚本,事实证明 Yocto 的好人确实让这些脚本开箱即用地正常运行:scripts/tiny/dirsize.py 和 ksize.py。

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

于 2015-01-27T19:10:41.833 回答