123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- Using Buildroot
- ===============
- Configuration and general usage
- -------------------------------
- Buildroot has a nice configuration tool similar to the one you can
- find in the http://www.kernel.org/[Linux kernel] or in
- http://www.busybox.org/[Busybox]. Note that you can (and should) build
- everything as a normal user. There is no need to be root to configure
- and use Buildroot. The first step is to run the configuration
- assistant:
- --------------------
- $ make menuconfig
- --------------------
- to run the curses-based configurator, or
- --------------------
- $ make xconfig
- --------------------
- or
- --------------------
- $ make gconfig
- --------------------
- to run the Qt or GTK-based configurators.
- All of these "make" commands will need to build a configuration
- utility, so you may need to install "development" packages for
- relevant libraries used by the configuration utilities. On Debian-like
- systems, the +libncurses5-dev+ package is required to use the
- 'menuconfig' interface, +libqt4-dev+ is required to use the 'xconfig'
- interface, and +libglib2.0-dev, libgtk2.0-dev and libglade2-dev+ are
- needed to use the 'gconfig' interface.
- For each menu entry in the configuration tool, you can find associated
- help that describes the purpose of the entry.
- Once everything is configured, the configuration tool generates a
- +.config+ file that contains the description of your
- configuration. It will be used by the Makefiles to do what's needed.
- Let's go:
- --------------------
- $ make
- --------------------
- You *should never* use +make -jN+ with Buildroot: it does not support
- 'top-level parallel make'. Instead, use the +BR2_JLEVEL+ option to
- tell Buildroot to run each package compilation with +make -jN+.
- This command will generally perform the following steps:
- * Download source files (as required)
- * Configure, build and install the cross-compiling toolchain if an
- internal toolchain is used, or import a toolchain if an external
- toolchain is used
- * Build/install selected target packages
- * Build a kernel image, if selected
- * Build a bootloader image, if selected
- * Create a root filesystem in selected formats
- Buildroot output is stored in a single directory, +output/+.
- This directory contains several subdirectories:
- * +images/+ where all the images (kernel image, bootloader and root
- filesystem images) are stored.
- * +build/+ where all the components except for the cross-compilation
- toolchain are built (this includes tools needed to run Buildroot on
- the host and packages compiled for the target). The +build/+
- directory contains one subdirectory for each of these components.
- * +staging/+ which contains a hierarchy similar to a root filesystem
- hierarchy. This directory contains the installation of the
- cross-compilation toolchain and all the userspace packages selected
- for the target. However, this directory is 'not' intended to be
- the root filesystem for the target: it contains a lot of development
- files, unstripped binaries and libraries that make it far too big
- for an embedded system. These development files are used to compile
- libraries and applications for the target that depend on other
- libraries.
- * +target/+ which contains 'almost' the complete root filesystem for
- the target: everything needed is present except the device files in
- +/dev/+ (Buildroot can't create them because Buildroot doesn't run
- as root and doesn't want to run as root). Therefore, this directory
- *should not be used on your target*. Instead, you should use one of
- the images built in the +images/+ directory. If you need an
- extracted image of the root filesystem for booting over NFS, then
- use the tarball image generated in +images/+ and extract it as
- root. Compared to +staging/+, +target/+ contains only the files and
- libraries needed to run the selected target applications: the
- development files (headers, etc.) are not present, unless the
- +development files in target filesystem+ option is selected.
- * +host/+ contains the installation of tools compiled for the host
- that are needed for the proper execution of Buildroot, including the
- cross-compilation toolchain.
- * +toolchain/+ contains the build directories for the various
- components of the cross-compilation toolchain.
- Offline builds
- --------------
- If you intend to do an offline build and just want to download
- all sources that you previously selected in the configurator
- ('menuconfig', 'xconfig' or 'gconfig'), then issue:
- --------------------
- $ make source
- --------------------
- You can now disconnect or copy the content of your +dl+
- directory to the build-host.
- Building out-of-tree
- --------------------
- Buildroot supports building out of tree with a syntax similar to the
- Linux kernel. To use it, add +O=<directory>+ to the make command line:
- --------------------
- $ make O=/tmp/build
- --------------------
- Or:
- --------------------
- $ cd /tmp/build; make O=$PWD -C path/to/buildroot
- --------------------
- All the output files will be located under +/tmp/build+.
- When using out-of-tree builds, the Buildroot +.config+ and temporary
- files are also stored in the output directory. This means that you can
- safely run multiple builds in parallel using the same source tree as
- long as they use unique output directories.
- For ease of use, Buildroot generates a Makefile wrapper in the output
- directory - So after the first run, you no longer need to pass +O=..+
- and +-C ..+, simply run (in the output directory):
- --------------------
- $ make <target>
- --------------------
- Environment variables
- ---------------------
- [[env-vars]]
- Buildroot also honors some environment variables, when they are passed
- to +make+ or set in the environment:
- * +HOSTCXX+, the host C++ compiler to use
- * +HOSTCC+, the host C compiler to use
- * +UCLIBC_CONFIG_FILE=<path/to/.config>+, path to
- the uClibc configuration file, used to compile uClibc, if an
- internal toolchain is being built
- * +BUSYBOX_CONFIG_FILE=<path/to/.config>+, path to
- the Busybox configuration file
- * +BUILDROOT_DL_DIR+ to override the directory in which
- Buildroot stores/retrieves downloaded files
- An example that uses config files located in the toplevel directory and
- in your $HOME:
- --------------------
- $ make UCLIBC_CONFIG_FILE=uClibc.config BUSYBOX_CONFIG_FILE=$HOME/bb.config
- --------------------
- If you want to use a compiler other than the default +gcc+
- or +g+++ for building helper-binaries on your host, then do
- --------------------
- $ make HOSTCXX=g++-4.3-HEAD HOSTCC=gcc-4.3-HEAD
- --------------------
|