我搞砸了目标fs中的一些文件。所以我想重新组装它。但不是重建所有。
make clean
只删除所有输出,+ build目录。
应该使用什么命令通过输出/构建/结构递归删除目标目录和所有相关的.stamp_some_step文件,强制buildroot根据当前配置重新组装文件系统,但不能一次又一次地重建所有库和二进制文件?
答案 0 :(得分:11)
Buildroot跟踪每个包构建目录中.stamp_xxx的构建进度。 目标安装实际上是每个包的最后一个阶段。因此,从每个包构建目录中删除.stamp_target_installed文件将导致它重新安装到目标
在最新的buildroot中,您只需执行以下操作:
rm -rf output/target
find output/ -name ".stamp_target_installed" |xargs rm -rf
在一些较旧的buildroot中,输出中还有一些其他文件跟踪使用骨架创建目标目录。引用mailing list message,我们可以总结如下:
“rm -rf输出/目标&& make”是否有效?
正如托马斯所说,它不起作用。但是,存在一些非官方的黑客攻击:
- 删除build / .root将强制重新安装骨架
- 删除build / * /。stamp_target_installed强制重新安装每个目标包
- 取决于您的工具链,您可以通过删除以下内容重新安装libc和co:
- stamps / ext-toolchain-installed(external)
- stamps / ct-ng-toolchain-installed(ctng)
- target / lib / libc.so.0(buildroot)
然后再做一次。
提醒一下,这些提示可能做错事的原因很多。唯一的 目前重建目标的官方方式是“干净利落”。
答案 1 :(得分:4)
Buildroot有特殊的make目标来清理特定包的构建目录,但是这不会触及任何已安装的文件。引用user manual:
从配置中删除包时,Buildroot不会 做任何特别的事。它不会删除由此安装的文件 来自目标根文件系统或工具链sysroot的包。 需要完全重建才能摆脱这个包。然而, 通常,您不一定需要正确删除此包 现在:您可以等待下一个午休时间重新开始构建 划伤。
也就是说,您可以通过运行make <PKG-NAME>-dirclean
来删除特定包的构建文件。例如,如果我想删除i2c-tools
的构建文件,我会运行make i2c-tools-dirclean
。 <PKG-NAME>-dirclean
目标只在rm -rf
目录上运行output/build/<PKG-NAME>
。这不会从output/target/
中删除已安装的文件。如果你想在没有完全重建的情况下从rootfs中删除文件,那很好 - 你可以进入output/target/
,rm
你不再需要的文件,然后运行make
来重新生成你的最终影像。确保您的Buildroot配置也未设置为重建并安装您要删除的软件包。