| .. SPDX-License-Identifier: GPL-2.0+ |
| .. Copyright 2022, Heinrich Schuchardt <xypron.glpk@gmx.de> |
| |
| .. index:: |
| single: source (command) |
| |
| 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). |