ターゲットfsのいくつかのファイルをめちゃくちゃにしました。だから私はそれを再組み立てしたいと思います。しかし、すべてを再構築するわけではありません。
make clean
は、すべての出力を削除するだけです+ビルドディレクトリ。ターゲットディレクトリと関連するすべての.stamp_some_stepファイルのみをoutput/build /構造を介して再帰的に削除し、buildrootに現在の構成に従ってファイルシステムを再構築させ、すべてのライブラリとバイナリを何度も再構築しないようにするには、どのコマンドを使用する必要がありますか?
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)そして、単にもう一度作り直します。
これらのヒントが間違った動作をする理由はたくさんあります。現在、ターゲットを再構築する唯一の公式な方法は、「クリーンにする」ことです。
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が、削除しようとしているパッケージを再ビルドしてインストールするように設定されていないことも確認してください。