如何清理buildroot中的目标

xak*_*p35 9 linux makefile buildroot

我搞砸了目标fs中的一些文件.所以我想重新组装它.但不是全部重建.

make clean只删除所有输出,+构建目录.应该使用什么命令通过输出/构建/结构递归地删除目标目录和所有相关的.stamp_some_step文件,强制buildroot根据当前配置重新组装文件系统,但不能一次又一次地重建所有库和二进制文件?

小智 12

Buildroot跟踪每个包构建目录中.stamp_xxx的构建进度.目标安装实际上是每个包的最后一个阶段.因此,从每个包构建目录中删除.stamp_target_installed文件将导致它重新安装到目标

在最新的buildroot中,您可以简单地执行以下操作:

rm -rf output/target
find output/ -name ".stamp_target_installed" |xargs rm -rf 
Run Code Online (Sandbox Code Playgroud)

在一些较旧的buildroot中,输出中还有一些其他文件跟踪使用骨架创建目标目录.引用邮件列表消息,我们可以总结如下:

"rm -rf输出/目标&&制作"是否有效?

正如托马斯所说,它不起作用.但是,存在一些非正式的黑客攻击:

  • remove build/.root将强制重新安装骨架
  • remove build/*/.stamp_target_installed force重新安装每个目标包
  • 根据您的工具链,您可以通过删除重新安装libc和co:
    • 邮票/ ext-toolchain-installed(外部)
    • stamps/ct-ng-toolchain-installed(ctng)
    • target/lib/libc.so.0(buildroot)

然后再做一次.

提醒一下,有很多原因这些提示可能会做错事.目前唯一重建目标的官方方式是"​​干净利落".

  • 为什么 buildroot 本身没有这样的默认功能,比如用您刚刚提供的命令实现 `make cleantarget` 命令? (2认同)
  • 这似乎不适用于 Buildroot 2020.02。具体来说,即使删除 libc.so 之后,我也无法重新安装工具链 (2认同)

小智 6

Buildroot 有特殊的 make 目标来清理特定包的构建目录,但这不会触及任何已安装的文件。引用用户手册

\n\n
\n

当从配置中删除包时,Buildroot 不会执行任何特殊操作。它不会从目标根文件系统或工具链 sysroot 中删除此软件包安装的文件。\n 需要完全重建才能删除此软件包。但是,通常您不一定需要立即删除此软件包:您可以等待下一个午休时间从头开始重新构建。

\n
\n\n

也就是说,您可以通过运行来删除特定包的构建文件make <PKG-NAME>-dirclean。例如,如果我想删除 的构建文件i2c-tools,我会运行make i2c-tools-dirclean. 目标只是在目录上<PKG-NAME>-dirclean运行。这不会从 中删除已安装的文件。如果您想在不完全重建的情况下从 rootfs 中删除文件,那没问题 - 您只需进入不再需要的文件,然后运行即可重新生成最终映像。确保您的 Buildroot 配置也未设置为重建并安装您尝试删除的软件包。rm -rfoutput/build/<PKG-NAME>output/target/output/target/rmmake

\n