web-dev-qa-db-fra.com

Comment nettoyer uniquement la cible dans buildroot

J'ai foiré certains fichiers dans les fs cibles. Je voudrais donc le remonter. Mais pas tout reconstruire.

make clean efface simplement toutes les sorties, + le répertoire de construction. Quelle commande doit utiliser pour supprimer uniquement le répertoire cible et tous les fichiers .stamp_some_step associés de manière récursive via output/build/structure, forçant buildroot à réassembler le système de fichiers selon la configuration actuelle, mais pas à reconstruire toutes les bibliothèques et les binaires encore et encore?

9
xakepp35

Buildroot suit la progression de la construction avec .stamp_xxx dans chaque répertoire de construction de package. l'installation cible est en fait la dernière étape de chaque package. Ainsi, la suppression du fichier .stamp_target_installed de chaque répertoire de construction de package entraînerait sa réinstallation sur la cible

Dans la dernière buildroot, vous pouvez simplement faire ce qui suit:

rm -rf output/target
find output/ -name ".stamp_target_installed" |xargs rm -rf 

Dans certains anciens buildroot, il y a quelques autres fichiers en sortie qui suivent la création du répertoire cible avec le squelette. Citant le message de la liste de diffusion , nous pourrions résumer ce qui suit:

Un "rm -rf output/target && make" fonctionne-t-il?

Comme Thomas l'a dit, cela ne fonctionne pas. Mais, certains hacks non officiels existent:

  • retirer build/.root forcera la réinstallation du squelette
  • retirer build/*/.stamp_target_installed forcer la réinstallation de chaque package cible
  • selon votre chaîne d'outils, vous pouvez réinstaller libc et co en supprimant:
    • stamps/ext-toolchain-installed (externe)
    • stamps/ct-ng-toolchain-installed (ctng)
    • target/lib/libc.so.0 (buildroot)

Et puis tout simplement refaire.

Rappelez-vous, il y a des tonnes de raisons pour lesquelles ces conseils pourraient faire de mauvaises choses. La seule façon officielle actuelle de reconstruire la cible est de "nettoyer".

12
Jeff Zheng

Buildroot a des cibles de make spéciales pour nettoyer le répertoire de build pour des packages spécifiques, mais cela ne touche aucun des fichiers installés. Pour citer le manuel d'utilisation :

Lorsqu'un package est supprimé de la configuration, Buildroot ne fait rien de spécial. Il ne supprime pas les fichiers installés par ce package du système de fichiers racine cible ou du sysroot de la chaîne d'outils. Une reconstruction complète est nécessaire pour se débarrasser de ce package. Cependant, en général, vous n'avez pas nécessairement besoin de supprimer ce package pour le moment: vous pouvez attendre la prochaine pause déjeuner pour redémarrer la construction à partir de zéro.

Cela dit, vous pouvez supprimer les fichiers de construction d'un package spécifique en exécutant make <PKG-NAME>-dirclean. Par exemple, si je voulais supprimer les fichiers de construction pour i2c-tools, Je courrais make i2c-tools-dirclean. Le <PKG-NAME>-dirclean la cible exécute simplement un rm -rf sur le output/build/<PKG-NAME> répertoire. Cela ne supprimera pas les fichiers installés de output/target/. Si vous souhaitez supprimer les fichiers de vos rootfs sans une reconstruction complète, c'est bien - vous pouvez simplement aller dans output/target/, rm les fichiers dont vous ne voulez plus, puis exécutez make pour régénérer vos images finales. Assurez-vous que votre configuration Buildroot n'est pas non plus définie pour reconstruire et installer le package que vous essayez de supprimer.

4
John Moon