web-dev-qa-db-ja.com

openwrt buildrootbuild_dirおよびstaging_dir

Openwrtbuildrootのbuild_dirstaging_dirについて混乱しています。それらは何のために使用されますか?

Openwrtにはfeedsがあります。イメージを構築することを想像します。必要なパッケージをmenuconfigで選択し、makeを使用してビルドします。

パッケージはfeedsからフェッチされ、build_dirにコンパイルされますか?

では、staging_dirは何に使用されますか?

23
dudeking

ディレクトリbuild_dirは、すべてのソースアーカイブを解凍し、それらをコンパイルするために使用されます。

ディレクトリstaging_dirは、コンパイルされたすべてのプログラムを「インストール」するために使用され、さらにパッケージをビルドする場合、またはファームウェアイメージを準備する場合に使用できます。

build_dirの下には3つの領域があります。

  • build_dir/Host、ホストコンピューターで実行されるすべてのツールをコンパイルします(OpenWRTは独自のバージョンのsedおよび他の多くのツールをソースから構築します)。この領域は、ホスト上でのみ実行されるプログラムのコンパイルに使用されます。
  • build_dir/toolchain...は、パッケージのビルドに使用されるクロスCコンパイラおよびC標準ライブラリコンポーネントをコンパイルするためのものです。この領域は、ホスト上でのみ実行されるプログラム(クロスCコンパイラーなど)や、リンクされているターゲット上で実行するように設計されたライブラリーをコンパイルするために使用されます。 uClibc、libm、pthreadsなど。
  • build_dir/target...は、ターゲットシステムの実際のパッケージとLinuxカーネルをコンパイルします。

ステージングでは、次の3つの領域もあります。

  • staging_dir/Hostは、ホストツールがインストールされている独自のbin/lib/などを持つミニLinuxルートです。次に、ビルドシステムの残りの部分は、そのPATHの前にこの領域のディレクトリを付けます。
  • staging_dir/toolchain...は、独自のbin/lib/などを持つミニLinuxルートであり、残りのファームウェアのビルドに使用されるクロスCコンパイラが含まれています。実際にそれを使用して、ファームウェアにロードできるOpenWRTの外部の単純なCプログラムをコンパイルできます。 Cコンパイラは次のようになります:staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-uclibc-gcc。 CPUのバージョン、Cライブラリ、およびそれにエンコードされたgccを確認できます。これにより、同じエリアに複数のターゲットを同時に構築できます。
  • staging_dir/target.../root-...には、各ターゲットパッケージの「インストール済み」バージョンが再びbin/lib/で配置されて含まれています。これは実際のルートディレクトリになり、微調整を加えるとファームウェアイメージに圧縮されます。 root-ar71xxのように。 staging_dir/target...には、主にパッケージや開発パッケージなどの生成に使用される他のファイルがいくつかあります。

少し冗長ですが、これを簡潔に説明するのは難しいです。

34
6EQUJ5