如何清理buildroot中的目标

时间:2017-11-16 02:56:19

标签: linux makefile buildroot

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

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

2 个答案:

答案 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配置也未设置为重建并安装您要删除的软件包。