转载请注明原文链接:https://blog.youkuaiyun.com/haimo_free/article/details/107677667
文章目录
14. Buildroot是如何工作的
综上所述,Buildroot基本上就是一组Makefile,可以使用正确的选项下载、配置和编译软件。它还包括各种软件包补丁-主要是交叉编译工具链的那些(gcc、binutils和uClibc)。
每个软件包基本上只要一个Makefile,并且以.mk扩展名命名。Makefile分为许多不同的部分:
- toolchain/ 目录包含与交叉编译工具链有关的所有软件包的Makefiles文件和其他文件:binutils、gcc、gdb、kernel-headers和uClibc。
- arch/ 目录包含Buildroot支持的所有处理器体系结构的定义。
- package/ 目录包含Buildroot可以编译并添加到目标根文件系统的所有用户空间的工具和库的Makefiles和相关文件,每个软件包都有一个子目录。
- linux/ 目录包含Linux内核的Makefiles和相关文件。
- boot/ 目录包含Buildroot支持的引导加载程序的Makefiles和相关文件。
- system/ 目录包含对系统集成的支持,例如目标文件系统框架和初始化系统。
- fs/ 目录包含生成目标根文件系统镜像相关的Makefiles和相关文件。
每个软件包子目录至少包含两个文件:
- something.mk 是下载、配置、编译和安装something软件包的Makefile文件。
- Config.in 是配置描述工具的一部分,它描述了软件包有关的选项。
主Makefile执行以下步骤(一旦完成配置):
- 创建所有的输出目录:在输出目录下(默认为output/,可以使用O=选项指定)创建staging、target、build等。
- 构建目标工具链。当使用内部工具链时,这意味着生成交叉编译工具链。使用外部工具链时,这意味着检查外部工具链的功能并将其导入Buildroot变量。
- 构建TARGETS变量列出的所有目标。该变量由所有单个组件的Makefile填充。生成这些目标将触发用户空间软件包(库、程序等)、内核、引导加载程序以及根文件系统镜像的生成,具体取决于配置。