From 932b57873db47db89989b86789b216e50a753478 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 13 Aug 2008 15:54:53 +0200 Subject: move several commands into extra files move false, true, help, insmod, lsmod, version into extra files Signed-off-by: Sascha Hauer --- commands/Kconfig | 40 ++++++++++++++++++++++++--- commands/Makefile | 6 +++++ commands/false.c | 37 +++++++++++++++++++++++++ commands/help.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ commands/insmod.c | 45 +++++++++++++++++++++++++++++++ commands/lsmod.c | 19 +++++++++++++ commands/true.c | 37 +++++++++++++++++++++++++ commands/version.c | 39 +++++++++++++++++++++++++++ common/command.c | 79 ------------------------------------------------------ common/module.c | 58 ++------------------------------------- include/module.h | 7 +++++ 11 files changed, 299 insertions(+), 139 deletions(-) create mode 100644 commands/false.c create mode 100644 commands/help.c create mode 100644 commands/insmod.c create mode 100644 commands/lsmod.c create mode 100644 commands/true.c create mode 100644 commands/version.c diff --git a/commands/Kconfig b/commands/Kconfig index 19b96f206b..0e405eea57 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -2,6 +2,7 @@ config REGINFO bool menu "Commands " + depends on COMMAND menu "scripting " @@ -36,14 +37,19 @@ config CMD_PRINTENV tristate prompt "printenv" -config CMD_HELP +config CMD_READLINE + tristate + prompt "readline" + +config CMD_TRUE tristate default y - prompt "help" + prompt "true" -config CMD_READLINE +config CMD_FALSE tristate - prompt "readline" + default y + prompt "false" endmenu @@ -238,4 +244,30 @@ config CMD_REGINFO tristate prompt "reginfo" +config CMD_VERSION + tristate + default y + prompt "version" + +config CMD_HELP + tristate + default y + prompt "help" + +config CMD_DEVINFO + tristate + default y + prompt "devinfo" + +config CMD_INSMOD + bool + depends on MODULES + default y + prompt "insmod" + +config CMD_LSMOD + bool + depends on MODULES + prompt "lsmod" + endmenu diff --git a/commands/Makefile b/commands/Makefile index 1b3565f915..a828061abf 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -39,3 +39,9 @@ obj-$(CONFIG_CMD_PRINTENV) += printenv.o obj-$(CONFIG_CMD_SAVEENV) += saveenv.o obj-$(CONFIG_CMD_LOADENV) += loadenv.o obj-$(CONFIG_CMD_NAND) += nand.o +obj-$(CONFIG_CMD_TRUE) += true.o +obj-$(CONFIG_CMD_FALSE) += false.o +obj-$(CONFIG_CMD_VERSION) += version.o +obj-$(CONFIG_CMD_HELP) += help.o +obj-$(CONFIG_CMD_LSMOD) += lsmod.o +obj-$(CONFIG_CMD_INSMOD) += insmod.o diff --git a/commands/false.c b/commands/false.c new file mode 100644 index 0000000000..67651c4bd8 --- /dev/null +++ b/commands/false.c @@ -0,0 +1,37 @@ +/* + * (C) Copyright 2000-2003 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 +#include + +static int do_false (cmd_tbl_t *cmdtp, int argc, char *argv[]) +{ + return 1; +} + +U_BOOT_CMD_START(false) + .maxargs = 1, + .cmd = do_false, + .usage = "do nothing, unsuccessfully", +U_BOOT_CMD_END + diff --git a/commands/help.c b/commands/help.c new file mode 100644 index 0000000000..ddb2aa8409 --- /dev/null +++ b/commands/help.c @@ -0,0 +1,71 @@ +/* + * (C) Copyright 2000-2003 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 +#include + +/* + * Use puts() instead of printf() to avoid printf buffer overflow + * for long help messages + */ +static int do_help (cmd_tbl_t * cmdtp, int argc, char *argv[]) +{ + if (argc == 1) { /* show list of commands */ + for_each_command(cmdtp) { + if (!cmdtp->usage) + continue; + printf("%10s - %s\n", cmdtp->name, cmdtp->usage); + } + return 0; + } + + /* command help (long version) */ + if ((cmdtp = find_cmd(argv[1])) != NULL) { + u_boot_cmd_usage(cmdtp); + return 0; + } else { + printf ("Unknown command '%s' - try 'help'" + " without arguments for list of all" + " known commands\n\n", argv[1] + ); + return 1; + } +} + +static const __maybe_unused char cmd_help_help[] = +"Show help information (for 'command')\n" +"'help' prints online help for the monitor commands.\n\n" +"Without arguments, it prints a short usage message for all commands.\n\n" +"To get detailed help information for specific commands you can type\n" +"'help' with one or more command names as arguments.\n"; + +static const char *help_aliases[] = { "?", NULL}; + +U_BOOT_CMD_START(help) + .maxargs = 2, + .cmd = do_help, + .aliases = help_aliases, + .usage = "print online help", + U_BOOT_CMD_HELP(cmd_help_help) +U_BOOT_CMD_END + diff --git a/commands/insmod.c b/commands/insmod.c new file mode 100644 index 0000000000..28a59ead56 --- /dev/null +++ b/commands/insmod.c @@ -0,0 +1,45 @@ +#include +#include +#include +#include +#include +#include + +static int do_insmod (cmd_tbl_t *cmdtp, int argc, char *argv[]) +{ + struct module *module; + void *buf; + int len; + + if (argc < 2) { + u_boot_cmd_usage(cmdtp); + return 1; + } + + buf = read_file(argv[1], &len); + if (!buf) { + perror("insmod"); + return 1; + } + + module = load_module(buf, len); + + free(buf); + + if (module) { + if (module->init) + module->init(); + } + + return 0; +} + +static const __maybe_unused char cmd_insmod_help[] = +"Usage: insmod \n"; + +U_BOOT_CMD_START(insmod) + .maxargs = 2, + .cmd = do_insmod, + .usage = "insert a module", + U_BOOT_CMD_HELP(cmd_insmod_help) +U_BOOT_CMD_END diff --git a/commands/lsmod.c b/commands/lsmod.c new file mode 100644 index 0000000000..9909724cb2 --- /dev/null +++ b/commands/lsmod.c @@ -0,0 +1,19 @@ +#include +#include +#include + +static int do_lsmod (cmd_tbl_t *cmdtp, int argc, char *argv[]) +{ + struct module *mod; + + for_each_module(mod) + printf("%s\n", mod->name); + + return 0; +} + +U_BOOT_CMD_START(lsmod) + .maxargs = 1, + .cmd = do_lsmod, + .usage = "list modules", +U_BOOT_CMD_END diff --git a/commands/true.c b/commands/true.c new file mode 100644 index 0000000000..1ec59330bf --- /dev/null +++ b/commands/true.c @@ -0,0 +1,37 @@ +/* + * (C) Copyright 2000-2003 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 +#include + +static int do_true (cmd_tbl_t *cmdtp, int argc, char *argv[]) +{ + return 0; +} + +U_BOOT_CMD_START(true) + .maxargs = 1, + .cmd = do_true, + .usage = "do nothing, successfully", +U_BOOT_CMD_END + diff --git a/commands/version.c b/commands/version.c new file mode 100644 index 0000000000..b9075b9668 --- /dev/null +++ b/commands/version.c @@ -0,0 +1,39 @@ +/* + * (C) Copyright 2000-2003 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 +#include + +static int do_version (cmd_tbl_t *cmdtp, int argc, char *argv[]) +{ + extern char version_string[]; + printf ("\n%s\n", version_string); + return 0; +} + +U_BOOT_CMD_START(version) + .maxargs = 1, + .cmd = do_version, + .usage = "print monitor version", +U_BOOT_CMD_END + diff --git a/common/command.c b/common/command.c index c86b0058f5..accaffa4be 100644 --- a/common/command.c +++ b/common/command.c @@ -41,40 +41,6 @@ const char version_string[] = LIST_HEAD(command_list); EXPORT_SYMBOL(command_list); -static int do_version (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - printf ("\n%s\n", version_string); - return 0; -} - -U_BOOT_CMD_START(version) - .maxargs = 1, - .cmd = do_version, - .usage = "print monitor version", -U_BOOT_CMD_END - -static int do_true (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - return 0; -} - -U_BOOT_CMD_START(true) - .maxargs = 1, - .cmd = do_true, - .usage = "do nothing, successfully", -U_BOOT_CMD_END - -static int do_false (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - return 1; -} - -U_BOOT_CMD_START(false) - .maxargs = 1, - .cmd = do_false, - .usage = "do nothing, unsuccessfully", -U_BOOT_CMD_END - #ifdef CONFIG_SHELL_HUSH static int do_exit (cmd_tbl_t *cmdtp, int argc, char *argv[]) @@ -117,51 +83,6 @@ void u_boot_cmd_usage(cmd_tbl_t *cmdtp) } EXPORT_SYMBOL(u_boot_cmd_usage); -/* - * Use puts() instead of printf() to avoid printf buffer overflow - * for long help messages - */ -static int do_help (cmd_tbl_t * cmdtp, int argc, char *argv[]) -{ - if (argc == 1) { /* show list of commands */ - for_each_command(cmdtp) { - if (!cmdtp->usage) - continue; - printf("%10s - %s\n", cmdtp->name, cmdtp->usage); - } - return 0; - } - - /* command help (long version) */ - if ((cmdtp = find_cmd(argv[1])) != NULL) { - u_boot_cmd_usage(cmdtp); - return 0; - } else { - printf ("Unknown command '%s' - try 'help'" - " without arguments for list of all" - " known commands\n\n", argv[1] - ); - return 1; - } -} - -static const __maybe_unused char cmd_help_help[] = -"Show help information (for 'command')\n" -"'help' prints online help for the monitor commands.\n\n" -"Without arguments, it prints a short usage message for all commands.\n\n" -"To get detailed help information for specific commands you can type\n" -"'help' with one or more command names as arguments.\n"; - -static const char *help_aliases[] = { "?", NULL}; - -U_BOOT_CMD_START(help) - .maxargs = 2, - .cmd = do_help, - .aliases = help_aliases, - .usage = "print online help", - U_BOOT_CMD_HELP(cmd_help_help) -U_BOOT_CMD_END - static int compare(struct list_head *a, struct list_head *b) { char *na = (char*)list_entry(a, cmd_tbl_t, list)->name; diff --git a/common/module.c b/common/module.c index 54c40dd281..e45c992823 100644 --- a/common/module.c +++ b/common/module.c @@ -294,6 +294,7 @@ struct module * load_module(void *mod_image, unsigned long len) numsyms = sechdrs[symindex].sh_size / sizeof(Elf32_Sym); sym = (void *)sechdrs[symindex].sh_addr; +#ifdef CONFIG_COMMAND cmdindex = find_sec(ehdr, sechdrs, secstrings, ".u_boot_cmd"); if (cmdindex) { cmd_tbl_t *cmd = (cmd_tbl_t *)sechdrs[cmdindex].sh_addr; @@ -302,6 +303,7 @@ struct module * load_module(void *mod_image, unsigned long len) cmd++; } } +#endif for (i = 0; i < numsyms; i++) { if (!strcmp(strtab + sym[i].st_name, MODULE_SYMBOL_PREFIX "init_module")) { @@ -322,59 +324,3 @@ cleanup: return NULL; } - -static int do_lsmod (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - struct module *mod; - - list_for_each_entry(mod, &module_list, list) - printf("%s\n", mod->name); - - return 0; -} - -U_BOOT_CMD_START(lsmod) - .maxargs = 1, - .cmd = do_lsmod, - .usage = "list modules", -U_BOOT_CMD_END - -static int do_insmod (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - struct module *module; - void *buf; - int len; - - if (argc < 2) { - u_boot_cmd_usage(cmdtp); - return 1; - } - - buf = read_file(argv[1], &len); - if (!buf) { - perror("insmod"); - return 1; - } - - module = load_module(buf, len); - - free(buf); - - if (module) { - if (module->init) - module->init(); - } - - return 0; -} - -static const __maybe_unused char cmd_insmod_help[] = -"Usage: insmod \n"; - -U_BOOT_CMD_START(insmod) - .maxargs = 2, - .cmd = do_insmod, - .usage = "insert a module", - U_BOOT_CMD_HELP(cmd_insmod_help) -U_BOOT_CMD_END - diff --git a/include/module.h b/include/module.h index 8d3bbf2160..67d2962eaa 100644 --- a/include/module.h +++ b/include/module.h @@ -20,6 +20,8 @@ struct kernel_symbol const char *name; }; +struct module * load_module(void *mod_image, unsigned long len); + /* For every exported symbol, place a struct in the __ksymtab section */ #define __EXPORT_SYMBOL(sym, sec) \ extern typeof(sym) sym; \ @@ -71,5 +73,10 @@ int apply_relocate_add(Elf_Shdr *sechdrs, #define EXPORT_SYMBOL(sym) #endif /* CONFIG_MODULE */ +extern struct list_head module_list; + +#define for_each_module(m) \ + list_for_each_entry(m, &module_list, list) + #endif /* __MODULE_H */ -- cgit v1.2.3