summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:01:55 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:01:55 +0200
commitd5a108ece39a1a32dd888f33937b5db8d9b3ba70 (patch)
treee2c6d5f0215d6e191945453dda9b31052ebedff5 /common
parent321dc1bf8f0ee24df9d8a02a34bcfae7685fa001 (diff)
downloadbarebox-d5a108ece39a1a32dd888f33937b5db8d9b3ba70.tar.gz
barebox-d5a108ece39a1a32dd888f33937b5db8d9b3ba70.tar.xz
svn_rev_462
- Add help texts for many commands. - Let the linker sort the command table. - Add support for multiple argmuments in several commands (mkdir, rmdir, rm, cat)
Diffstat (limited to 'common')
-rw-r--r--common/cmd_boot.c4
-rw-r--r--common/cmd_bootm.c4
-rw-r--r--common/cmd_echo.c2
-rw-r--r--common/cmd_edit.c4
-rw-r--r--common/cmd_exec.c2
-rw-r--r--common/cmd_flash.c4
-rw-r--r--common/cmd_fs.c164
-rw-r--r--common/cmd_mem.c48
-rw-r--r--common/cmd_misc.c8
-rw-r--r--common/cmd_net.c18
-rw-r--r--common/command.c137
-rw-r--r--common/env.c4
-rw-r--r--common/environment.c26
-rw-r--r--common/partition.c91
14 files changed, 333 insertions, 183 deletions
diff --git a/common/cmd_boot.c b/common/cmd_boot.c
index 43fc18259b..af549c9f5c 100644
--- a/common/cmd_boot.c
+++ b/common/cmd_boot.c
@@ -76,7 +76,7 @@ int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(go)
.maxargs = CONFIG_MAXARGS,
.cmd = do_go,
- .usage = "go - start application at address 'addr'\n",
+ .usage = "start application at address 'addr'",
U_BOOT_CMD_HELP(
"addr [arg ...]\n - start application at address 'addr'\n"
" passing 'arg' as arguments\n")
@@ -87,5 +87,5 @@ extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
U_BOOT_CMD_START(reset)
.maxargs = CONFIG_MAXARGS,
.cmd = do_reset,
- .usage = "reset - Perform RESET of the CPU\n",
+ .usage = "Perform RESET of the CPU",
U_BOOT_CMD_END
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index db4c296677..19b6238213 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -440,7 +440,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(bootm)
.maxargs = CONFIG_MAXARGS,
.cmd = do_bootm,
- .usage = "bootm - boot application image from memory\n",
+ .usage = "boot application image from memory",
U_BOOT_CMD_HELP(
"[addr [arg ...]]\n - boot application image stored in memory\n"
"\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"
@@ -677,7 +677,7 @@ int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(boot)
.maxargs = 1,
.cmd = do_bootd,
- .usage = "boot - boot default, i.e., run 'bootcmd'\n",
+ .usage = "boot default, i.e., run 'bootcmd'",
U_BOOT_CMD_END
#if (CONFIG_COMMANDS & CFG_CMD_IMI)
diff --git a/common/cmd_echo.c b/common/cmd_echo.c
index b31887b955..1314f2d971 100644
--- a/common/cmd_echo.c
+++ b/common/cmd_echo.c
@@ -77,6 +77,6 @@ no_optarg_out:
U_BOOT_CMD_START(echo)
.maxargs = CONFIG_MAXARGS,
.cmd = do_echo,
- .usage = "echo - echo args to console\n",
+ .usage = "echo args to console",
U_BOOT_CMD_END
diff --git a/common/cmd_edit.c b/common/cmd_edit.c
index 00e5644ae5..26bb970b2b 100644
--- a/common/cmd_edit.c
+++ b/common/cmd_edit.c
@@ -70,7 +70,7 @@ static char *screenline(char *line, int *pos)
return lbuf;
}
-int setpos(char *line, int position)
+static int setpos(char *line, int position)
{
int i = 0;
int linepos = 0;
@@ -475,5 +475,5 @@ out:
U_BOOT_CMD_START(edit)
.maxargs = 2,
.cmd = do_edit,
- .usage = "edit <file> - edit a file\n",
+ .usage = "edit a file",
U_BOOT_CMD_END
diff --git a/common/cmd_exec.c b/common/cmd_exec.c
index 9d9d206a82..1057bc1b8e 100644
--- a/common/cmd_exec.c
+++ b/common/cmd_exec.c
@@ -72,5 +72,5 @@ out:
U_BOOT_CMD_START(exec)
.maxargs = CONFIG_MAXARGS,
.cmd = do_exec,
- .usage = "exec <files> - execute a script\n",
+ .usage = "execute a script",
U_BOOT_CMD_END
diff --git a/common/cmd_flash.c b/common/cmd_flash.c
index 4d45f943f7..db059dba58 100644
--- a/common/cmd_flash.c
+++ b/common/cmd_flash.c
@@ -84,7 +84,7 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(erase)
.maxargs = CONFIG_MAXARGS,
.cmd = do_flerase,
- .usage = "erase - erase FLASH memory\n",
+ .usage = "erase FLASH memory",
U_BOOT_CMD_HELP("write me\n")
U_BOOT_CMD_END
@@ -120,6 +120,6 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(protect)
.maxargs = 4,
.cmd = do_protect,
- .usage = "protect - enable or disable FLASH write protection\n",
+ .usage = "enable or disable FLASH write protection",
U_BOOT_CMD_HELP("write me\n")
U_BOOT_CMD_END
diff --git a/common/cmd_fs.c b/common/cmd_fs.c
index 6a0b4f7d44..bbbf8d006d 100644
--- a/common/cmd_fs.c
+++ b/common/cmd_fs.c
@@ -115,10 +115,16 @@ static int do_ls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 0;
}
+static char cmd_ls_help[] =
+"Usage: ls [OPTION]... [FILE]...\n"
+"List information about the FILEs (the current directory by default).\n"
+" -R list subdirectories recursively\n";
+
U_BOOT_CMD_START(ls)
.maxargs = CONFIG_MAXARGS,
.cmd = do_ls,
- .usage = "ls - list a file or directory\n",
+ .usage = "list a file or directory",
+ U_BOOT_CMD_HELP(cmd_ls_help)
U_BOOT_CMD_END
static int do_cd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -138,10 +144,15 @@ static int do_cd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 0;
}
+static char cmd_cd_help[] =
+"Usage: cd [directory]\n"
+"change to directory. If called without argument, change to /\n";
+
U_BOOT_CMD_START(cd)
.maxargs = 2,
.cmd = do_cd,
- .usage = "cd - change current directory\n",
+ .usage = "change working directory",
+ U_BOOT_CMD_HELP(cmd_cd_help)
U_BOOT_CMD_END
static int do_pwd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -153,64 +164,100 @@ static int do_pwd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(pwd)
.maxargs = 2,
.cmd = do_pwd,
- .usage = "pwd - display current directory\n",
+ .usage = "print working directory",
U_BOOT_CMD_END
static int do_mkdir (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
- int ret;
+ int i = 1;
- ret = mkdir(argv[1]);
- if (ret) {
- perror("mkdir");
+ if (argc < 2) {
+ u_boot_cmd_usage(cmdtp);
return 1;
}
+ while (i < argc) {
+ if (mkdir(argv[i])) {
+ printf("could not create %s: %s\n", argv[i], errno_str());
+ return 1;
+ }
+ i++;
+ }
+
return 0;
}
+static char cmd_mkdir_help[] =
+"Usage: mkdir [directories]\n"
+"Create new directories\n";
+
U_BOOT_CMD_START(mkdir)
- .maxargs = 2,
+ .maxargs = CONFIG_MAXARGS,
.cmd = do_mkdir,
- .usage = "mkdir - create a new directory\n",
+ .usage = "make directories",
+ U_BOOT_CMD_HELP(cmd_mkdir_help)
U_BOOT_CMD_END
static int do_rm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
- int ret;
+ int i = 1;
- ret = unlink(argv[1]);
- if (ret) {
- perror("rm");
+ if (argc < 2) {
+ u_boot_cmd_usage(cmdtp);
return 1;
}
+ while (i < argc) {
+ if (unlink(argv[i])) {
+ printf("could not remove %s: %s\n", argv[i], errno_str());
+ return 1;
+ }
+ i++;
+ }
+
return 0;
}
+static char cmd_rm_help[] =
+"Usage: rm [FILES]\n"
+"Remove files\n";
+
U_BOOT_CMD_START(rm)
- .maxargs = 2,
+ .maxargs = CONFIG_MAXARGS,
.cmd = do_rm,
- .usage = "rm - remove files\n",
+ .usage = "remove files",
+ U_BOOT_CMD_HELP(cmd_rm_help)
U_BOOT_CMD_END
static int do_rmdir (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
- int ret;
+ int i = 1;
- ret = rmdir(argv[1]);
- if (ret) {
- perror("rmdir");
+ if (argc < 2) {
+ u_boot_cmd_usage(cmdtp);
return 1;
}
+ while (i < argc) {
+ if (rmdir(argv[i])) {
+ printf("could not remove %s: %s\n", argv[i], errno_str());
+ return 1;
+ }
+ i++;
+ }
+
return 0;
}
+static char cmd_rmdir_help[] =
+"Usage: rmdir [directories]\n"
+"Remove directories. The directories have to be empty.\n";
+
U_BOOT_CMD_START(rmdir)
- .maxargs = 2,
+ .maxargs = CONFIG_MAXARGS,
.cmd = do_rmdir,
- .usage = "rmdir <dir> - remove directories\n",
+ .usage = "remove directorie(s)",
+ U_BOOT_CMD_HELP(cmd_rmdir_help)
U_BOOT_CMD_END
static int do_mount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -232,7 +279,7 @@ static int do_mount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
}
if (argc != 4) {
- printf ("Usage:\n%s\n", cmdtp->usage);
+ u_boot_cmd_usage(cmdtp);
return 1;
}
@@ -243,11 +290,23 @@ static int do_mount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 0;
}
+static char cmd_mount_help[] =
+"Usage: mount: list mounted filesystems\n"
+"or: mount <device> <fstype> <mountpoint>\n"
+"\n"
+"Mount a filesystem of a given type to a mountpoint.\n"
+"<device> can be one of /dev/* or some arbitrary string if no\n"
+"device is needed for this driver (for example ramfs).\n"
+"<fstype> is the filesystem driver to use. Try the 'devinfo' command\n"
+"for a list of available drivers.\n"
+"<mountpoint> must be an empty directory descending directly from the\n"
+"root directory.\n";
+
U_BOOT_CMD_START(mount)
.maxargs = 4,
.cmd = do_mount,
- .usage = "mount - mount a filesystem to a device\n",
- U_BOOT_CMD_HELP(" <device> <type> <path> add a filesystem of type 'type' on the given device")
+ .usage = "mount a filesystem to a device",
+ U_BOOT_CMD_HELP(cmd_mount_help)
U_BOOT_CMD_END
static int do_umount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -255,7 +314,7 @@ static int do_umount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
int ret = 0;
if (argc != 2) {
- printf ("Usage:\n%s\n", cmdtp->usage);
+ u_boot_cmd_usage(cmdtp);
return 1;
}
@@ -264,13 +323,17 @@ static int do_umount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 1;
}
return 0;
-
}
+static char cmd_umount_help[] =
+"Usage: umount <mountpoint>\n"
+"umount a filesystem mounted on a specific mountpoint\n";
+
U_BOOT_CMD_START(umount)
.maxargs = 2,
.cmd = do_umount,
- .usage = "umount <path> - umount a filesystem mounted on <path>\n",
+ .usage = "umount a filesystem",
+ U_BOOT_CMD_HELP(cmd_umount_help)
U_BOOT_CMD_END
static int do_cat ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -279,36 +342,53 @@ static int do_cat ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
int fd, i;
char *buf;
int err = 0;
+ int args = 1;
- fd = open(argv[1], 0);
- if (fd < 0) {
- perror("open");
+ if (argc < 2) {
+ u_boot_cmd_usage(cmdtp);
return 1;
}
buf = xmalloc(1024);
- while((ret = read(fd, buf, 1024)) > 0) {
- for(i = 0; i < ret; i++) {
- if (isprint(buf[i]) || buf[i] == '\n' || buf[i] == '\t')
- putc(buf[i]);
- else
- putc('.');
- }
- if(ctrlc()) {
- err = 1;
+ while (args < argc) {
+ fd = open(argv[args], 0);
+ if (fd < 0) {
+ printf("could not open %s: %s\n", argv[args], errno_str());
goto out;
}
+
+ while((ret = read(fd, buf, 1024)) > 0) {
+ for(i = 0; i < ret; i++) {
+ if (isprint(buf[i]) || buf[i] == '\n' || buf[i] == '\t')
+ putc(buf[i]);
+ else
+ putc('.');
+ }
+ if(ctrlc()) {
+ err = 1;
+ close(fd);
+ goto out;
+ }
+ }
+ close(fd);
+ args++;
}
+
out:
free(buf);
- close(fd);
return err;
}
+static char cmd_cat_help[] =
+"Usage: cat [FILES]\n"
+"Concatenate files on stdout. Currently only printable characters\n"
+"and \\n and \\t are printed, but this should be optional\n";
+
U_BOOT_CMD_START(cat)
- .maxargs = 2,
+ .maxargs = CONFIG_MAXARGS,
.cmd = do_cat,
- .usage = "cat - bla bla\n",
+ .usage = "Concatenate FILE(s)",
+ U_BOOT_CMD_HELP(cmd_cat_help)
U_BOOT_CMD_END
diff --git a/common/cmd_mem.c b/common/cmd_mem.c
index beea5b0c9e..eaa7c4653e 100644
--- a/common/cmd_mem.c
+++ b/common/cmd_mem.c
@@ -176,11 +176,30 @@ out:
return errno;
}
+static char cmd_md_help[] =
+"Usage md [OPTIONS] <region>\n"
+"display (hexdump) a memory region.\n"
+"options:\n"
+" -f <file> display file (default /dev/mem)\n"
+" -b output in bytes\n"
+" -w output in halfwords (16bit)\n"
+" -l output in words (32bit)\n"
+"\n"
+"Memory regions:\n"
+"Memory regions can be specified in two different forms: start+size\n"
+"or start-end, If <start> is ommitted it defaults to 0. If end is ommited it\n"
+"defaults to the end of the device, except for interactive commands like md\n"
+"and mw for which it defaults to 0x100.\n"
+"Sizes can be specified as decimal, or if prefixed with 0x as hexadecimal.\n"
+"an optional suffix of k, M or G is for kibibytes, Megabytes or Gigabytes,\n"
+"respectively\n";
+
+
U_BOOT_CMD_START(md)
.maxargs = CONFIG_MAXARGS,
.cmd = do_mem_md,
- .usage = "md - memory display\n",
- U_BOOT_CMD_HELP("write me\n")
+ .usage = "memory display",
+ U_BOOT_CMD_HELP(cmd_md_help)
U_BOOT_CMD_END
int do_mem_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -265,11 +284,16 @@ out:
return errno;
}
+static char cmd_mw_help[] =
+"Usage mw [OPTIONS] <region> <value(s)>\n"
+"Write value(s) to the specifies region.\n"
+"see 'help md' for supported options.\n";
+
U_BOOT_CMD_START(mw)
.maxargs = CONFIG_MAXARGS,
.cmd = do_mem_mw,
- .usage = "mw - memory write (fill)\n",
- U_BOOT_CMD_HELP("write me\n")
+ .usage = "memory write (fill)",
+ U_BOOT_CMD_HELP(cmd_mw_help)
U_BOOT_CMD_END
int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -442,11 +466,19 @@ out:
return ret;
}
+static char cmd_cp_help[] =
+"Usage: cp <source> <destination>\n"
+"cp copies file <source> to <destination>.\n"
+"Currently only this form is supported and you have to specify the exact target\n"
+"filename (not a target directory).\n"
+"Note: This command was previously used as memory copy. Currently there is no\n"
+"equivalent command for this. This must be fixed of course.\n";
+
U_BOOT_CMD_START(cp)
.maxargs = CONFIG_MAXARGS,
.cmd = do_cp,
- .usage = "cp - copy files\n",
- U_BOOT_CMD_HELP("write me\n")
+ .usage = "copy files",
+ U_BOOT_CMD_HELP(cmd_cp_help)
U_BOOT_CMD_END
#ifndef CONFIG_CRC32_VERIFY
@@ -624,7 +656,7 @@ device_initcall(mem_init);
U_BOOT_CMD_START(cmp)
.maxargs = 4,
.cmd = do_mem_cmp,
- .usage = "cmp - memory compare\n",
+ .usage = "memory compare",
U_BOOT_CMD_HELP("write me\n")
U_BOOT_CMD_END
@@ -633,7 +665,7 @@ U_BOOT_CMD_END
U_BOOT_CMD_START(crc32)
.maxargs = 4,
.cmd = do_mem_crc,
- .usage = "crc32 - checksum calculation\n",
+ .usage = "checksum calculation",
U_BOOT_CMD_HELP("address count [addr]\n - compute CRC32 checksum [save at addr]\n")
U_BOOT_CMD_END
diff --git a/common/cmd_misc.c b/common/cmd_misc.c
index 63d0a6fdbe..cd14dc0f6b 100644
--- a/common/cmd_misc.c
+++ b/common/cmd_misc.c
@@ -55,7 +55,7 @@ int do_sleep (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(sleep)
.maxargs = 2,
.cmd = do_sleep,
- .usage = "sleep - delay execution for n secondsnn",
+ .usage = "delay execution for n seconds",
U_BOOT_CMD_END
#endif
@@ -71,7 +71,7 @@ int do_clear (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(clear)
.maxargs = 1,
.cmd = do_clear,
- .usage = "clear - clear screen\n",
+ .usage = "clear screen",
U_BOOT_CMD_END
#endif
@@ -86,7 +86,7 @@ int do_meminfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(meminfo)
.maxargs = 1,
.cmd = do_meminfo,
- .usage = "meminfo - print info about memory usage\n",
+ .usage = "print info about memory usage",
U_BOOT_CMD_END
#endif
@@ -97,7 +97,7 @@ int do_irqinfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
U_BOOT_CMD_START(irqinfo)
.maxargs = 1,
.cmd = do_irqinfo,
- .usage = "irqinfo - print information about IRQs\n",
+ .usage = "print information about IRQs",
U_BOOT_CMD_END
#endif /* CONFIG_COMMANDS & CFG_CMD_IRQ */
diff --git a/common/cmd_net.c b/common/cmd_net.c
index 4f7018143c..73681016db 100644
--- a/common/cmd_net.c
+++ b/common/cmd_net.c
@@ -96,7 +96,7 @@ int do_bootp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(bootp)
.maxargs = 3,
.cmd = do_bootp,
- .usage = "bootp\t- boot image via network using BootP/TFTP protocol\n",
+ .usage = "boot image via network using BootP/TFTP protocol",
U_BOOT_CMD_HELP("[loadAddress] [bootfilename]\n")
U_BOOT_CMD_END
@@ -105,11 +105,15 @@ int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return netboot_common (TFTP, cmdtp, argc, argv);
}
+static char cmd_tftpboot_help[] =
+"Usage: tftpboot <localfile> <remotefile>\n"
+"Load a file via network using BootP/TFTP protocol\n";
+
U_BOOT_CMD_START(tftpboot)
.maxargs = 3,
.cmd = do_tftpb,
- .usage = "tftpboot- boot image via network using TFTP protocol\n",
- U_BOOT_CMD_HELP("[loadAddress] [bootfilename]\n")
+ .usage = "boot image via network using TFTP protocol",
+ U_BOOT_CMD_HELP(cmd_tftpboot_help)
U_BOOT_CMD_END
int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -120,7 +124,7 @@ int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(rarpboot)
.maxargs = 3,
.cmd = do_rarpb,
- .usage = "rarpboot- boot image via network using RARP/TFTP protocol\n",
+ .usage = "boot image via network using RARP/TFTP protocol",
U_BOOT_CMD_HELP("[loadAddress] [bootfilename]\n")
U_BOOT_CMD_END
@@ -141,7 +145,7 @@ int do_dhcp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(dhcp)
.maxargs = 3,
.cmd = do_dhcp,
- .usage = "dhcp\t- invoke DHCP client to obtain IP/boot params\n",
+ .usage = "invoke DHCP client to obtain IP/boot params",
U_BOOT_CMD_END
#endif /* CONFIG_NET_DHCP */
@@ -155,7 +159,7 @@ int do_nfs (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(nfs)
.maxargs = 3,
.cmd = do_nfs,
- .usage = "nfs\t- boot image via network using NFS protocol\n",
+ .usage = "boot image via network using NFS protocol",
U_BOOT_CMD_HELP("[loadAddress] [host ip addr:bootfilename]\n")
U_BOOT_CMD_END
@@ -238,7 +242,7 @@ int do_cdp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(cdp)
.maxargs = 1,
.cmd = do_cdp,
- .usage = "cdp\t- Perform CDP network configuration\n",
+ .usage = "Perform CDP network configuration",
U_BOOT_CMD_HELP("[loadAddress] [host ip addr:bootfilename]\n")
U_BOOT_CMD_END
diff --git a/common/command.c b/common/command.c
index 3e5440e816..dfe672f2ac 100644
--- a/common/command.c
+++ b/common/command.c
@@ -42,7 +42,7 @@ do_version (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(version)
.maxargs = 1,
.cmd = do_version,
- .usage = "version - print monitor version\n",
+ .usage = "print monitor version",
U_BOOT_CMD_END
int
@@ -54,7 +54,7 @@ do_true (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(true)
.maxargs = 1,
.cmd = do_true,
- .usage = "true - return 0\n",
+ .usage = "do nothing, successfully",
U_BOOT_CMD_END
int
@@ -66,7 +66,7 @@ do_false (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(false)
.maxargs = 1,
.cmd = do_false,
- .usage = "false - return 1\n",
+ .usage = "do nothing, unsuccessfully",
U_BOOT_CMD_END
#ifdef CONFIG_HUSH_PARSER
@@ -77,7 +77,7 @@ do_readline (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
char *buf = xzalloc(CONFIG_CBSIZE);
if (argc < 3) {
- printf ("Usage:\n%s\n", cmdtp->usage);
+ u_boot_cmd_usage(cmdtp);
return 1;
}
@@ -92,10 +92,15 @@ do_readline (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 0;
}
+static char cmd_readline_help[] =
+"Usage: readline <prompt> VAR\n"
+"readline reads a line of user input into variable VAR.\n";
+
U_BOOT_CMD_START(readline)
.maxargs = 3,
.cmd = do_readline,
- .usage = "readline - \n",
+ .usage = "prompt for user input",
+ U_BOOT_CMD_HELP(cmd_readline_help)
U_BOOT_CMD_END
int
@@ -225,9 +230,9 @@ U_BOOT_CMD_START(test)
.aliases = test_aliases,
.maxargs = CONFIG_MAXARGS,
.cmd = do_test,
- .usage = "test - minimal test like /bin/sh\n",
+ .usage = "minimal test like /bin/sh",
U_BOOT_CMD_HELP(
- "[args..]\n"
+ "[args..]\n"
" - test functionality\n")
U_BOOT_CMD_END
@@ -238,119 +243,97 @@ do_exit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
r = 0;
if (argc > 1)
- r = simple_strtoul(argv[1], NULL, 10);
+ r = simple_strtoul(argv[1], NULL, 0);
return -r - 2;
}
U_BOOT_CMD_START(exit)
- .maxargs = 1,
+ .maxargs = 2,
.cmd = do_exit,
- .usage = "exit - exit script\n",
+ .usage = "exit script",
U_BOOT_CMD_END
#endif
-#ifdef CONFIG_CMD_HELP
+void u_boot_cmd_usage(cmd_tbl_t *cmdtp)
+{
+#ifdef CONFIG_LONGHELP
+ /* found - print (long) help info */
+ if (cmdtp->help) {
+ puts (cmdtp->help);
+ } else {
+ puts (cmdtp->name);
+ putc (' ');
+ puts ("- No help available.\n");
+ }
+ putc ('\n');
+#else /* no long help available */
+ if (cmdtp->usage)
+ puts (cmdtp->usage);
+#endif /* CONFIG_LONGHELP */
+}
+
/*
* Use puts() instead of printf() to avoid printf buffer overflow
* for long help messages
*/
int do_help (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
{
- int i;
- int rcode = 0;
-
if (argc == 1) { /*show list of commands */
-
int cmd_items = &__u_boot_cmd_end -
&__u_boot_cmd_start; /* pointer arith! */
- cmd_tbl_t *cmd_array[cmd_items];
- int i, j, swaps;
+ int i;
- /* Make array of commands from .uboot_cmd section */
+ /* No need to sort the command list. The linker already did
+ * this for us.
+ */
cmdtp = &__u_boot_cmd_start;
for (i = 0; i < cmd_items; i++) {
- cmd_array[i] = cmdtp++;
- }
-
- /* Sort command list (trivial bubble sort) */
- for (i = cmd_items - 1; i > 0; --i) {
- swaps = 0;
- for (j = 0; j < i; ++j) {
- if (strcmp (cmd_array[j]->name,
- cmd_array[j + 1]->name) > 0) {
- cmd_tbl_t *tmp;
- tmp = cmd_array[j];
- cmd_array[j] = cmd_array[j + 1];
- cmd_array[j + 1] = tmp;
- ++swaps;
- }
- }
- if (!swaps)
- break;
- }
-
- /* print short help (usage) */
- for (i = 0; i < cmd_items; i++) {
- const char *usage = cmd_array[i]->usage;
+ /* print short help (usage) */
/* allow user abort */
if (ctrlc ())
return 1;
- if (usage == NULL)
+ if (!cmdtp->usage)
continue;
- puts (usage);
+ printf("%10s - %s\n", cmdtp->name, cmdtp->usage);
+ cmdtp++;
}
return 0;
}
/*
* command help (long version)
*/
- for (i = 1; i < argc; ++i) {
- if ((cmdtp = find_cmd (argv[i])) != NULL) {
-#ifdef CONFIG_LONGHELP
- /* found - print (long) help info */
- puts (cmdtp->name);
- putc (' ');
- if (cmdtp->help) {
- puts (cmdtp->help);
- } else {
- puts ("- No help available.\n");
- rcode = 1;
- }
- putc ('\n');
-#else /* no long help available */
- if (cmdtp->usage)
- puts (cmdtp->usage);
-#endif /* CONFIG_LONGHELP */
- } else {
- printf ("Unknown command '%s' - try 'help'"
- " without arguments for list of all"
- " known commands\n\n", argv[i]
- );
- rcode = 1;
- }
+ 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;
}
- return rcode;
}
-char *help_aliases[] = { "?", NULL};
+static 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 char *help_aliases[] = { "?", NULL};
U_BOOT_CMD_START(help)
.maxargs = 2,
.cmd = do_help,
.aliases = help_aliases,
- .usage = "help - print online help\n",
- U_BOOT_CMD_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")
+ .usage = "print online help",
+ U_BOOT_CMD_HELP(cmd_help_help)
U_BOOT_CMD_END
-#endif /* CONFIG_CMD_HELP */
/***************************************************************************
* find command table entry for a command
diff --git a/common/env.c b/common/env.c
index 7d5a02162f..e8f841e46b 100644
--- a/common/env.c
+++ b/common/env.c
@@ -129,7 +129,7 @@ int do_printenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(printenv)
.maxargs = CONFIG_MAXARGS,
.cmd = do_printenv,
- .usage = "printenv- print environment variables\n",
+ .usage = "print environment variables",
U_BOOT_CMD_HELP(
"\n - print values of all environment variables\n"
"printenv name ...\n"
@@ -152,7 +152,7 @@ int do_setenv ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD_START(setenv)
.maxargs = CONFIG_MAXARGS,
.cmd = do_setenv,
- .usage = "setenv - set environment variables\n",
+ .usage = "set environment variables",
U_BOOT_CMD_HELP(
"name value ...\n"
" - set environment variable 'name' to 'value ...'\n"
diff --git a/common/environment.c b/common/environment.c
index 0e1b475e01..416eb060d9 100644
--- a/common/environment.c
+++ b/common/environment.c
@@ -97,6 +97,7 @@ out:
#ifdef __U_BOOT__
int do_saveenv(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
+ int ret;
char *filename, *dirname;
printf("saving environment\n");
@@ -109,13 +110,24 @@ int do_saveenv(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
else
filename = argv[1];
- return envfs_save(filename, dirname);
+ ret = envfs_save(filename, dirname);
+ if (ret)
+ printf("saveenv failed\n");
+ return ret;
}
+static char cmd_saveenv_help[] =
+"Usage: saveenv [DIRECTORY] [ENVFS]\n"
+"Save the files in <directory> to the persistent storage device <envfs>.\n"
+"<envfs> is normally a block in flash, but could be any other file.\n"
+"If ommitted <directory> defaults to /env and <envfs> defaults to /dev/env0.\n"
+"Note that envfs can only handle files. Directories are skipped silently.\n";
+
U_BOOT_CMD_START(saveenv)
.maxargs = 3,
.cmd = do_saveenv,
- .usage = "saveenv - save environment to persistent storage\n",
+ .usage = "save environment to persistent storage",
+ U_BOOT_CMD_HELP(cmd_saveenv_help)
U_BOOT_CMD_END
#endif /* __U_BOOT__ */
@@ -208,9 +220,17 @@ int do_loadenv(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return envfs_load(filename, dirname);
}
+static char cmd_loadenv_help[] =
+"Usage: loadenv [DIRECTORY] [ENVFS]\n"
+"Load the persistent storage contained in <envfs> to the directory\n"
+"<directory>.\n"
+"If ommitted <directory> defaults to /env and <envfs> defaults to /dev/env0.\n"
+"Note that envfs can only handle files. Directories are skipped silently.\n";
+
U_BOOT_CMD_START(loadenv)
.maxargs = 3,
.cmd = do_loadenv,
- .usage = "loadenv - load environment from persistent storage\n",
+ .usage = "load environment from persistent storage",
+ U_BOOT_CMD_HELP(cmd_loadenv_help)
U_BOOT_CMD_END
#endif /* __U_BOOT__ */
diff --git a/common/partition.c b/common/partition.c
index e27010d577..15d44305f1 100644
--- a/common/partition.c
+++ b/common/partition.c
@@ -35,18 +35,21 @@ struct device_d *dev_add_partition(struct device_d *dev, unsigned long offset, s
return 0;
}
-static void dev_del_partitions(struct device_d *dev)
+static void dev_del_partitions(struct device_d *physdev)
{
- struct device_d *p;
+ struct device_d *dev;
char buf[MAX_DRIVER_NAME];
int i = 0;
/* This is lame. Devices should to able to have children */
- while(1) {
- sprintf(buf, "%s.%d", dev->id, i);
- p = device_from_spec_str(buf, NULL);
- if (p)
- unregister_device(p);
+ while (1) {
+ sprintf(buf, "%s.%d", physdev->id, i);
+ dev = device_from_spec_str(buf, NULL);
+ if (dev) {
+ struct partition *part = dev->type_data;
+ unregister_device(dev);
+ free(part);
+ }
else
break;
i++;
@@ -58,7 +61,6 @@ int mtd_part_do_parse_one (struct partition *part, const char *str, char **endp)
ulong size;
char *end;
char buf[MAX_DRIVER_NAME];
- int ro = 0;
memset(buf, 0, MAX_DRIVER_NAME);
@@ -95,7 +97,7 @@ int mtd_part_do_parse_one (struct partition *part, const char *str, char **endp)
str = end;
if (*str == 'r' && *(str + 1) == 'o') {
- ro = 1;
+ part->readonly = 1;
end = (char *)(str + 2);
}
@@ -165,6 +167,25 @@ int do_addpart ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 0;
}
+static char cmd_addpart_help[] =
+"Usage: addpart <partition description>\n"
+"addpart adds a partition description to a device. The partition description\n"
+"has the form\n"
+"dev:size1(name1)[ro],size2(name2)[ro],...\n"
+"<dev> is the device name under /dev. Size can be given in decimal or if\n"
+"prefixed with 0x in hex. Sizes can have an optional suffix K,M,G. The size\n"
+"of the last partition can be specified as '-' for the remaining space of the\n"
+"device.\n"
+"This format is the same as used in the Linux kernel for cmdline mtd partitions.\n"
+"Note That this command has to be reworked and will probably change it's API.";
+
+U_BOOT_CMD_START(addpart)
+ .maxargs = 2,
+ .cmd = do_addpart,
+ .usage = "add a partition table to a device",
+ U_BOOT_CMD_HELP(cmd_addpart_help)
+U_BOOT_CMD_END
+
int do_delpart ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
struct device_d *dev;
@@ -185,27 +206,19 @@ int do_delpart ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 0;
}
-U_BOOT_CMD_START(addpart)
- .maxargs = 2,
- .cmd = do_addpart,
- .usage = "addpart - add a partition table to a device\n",
-U_BOOT_CMD_END
+static char cmd_delpart_help[] =
+"Usage: delpart <dev>\n"
+"Delete partitions previously added to a device with addpart.\n"
+"Note: You have to specify the device as 'devid', _not_ as '/dev/devid'. This\n"
+"will likely change soon.\n";
U_BOOT_CMD_START(delpart)
.maxargs = 2,
.cmd = do_delpart,
- .usage = "delpart - delete a partition table from a device\n",
+ .usage = "delete a partition table from a device",
+ U_BOOT_CMD_HELP(cmd_delpart_help)
U_BOOT_CMD_END
-static int part_probe(struct device_d *dev)
-{
- struct partition *part = dev->type_data;
-
- printf("registering partition %s on device %s (size=0x%08x, name=%s)\n",
- dev->id, part->physdev->id, dev->size, part->name);
- return 0;
-}
-
static int part_erase(struct device_d *dev, size_t count, unsigned long offset)
{
struct partition *part = dev->type_data;
@@ -227,15 +240,33 @@ static ssize_t part_write(struct device_d *dev, const void *buf, size_t count, u
{
struct partition *part = dev->type_data;
- return dev_write(part->physdev, buf, count, offset + part->offset, flags);
+ if (part->readonly)
+ return -EROFS;
+ else
+ return dev_write(part->physdev, buf, count, offset + part->offset, flags);
+}
+
+static int part_probe(struct device_d *dev)
+{
+ struct partition *part = dev->type_data;
+
+ printf("registering partition %s on device %s (size=0x%08x, name=%s)\n",
+ dev->id, part->physdev->id, dev->size, part->name);
+ return 0;
+}
+
+static int part_remove(struct device_d *dev)
+{
+ return 0;
}
struct driver_d part_driver = {
- .name = "partition",
- .probe = part_probe,
- .read = part_read,
- .write = part_write,
- .erase = part_erase,
+ .name = "partition",
+ .probe = part_probe,
+ .remove = part_remove,
+ .read = part_read,
+ .write = part_write,
+ .erase = part_erase,
};
static int partition_init(void)