diff options
Diffstat (limited to 'cmd/source.c')
-rw-r--r-- | cmd/source.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/cmd/source.c b/cmd/source.c new file mode 100644 index 00000000000..c9b5f8e400a --- /dev/null +++ b/cmd/source.c @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2001 + * Kyle Harris, kharris@nexus-tech.net + */ + +/* + * The "source" command allows to define "script images", i. e. files + * that contain command sequences that can be executed by the command + * interpreter. It returns the exit status of the last command + * executed from the script. This is very similar to running a shell + * script in a UNIX shell, hence the name for the command. + */ + +/* #define DEBUG */ + +#include <command.h> +#include <env.h> +#include <image.h> +#include <log.h> +#include <malloc.h> +#include <mapmem.h> +#include <asm/byteorder.h> +#include <asm/io.h> + +static int do_source(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + ulong addr; + int rcode; + const char *fit_uname = NULL, *confname = NULL; + + /* Find script image */ + if (argc < 2) { + addr = CONFIG_SYS_LOAD_ADDR; + debug("* source: default load address = 0x%08lx\n", addr); +#if defined(CONFIG_FIT) + } else if (fit_parse_subimage(argv[1], image_load_addr, &addr, + &fit_uname)) { + debug("* source: subimage '%s' from FIT image at 0x%08lx\n", + fit_uname, addr); + } else if (fit_parse_conf(argv[1], image_load_addr, &addr, &confname)) { + debug("* source: config '%s' from FIT image at 0x%08lx\n", + confname, addr); +#endif + } else { + addr = hextoul(argv[1], NULL); + debug("* source: cmdline image address = 0x%08lx\n", addr); + } + + printf ("## Executing script at %08lx\n", addr); + rcode = cmd_source_script(addr, fit_uname, confname); + return rcode; +} + +U_BOOT_LONGHELP(source, +#if defined(CONFIG_FIT) + "[<addr>][:[<image>]|#[<config>]]\n" + "\t- Run script starting at addr\n" + "\t- A FIT config name or subimage name may be specified with : or #\n" + "\t (like bootm). If the image or config name is omitted, the\n" + "\t default is used." +#else + "[<addr>]\n" + "\t- Run script starting at addr" +#endif + ); + +U_BOOT_CMD( + source, 2, 0, do_source, + "run script from memory", source_help_text +); |