mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-20 10:13:09 +00:00
93b1965322
At present U-Boot always builds dtc if CONFIG_OF_CONTROL is defined, even when DTC is provided. The built dtc is not actually used, so this is a waste of time. Update the Makefile logic to build dtc only if one is not provided to the build with the DTC variable. Add documentation to explain this. This saves about 3.5 seconds of elapsed time on a clean build of sandbox_spl for me. Signed-off-by: Simon Glass <sjg@chromium.org>
162 lines
4.4 KiB
ReStructuredText
162 lines
4.4 KiB
ReStructuredText
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-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
|
|
|
|
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`.
|