move several commands into extra files
move false, true, help, insmod, lsmod, version into extra files Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
0dd24dc17d
commit
932b57873d
|
@ -2,6 +2,7 @@ config REGINFO
|
|||
bool
|
||||
|
||||
menu "Commands "
|
||||
depends on COMMAND
|
||||
|
||||
menu "scripting "
|
||||
|
||||
|
@ -36,15 +37,20 @@ config CMD_PRINTENV
|
|||
tristate
|
||||
prompt "printenv"
|
||||
|
||||
config CMD_HELP
|
||||
tristate
|
||||
default y
|
||||
prompt "help"
|
||||
|
||||
config CMD_READLINE
|
||||
tristate
|
||||
prompt "readline"
|
||||
|
||||
config CMD_TRUE
|
||||
tristate
|
||||
default y
|
||||
prompt "true"
|
||||
|
||||
config CMD_FALSE
|
||||
tristate
|
||||
default y
|
||||
prompt "false"
|
||||
|
||||
endmenu
|
||||
|
||||
menu "file commands "
|
||||
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
Loading…
Reference in New Issue