web-dev-qa-db-ja.com

buildrootでターゲットのみをクリーンアップする方法

ターゲットfsのいくつかのファイルをめちゃくちゃにしました。だから私はそれを再組み立てしたいと思います。しかし、すべてを再構築するわけではありません。

make cleanは、すべての出力を削除するだけです+ビルドディレクトリ。ターゲットディレクトリと関連するすべての.stamp_some_stepファイルのみをoutput/build /構造を介して再帰的に削除し、buildrootに現在の構成に従ってファイルシステムを再構築させ、すべてのライブラリとバイナリを何度も再構築しないようにするには、どのコマンドを使用する必要がありますか?

9
xakepp35

Buildrootは、各パッケージビルドディレクトリの.stamp_xxxでビルドの進捗状況を追跡します。ターゲットインストールは、実際には各パッケージの最終段階です。したがって、各パッケージビルドディレクトリから.stamp_target_installedファイルを削除すると、ターゲットに再インストールされます。

最新のビルドルートでは、次のことを簡単に実行できます。

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

一部の古いビルドルートでは、スケルトンを使用したターゲットディレクトリの作成を追跡する出力に他のファイルがいくつかあります。 メーリングリストメッセージ を引用すると、次のように要約できます。

「rm -rf output/target && make」は機能しますか?

トーマスが言ったように、それは機能しません。しかし、いくつかの非公式なハックが存在します:

  • 削除する build/.rootスケルトンの再インストールを強制します
  • 削除する build/*/.stamp_target_installed各ターゲットパッケージを強制的に再インストールします
  • ツールチェーンによっては、以下を削除することでlibcとcoを再インストールできます:
    • stamps/ext-toolchain-installed(外部)
    • stamps/ct-ng-toolchain-installed(ctng)
    • target/lib/libc.so.0(buildroot)

そして、単にもう一度作り直します。

これらのヒントが間違った動作をする理由はたくさんあります。現在、ターゲットを再構築する唯一の公式な方法は、「クリーンにする」ことです。

12
Jeff Zheng

Buildrootには、特定のパッケージのビルドディレクトリを整理するための特別なmakeターゲットがありますが、これはインストールされたファイルには影響しません。 ユーザーマニュアル を引用するには:

パッケージが構成から削除されると、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 configが、削除しようとしているパッケージを再ビルドしてインストールするように設定されていないことも確認してください。

4
John Moon