Openwrtbuildrootのbuild_dir
とstaging_dir
について混乱しています。それらは何のために使用されますか?
Openwrtにはfeeds
があります。イメージを構築することを想像します。必要なパッケージをmenuconfig
で選択し、make
を使用してビルドします。
パッケージはfeeds
からフェッチされ、build_dir
にコンパイルされますか?
では、staging_dir
は何に使用されますか?
ディレクトリ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...
には、主にパッケージや開発パッケージなどの生成に使用される他のファイルがいくつかあります。少し冗長ですが、これを簡潔に説明するのは難しいです。