common: command: Add command execution tracer.

When using boot scripts it can become quite hard to understand
which commands are actually executed during bootup (e.g. where
is a kernel image loaded from or which DTB is in use).

Shell scripts suffer from a similar problem and many shells address
this problem with a command execution tracer (e.g. BASH has xtrace,
which can be enabled by "set -x").

This patch introduces a command tracer for U-Boot, which prints
every command with its arguments before it is executed.

Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
This commit is contained in:
Christoph Muellner 2019-04-05 13:03:46 +02:00 committed by Simon Glass
parent 62392675cd
commit 7ae31fccec
2 changed files with 25 additions and 0 deletions

View File

@ -53,6 +53,17 @@ config SYS_PROMPT
This string is displayed in the command line to the left of the This string is displayed in the command line to the left of the
cursor. cursor.
config SYS_XTRACE
string "Command execution tracer"
depends on CMDLINE
default y if CMDLINE
help
This option enables the possiblity to print all commands before
executing them and after all variables are evaluated (similar
to Bash's xtrace/'set -x' feature).
To enable the tracer a variable "xtrace" needs to be defined in
the environment.
menu "Autoboot options" menu "Autoboot options"
config AUTOBOOT config AUTOBOOT

View File

@ -574,6 +574,20 @@ enum command_ret_t cmd_process(int flag, int argc, char * const argv[],
enum command_ret_t rc = CMD_RET_SUCCESS; enum command_ret_t rc = CMD_RET_SUCCESS;
cmd_tbl_t *cmdtp; cmd_tbl_t *cmdtp;
#if defined(CONFIG_SYS_XTRACE)
char *xtrace;
xtrace = env_get("xtrace");
if (xtrace) {
puts("+");
for (int i = 0; i < argc; i++) {
puts(" ");
puts(argv[i]);
}
puts("\n");
}
#endif
/* Look up command in command table */ /* Look up command in command table */
cmdtp = find_cmd(argv[0]); cmdtp = find_cmd(argv[0]);
if (cmdtp == NULL) { if (cmdtp == NULL) {