【问题标题】:openwrt buildroot build_dir and staging_diropenwrt buildroot build_dir 和 staging_dir
【发布时间】:2014-09-25 04:41:40
【问题描述】:

我对 openwrt buildroot 中的 build_dirstaging_dir 感到困惑。 它们是用来做什么的?

openwrt 中有feeds。我会想象建立一个形象。您将在menuconfig 中选择您想要的包并使用make 来构建它。

feeds获取包,然后编译成build_dir

那么staging_dir是干什么用的?

【问题讨论】:

  • 非常好的问题和答案。 +1

标签: openwrt


【解决方案1】:

目录build_dir 用于解压所有源文件并进行编译。

目录staging_dir 用于“安装”所有已编译的程序,以便用于构建进一步的软件包或准备固件映像。

build_dir下面有三个区域:

  • build_dir/host,用于编译在主机上运行的所有工具(OpenWRT 构建自己的 sed 版本和许多其他源代码工具)。该区域将用于编译仅在您的主机上运行的程序。
  • build_dir/toolchain... 用于编译将用于构建包的跨 C 编译器和 C 标准库组件。该区域将用于编译仅在您的主机上运行的程序(例如,交叉 C 编译器)以及旨在在链接到的目标上运行的库 - 例如。 uClibc、libm、pthread 等。
  • build_dir/target... 用于为目标系统编译实际包和 Linux 内核

在staging下,还有三个方面:

  • staging_dir/host 是一个迷你 Linux 根目录,有自己的bin/lib/ 等主机工具安装到其中;然后构建系统的其余部分在其 PATH 中添加该区域中的目录作为前缀
  • staging_dir/toolchain... 是一个迷你 Linux 根目录,拥有自己的 bin/lib/ 等,其中包含用于构建其余固件的交叉 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-ar71xxstaging_dir/target...中还有一些其他文件,主要用于生成包和开发包等。

对不起,有点冗长,这很难更简洁地描述。

【讨论】:

  • 为每种类型的路径提及相应的 Makefile 变量将非常有用。谢谢
  • 感谢您的解释。如果您不介意我只是将您的答案复制到 OpenWrt Wiki openwrt.org/docs/guide-developer/build-system/… 这可能侵犯了您的版权,所以请恢复或编辑我的更改
  • @SergeyPonomarev 我不介意,但请注明/链接回这个答案...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
相关资源
最近更新 更多