我对 openwrt buildroot 中的 build_dir
和 staging_dir
感到困惑。
它们有什么用?
openwrt中有feeds
。我想建立一个形象。您将在 menuconfig
中选择所需的包并使用 make
来构建它。
从 feeds
获取包,然后编译到 build_dir
中?
那么staging_dir
有什么用呢?
最佳答案
目录build_dir
用于解压所有源文件并编译它们。
目录staging_dir
用于“安装”所有已编译的程序,准备用于构建进一步的软件包或准备固件镜像。
build_dir
下有三个区域:
build_dir/host
,用于编译在主机上运行的所有工具(OpenWRT 从源代码构建自己的sed
版本和许多其他工具)。该区域将用于编译仅在您的主机上运行的程序。build_dir/toolchain...
用于编译将用于构建包的跨 C 编译器和 C 标准库组件。该区域将用于编译仅在您的主机上运行的程序(例如,交叉 C 编译器),以及设计用于在链接到的目标上运行的库 - 例如uClibc、libm、pthreads 等build_dir/target...
用于为目标系统编译实际的软件包和 Linux 内核
在暂存阶段,还包括三个区域:
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-ar71xx
。staging_dir/target...
中还有一些其他文件,主要用于生成包、开发包等。
抱歉,有点冗长,很难更简洁地描述。
关于openwrt buildroot build_dir 和 staging_dir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26030670/