我正在使用 Buildroot 为我的嵌入式 Linux 硬件制作映像。主要是我试图加快启动顺序(并降低内存使用量),我成功地尝试了许多技术。
我想做的事:最近我听说要删除目录中的重复文件(例如用符号链接替换这些文件),我想将此方法应用于我的 rootfs
周围环境:使用 Buildroot,我可以拥有许多不同类型的 rootfs 格式(cramfs、cpio、ext2/3/4 等),这些格式是在make
as 1(打包)文件期间创建的(例如rootfs.cpio
:)。现在我真的不知道如何:
- 打开图像
- 删除重复的文件(我知道一般如何删除重复的文件)
- 再次打包 rootfs - 这样我仍然可以使用它来刷新并在我的硬件上执行它
也许根本不可能。我相信至少在使用静态库的时候,很多文件是可以被替换的。
有人有想法吗?
答案1
我无法帮助解决 buildroot 特定的东西(除了说你必须在删除重复项之前安装它或启动它,然后创建一个新的rootfs(从生成的文件系统中删除),但删除重复项是很有可能的。一种简单的方法是find / -type f -exec sha256sum {} + | sort > checksums.txt
,逐行读取生成的文件while read -r checksum path
,将每个校验和与前一个进行比较,然后删除(或硬链接) 重复项。这不会处理奇怪的文件名,例如包含换行符,但这在您的情况下不应该成为问题。
答案2
我不明白静态库是如何加入其中的。静态库是不是使用 Buildroot 存在于目标根文件系统上。
一般来说,Buildroot 会尝试仅安装目标上必需的内容,老实说我怀疑您会在那里找到许多重复的文件。