summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--commands/Kconfig40
-rw-r--r--commands/Makefile6
-rw-r--r--commands/false.c37
-rw-r--r--commands/help.c71
-rw-r--r--commands/insmod.c45
-rw-r--r--commands/lsmod.c19
-rw-r--r--commands/true.c37
-rw-r--r--commands/version.c39
-rw-r--r--common/command.c79
-rw-r--r--common/module.c58
-rw-r--r--include/module.h7
11 files changed, 299 insertions, 139 deletions
diff --git a/commands/Kconfig b/commands/Kconfig
index 19b96f2..0e405ee 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 1b3565f..a828061 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 0000000..67651c4
--- /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 <common.h>
+#include <command.h>
+
+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 0000000..ddb2aa8
--- /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 <common.h>
+#include <command.h>
+
+/*
+ * 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 0000000..28a59ea
--- /dev/null
+++ b/commands/insmod.c
@@ -0,0 +1,45 @@
+#include <common.h>
+#include <command.h>
+#include <module.h>
+#include <errno.h>
+#include <fs.h>
+#include <malloc.h>
+
+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 <module>\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 0000000..9909724
--- /dev/null
+++ b/commands/lsmod.c
@@ -0,0 +1,19 @@
+#include <common.h>
+#include <command.h>
+#include <module.h>
+
+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 0000000..1ec5933
--- /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 <common.h>
+#include <command.h>
+
+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 0000000..b9075b9
--- /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 <common.h>
+#include <command.h>
+
+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 c86b005..accaffa 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 54c40dd..e45c992 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 <module>\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 8d3bbf2..67d2962 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 */