.. SPDX-License-Identifier: GPL-2.0+
.. Copyright 2022, Heinrich Schuchardt <xypron.glpk@gmx.de>

source command
==============

Synopsis
--------

::

    source [<addr>][:[<image>]|#[<config>]]

Description
-----------

The *source* command is used to execute a script file from memory.

Two formats for script files exist:

* legacy U-Boot image format
* Flat Image Tree (FIT)

The benefit of the FIT images is that they can be signed and verifed as
described in :doc:`../fit/signature`.

Both formats can be created with the mkimage tool.

addr
    location of the script file in memory, defaults to CONFIG_SYS_LOAD_ADDR.

image
    name of an image in a FIT file

config
    name of a configuration in a FIT file. A hash sign following white space
    starts a comment. Hence, if no *addr* is specified, the hash sign has to be
    escaped with a backslash or the argument must be quoted.

If both *image* and *config* are omitted, the default configuration is used, or
if no configuration is defined, the default image.

Examples
--------

FIT image
'''''''''

For creating a FIT image an image tree source file (\*.its) is needed. Here is
an example (source.its).

.. code-block::

    /dts-v1/;

    / {
        description = "FIT image to test the source command";
        #address-cells = <1>;

        images {
            default = "script-1";

            script-1 {
                data = "echo 1";
                type = "script";
                compression = "none";
            };

            script-2 {
                data = "echo 2";
                type = "script";
                compression = "none";
            };
        };

        configurations {
            default = "conf-2";

            conf-1 {
                script = "script-1";
            };

            conf-2 {
                script = "script-2";
            };
        };
    };

The FIT image file (boot.itb) is created with:

.. code-block:: bash

    mkimage -f source.its boot.itb

In U-Boot the script can be loaded and execute like this

.. code-block::

    => load host 0:1 $loadaddr boot.itb
    1552 bytes read in 0 ms
    => source $loadaddr#conf-1
    ## Executing script at 00000000
    1
    => source $loadaddr#conf-2
    ## Executing script at 00000000
    2
    => source $loadaddr:script-1
    ## Executing script at 00000000
    1
    => source $loadaddr:script-2
    ## Executing script at 00000000
    2
    => source $loadaddr
    ## Executing script at 00000000
    2
    => source \#conf-1
    ## Executing script at 00000000
    1
    => source '#conf-1'
    ## Executing script at 00000000
    1
    => source ':script-1'
    ## Executing script at 00000000
    1
    => source
    ## Executing script at 00000000
    2
    =>

Instead of specifying command line instructions directly in the *data* property
of the image tree source file another file can be included. Here is a minimal
example which encapsulates the file boot.txt:

.. code-block::

    /dts-v1/;
    / {
        description = "";
        images {
            script {
                data = /incbin/("./boot.txt");
                type = "script";
            };
        };
    };

Legacy U-Boot image
'''''''''''''''''''

A script file using the legacy U-Boot image file format can be created based on
a text file. Let's use this example text file (boot.txt):

.. code-block:: bash

    echo Hello from a script
    echo -------------------

The boot scripts (boot.scr) is created with:

.. code-block:: bash

    mkimage -T script -n 'Test script' -d boot.txt boot.scr

The script can be execute in U-Boot like this:

.. code-block::

    => load host 0:1 $loadaddr boot.scr
    122 bytes read in 0 ms
    => source $loadaddr
    ## Executing script at 00000000
    Hello from a script
    -------------------
    => source
    ## Executing script at 00000000
    Hello from a script
    -------------------
    =>

Configuration
-------------

The source command is only available if CONFIG_CMD_SOURCE=y.
The FIT image file format requires CONFIG_FIT=y.#
The legacy U-Boot image file format requires CONFIG_LEGACY_IMAGE_FORMAT=y.
On hardened systems support for the legacy U-Boot image format should be
disabled as these images cannot be signed and verified.

Return value
------------

If the scripts is executed successfully, the return value $? is 0 (true).
Otherwise it is 1 (false).
