| // -*- mode:doc; -*- |
| // vim: set syntax=asciidoc: |
| |
| == How Buildroot works |
| |
| As mentioned above, Buildroot is basically a set of Makefiles that |
| download, configure, and compile software with the correct options. It |
| also includes patches for various software packages - mainly the ones |
| involved in the cross-compilation toolchain (+gcc+, +binutils+ and |
| +uClibc+). |
| |
| There is basically one Makefile per software package, and they are |
| named with the +.mk+ extension. Makefiles are split into many different |
| parts. |
| |
| * The +toolchain/+ directory contains the Makefiles |
| and associated files for all software related to the |
| cross-compilation toolchain: +binutils+, +gcc+, +gdb+, |
| +kernel-headers+ and +uClibc+. |
| |
| * The +arch/+ directory contains the definitions for all the processor |
| architectures that are supported by Buildroot. |
| |
| * The +package/+ directory contains the Makefiles and |
| associated files for all user-space tools and libraries that Buildroot |
| can compile and add to the target root filesystem. There is one |
| sub-directory per package. |
| |
| * The +linux/+ directory contains the Makefiles and associated files for |
| the Linux kernel. |
| |
| * The +boot/+ directory contains the Makefiles and associated files for |
| the bootloaders supported by Buildroot. |
| |
| * The +system/+ directory contains support for system integration, e.g. |
| the target filesystem skeleton and the selection of an init system. |
| |
| * The +fs/+ directory contains the Makefiles and |
| associated files for software related to the generation of the |
| target root filesystem image. |
| |
| Each directory contains at least 2 files: |
| |
| * +something.mk+ is the Makefile that downloads, configures, |
| compiles and installs the package +something+. |
| |
| * +Config.in+ is a part of the configuration tool |
| description file. It describes the options related to the |
| package. |
| |
| The main Makefile performs the following steps (once the |
| configuration is done): |
| |
| * Create all the output directories: +staging+, +target+, +build+, |
| etc. in the output directory (+output/+ by default, |
| another value can be specified using +O=+) |
| |
| * Generate the toolchain target. When an internal toolchain is used, this |
| means generating the cross-compilation toolchain. When an external |
| toolchain is used, this means checking the features of the external |
| toolchain and importing it into the Buildroot environment. |
| |
| * Generate all the targets listed in the +TARGETS+ variable. This |
| variable is filled by all the individual components' |
| Makefiles. Generating these targets will trigger the compilation of |
| the userspace packages (libraries, programs), the kernel, the |
| bootloader and the generation of the root filesystem images, |
| depending on the configuration. |
| |