This adds simple command-line parssing to sandbox. The idea is that it sets up the state with options provided, and this state can then be queried as needed later.
Signed-off-by: Simon Glass <s...@chromium.org> --- arch/sandbox/cpu/Makefile | 2 +- arch/sandbox/cpu/parse.c | 67 +++++++++++++++++++++++++++++++++++++++++++++ arch/sandbox/cpu/parse.h | 38 +++++++++++++++++++++++++ arch/sandbox/cpu/start.c | 33 ++++++++++++++++++++++ 4 files changed, 139 insertions(+), 1 deletions(-) create mode 100644 arch/sandbox/cpu/parse.c create mode 100644 arch/sandbox/cpu/parse.h diff --git a/arch/sandbox/cpu/Makefile b/arch/sandbox/cpu/Makefile index e5e860b..783a2c8 100644 --- a/arch/sandbox/cpu/Makefile +++ b/arch/sandbox/cpu/Makefile @@ -30,7 +30,7 @@ include $(TOPDIR)/config.mk LIB = $(obj)lib$(CPU).o -COBJS := cpu.o start.o os.o +COBJS := cpu.o os.o parse.o start.o SRCS := $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(COBJS)) diff --git a/arch/sandbox/cpu/parse.c b/arch/sandbox/cpu/parse.c new file mode 100644 index 0000000..38426fb --- /dev/null +++ b/arch/sandbox/cpu/parse.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <getopt.h> +#include <stdio.h> +#include <unistd.h> + +#include <asm/arch/state.h> + +#include "parse.h" + +static struct option long_options[] = { + {"command", required_argument, NULL, 'c'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} +}; + +void usage(void) +{ + fprintf(stderr, "u-boot, " + "a command line test interface to U-Boot\n\n" + "usage:\tu-boot [-ch]\n" + "Options:\n" + "\t-h\tDisplay help\n" + "\t-c <command>\tExecute U-Boot command\n" + ); +} + +int parse_args(struct sandbox_state *state, int argc, char *argv[]) +{ + int c; + + while ((c = getopt_long (argc, argv, "c:h", + long_options, NULL)) != EOF) { + switch (c) { + case 'c': + state->cmd = optarg; + break; + case 'h': + usage(); + return 1; + default: /* '?' */ + fprintf(stderr, "Try `--help' for more information." + "\n"); + return -1; + } + } + return 0; +} diff --git a/arch/sandbox/cpu/parse.h b/arch/sandbox/cpu/parse.h new file mode 100644 index 0000000..08e5ceb --- /dev/null +++ b/arch/sandbox/cpu/parse.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __SANDBOX_PARSE_H +#define __SANDBOX_PARSE_H +struct sandbox_state; + +/** + * Parse arguments and update sandbox state. + * + * @param state Sandbox state to update + * @param argc Argument count + * @param argv Argument vector + * @return 0 if ok, and program should continue; + * 1 if ok, but program should stop; + * -1 on error: program should terminate. + */ +int parse_args(struct sandbox_state *state, int argc, char *argv[]); + +#endif diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c index 685793e..a13e9d0 100644 --- a/arch/sandbox/cpu/start.c +++ b/arch/sandbox/cpu/start.c @@ -20,14 +20,47 @@ */ #include <common.h> +#include <asm/arch/state.h> + +#include "parse.h" int main(int argc, char *argv[]) { + struct sandbox_state *state = NULL; + int err; + + err = state_init(); + if (!err) { + state = state_get_current(); + err = parse_args(state, argc, argv); + } + if (err < 0) + return 1; + else if (err) /* success return, but nothing to do */ + return 0; + assert(state); + /* * Do pre- and post-relocation init, then start up U-Boot. This will * never return. */ board_init_f(0); + /* TODO: this code is not reached! */ + + /* Execute command if required */ + if (state->cmd) { +#ifdef CONFIG_SYS_HUSH_PARSER + run_command(state->cmd, 0); +#else + parse_string_outer(state->cmd, FLAG_PARSE_SEMICOLON | + FLAG_EXIT_FROM_LOOP); +#endif + } else { + for (;;) + main_loop(); + } + printf("U-Boot exited with state %d\n", state->exit_type); + return 0; } -- 1.7.3.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot