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)
This commit is contained in:
parent
321dc1bf8f
commit
d5a108ece3
|
@ -83,7 +83,7 @@ SECTIONS
|
|||
__u_boot_initcalls : { INITCALLS }
|
||||
__u_boot_initcalls_end = .;
|
||||
__u_boot_cmd_start = .;
|
||||
__u_boot_cmd : { *(.u_boot_cmd) }
|
||||
__u_boot_cmd : { U_BOOT_CMDS }
|
||||
__u_boot_cmd_end = .;
|
||||
|
||||
__preinit_array_start = .;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
164
common/cmd_fs.c
164
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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
137
common/command.c
137
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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -9,3 +9,4 @@
|
|||
*(.initcall.6) \
|
||||
*(.initcall.7)
|
||||
|
||||
#define U_BOOT_CMDS *(SORT_BY_NAME(.u_boot_cmd*))
|
||||
|
|
|
@ -60,6 +60,7 @@ extern cmd_tbl_t __u_boot_cmd_end;
|
|||
|
||||
/* common/command.c */
|
||||
cmd_tbl_t *find_cmd(const char *cmd);
|
||||
void u_boot_cmd_usage(cmd_tbl_t *cmdtp);
|
||||
|
||||
#ifdef CONFIG_AUTO_COMPLETE
|
||||
extern void install_auto_complete(void);
|
||||
|
@ -89,12 +90,15 @@ typedef void command_t (cmd_tbl_t *, int, int, char *[]);
|
|||
* to include/cmd_confdefs.h
|
||||
*/
|
||||
|
||||
#define __stringify_1(x) #x
|
||||
#define __stringify(x) __stringify_1(x)
|
||||
|
||||
|
||||
#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))
|
||||
|
||||
#define U_BOOT_CMD_START(_name) \
|
||||
const cmd_tbl_t __u_boot_cmd_##_name \
|
||||
Struct_Section = { \
|
||||
__attribute__ ((unused,section (".u_boot_cmd_" __stringify(_name)))) = { \
|
||||
.name = #_name,
|
||||
|
||||
#define U_BOOT_CMD_END \
|
||||
|
|
|
@ -6,6 +6,8 @@ struct device_d;
|
|||
struct partition {
|
||||
int num;
|
||||
|
||||
int readonly;
|
||||
|
||||
unsigned long offset;
|
||||
|
||||
struct device_d *physdev;
|
||||
|
|
|
@ -127,12 +127,12 @@ int register_device(struct device_d *new_device)
|
|||
void unregister_device(struct device_d *old_dev)
|
||||
{
|
||||
struct device_d *dev;
|
||||
// printf("unregister_device: %s\n",old_dev->name);
|
||||
printf("unregister_device: %s\n",old_dev->name);
|
||||
|
||||
dev = first_device;
|
||||
|
||||
while (dev) {
|
||||
if (!strcmp(dev->next->name, old_dev->name)) {
|
||||
if (!strcmp(dev->next->id, old_dev->id)) {
|
||||
if (old_dev->driver)
|
||||
old_dev->driver->remove(old_dev);
|
||||
dev->next = old_dev->next;
|
||||
|
@ -521,8 +521,15 @@ int do_devinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
return 0;
|
||||
}
|
||||
|
||||
static char cmd_devinfo_help[] =
|
||||
"Usage: devinfo [DEVICE]\n"
|
||||
"If called without arguments devinfo shows a summary about known devices and\n"
|
||||
"drivers. If called with a device id as argument devinfo shows more detailed\n"
|
||||
"informations about this device and its parameters.\n";
|
||||
|
||||
U_BOOT_CMD_START(devinfo)
|
||||
.maxargs = 2,
|
||||
.cmd = do_devinfo,
|
||||
.usage = "devinfo - display info about devices and drivers\n",
|
||||
.usage = "display info about devices and drivers",
|
||||
U_BOOT_CMD_HELP(cmd_devinfo_help)
|
||||
U_BOOT_CMD_END
|
||||
|
|
|
@ -112,5 +112,5 @@ int do_ping (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
U_BOOT_CMD_START(ping)
|
||||
.maxargs = 2,
|
||||
.cmd = do_ping,
|
||||
.usage = "ping\t- send ICMP ECHO_REQUEST to network host\n",
|
||||
.usage = "send ICMP ECHO_REQUEST to network host",
|
||||
U_BOOT_CMD_END
|
||||
|
|
Loading…
Reference in New Issue