140 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			3.5 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 liblz4-tool \
 | 
						|
      libguestfs-tools libncurses-dev libpython3-dev libsdl2-dev libssl-dev \
 | 
						|
      lzma-alone openssl python3 python3-coverage python3-pyelftools \
 | 
						|
      python3-pytest python3-sphinxcontrib.apidoc python3-sphinx-rtd-theme 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
 | 
						|
 | 
						|
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`.
 |