123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- Building with GCC
- =================
- Dependencies
- ------------
- For building U-Boot you need a GCC compiler for your host platform. If you
- are not building on the target platform you further need a GCC cross compiler.
- Debian based
- ~~~~~~~~~~~~
- On Debian based systems the cross compiler packages are named
- gcc-<architecture>-linux-gnu.
- You could install GCC and the GCC cross compiler for the ARMv8 architecture with
- .. code-block:: bash
- sudo apt-get install gcc gcc-aarch64-linux-gnu
- Depending on the build targets further packages maybe needed
- .. code-block:: bash
- sudo apt-get install bc bison build-essential coccinelle \
- device-tree-compiler dfu-util efitools flex gdisk graphviz imagemagick \
- liblz4-tool libguestfs-tools libncurses-dev libpython3-dev libsdl2-dev \
- libssl-dev lz4 lzma lzma-alone openssl pkg-config python3 \
- python3-coverage python3-pkg-resources python3-pycryptodome \
- python3-pyelftools python3-pytest python3-sphinxcontrib.apidoc \
- python3-sphinx-rtd-theme python3-virtualenv swig
- SUSE based
- ~~~~~~~~~~
- On suse based systems the cross compiler packages are named
- cross-<architecture>-gcc<version>.
- You could install GCC and the GCC 10 cross compiler for the ARMv8 architecture
- with
- .. code-block:: bash
- sudo zypper install gcc cross-aarch64-gcc10
- Depending on the build targets further packages maybe needed.
- .. code-block:: bash
- zypper install bc bison flex gcc libopenssl-devel libSDL2-devel make \
- ncurses-devel python3-devel python3-pytest swig
- Alpine Linux
- ~~~~~~~~~~~~
- For building U-Boot on Alpine Linux at least the following packages are needed:
- .. code-block:: bash
- apk add alpine-sdk bc bison dtc flex linux-headers ncurses-dev \
- openssl-dev perl python3 py3-setuptools python3-dev sdl2-dev
- Prerequisites
- -------------
- For some boards you have to build prerequisite files before you can build
- U-Boot, e.g. for the some boards you will need to build the ARM Trusted Firmware
- beforehand. Please, refer to the board specific documentation
- :doc:`../board/index`.
- Configuration
- -------------
- Directory configs/ contains the template configuration files for the maintained
- boards following the naming scheme::
- <board name>_defconfig
- These files have been stripped of default settings. So you cannot use them
- directly. Instead their name serves as a make target to generate the actual
- configuration file .config. For instance the configuration template for the
- Odroid C2 board is called odroid-c2_defconfig. The corresponding .config file
- is generated by
- .. code-block:: bash
- make odroid-c2_defconfig
- You can adjust the configuration using
- .. code-block:: bash
- make menuconfig
- Building
- --------
- When cross compiling you will have to specify the prefix of the cross-compiler.
- You can either specify the value of the CROSS_COMPILE variable on the make
- command line or export it beforehand.
- .. code-block:: bash
- CROSS_COMPILE=<compiler-prefix> make
- Assuming cross compiling on Debian for ARMv8 this would be
- .. code-block:: bash
- CROSS_COMPILE=aarch64-linux-gnu- make
- Build parameters
- ~~~~~~~~~~~~~~~~
- A list of available parameters for the make command can be obtained via
- .. code-block:: bash
- make help
- You can speed up compilation by parallelization using the -j parameter, e.g.
- .. code-block:: bash
- CROSS_COMPILE=aarch64-linux-gnu- make -j$(nproc)
- Further important build parameters are
- * O=<dir> - generate all output files in directory <dir>, including .config
- * V=1 - verbose build
- Devicetree compiler
- ~~~~~~~~~~~~~~~~~~~
- Boards that use `CONFIG_OF_CONTROL` (i.e. almost all of them) need the
- devicetree compiler (dtc). Those with `CONFIG_PYLIBFDT` need pylibfdt, a Python
- library for accessing devicetree data. Suitable versions of these are included
- in the U-Boot tree in `scripts/dtc` and built automatically as needed.
- To use the system versions of these, use the DTC parameter, for example
- .. code-block:: bash
- DTC=/usr/bin/dtc make
- In this case, dtc and pylibfdt are not built. The build checks that the version
- of dtc is new enough. It also makes sure that pylibfdt is present, if needed
- (see `scripts_dtc` in the Makefile).
- Note that the :doc:`tools` are always built with the included version of libfdt
- so it is not possible to build U-Boot tools with a system libfdt, at present.
- Other build targets
- ~~~~~~~~~~~~~~~~~~~
- A list of all make targets can be obtained via
- .. code-block:: bash
- make help
- Important ones are
- * clean - remove most generated files but keep the configuration
- * mrproper - remove all generated files + config + various backup files
- Installation
- ------------
- The process for installing U-Boot on the target device is device specific.
- Please, refer to the board specific documentation :doc:`../board/index`.
|