9
0
Fork 0

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:
Sascha Hauer 2008-08-13 15:54:53 +02:00
parent 0dd24dc17d
commit 932b57873d
11 changed files with 300 additions and 140 deletions

View File

@ -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

View File

@ -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

37
commands/false.c Normal file
View File

@ -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

71
commands/help.c Normal file
View File

@ -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

45
commands/insmod.c Normal file
View File

@ -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

19
commands/lsmod.c Normal file
View File

@ -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

37
commands/true.c Normal file
View File

@ -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

39
commands/version.c Normal file
View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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 */