blob: 1d29c4d91dddf9b1552f8b8f26aa5596a94f9077 [file] [log] [blame]
Heinrich Schuchardt3d9640f2018-05-10 15:57:27 +02001Command definition
2------------------
wdenk0d498392003-07-01 21:06:45 +00003
4Commands are added to U-Boot by creating a new command structure.
Heinrich Schuchardt3d9640f2018-05-10 15:57:27 +02005This is done by first including command.h, then using the U_BOOT_CMD() or the
6U_BOOT_CMD_COMPLETE macro to fill in a cmd_tbl_t struct.
wdenk0d498392003-07-01 21:06:45 +00007
Heinrich Schuchardt3d9640f2018-05-10 15:57:27 +02008U_BOOT_CMD(name, maxargs, repeatable, command, "usage", "help")
9U_BOOT_CMD_COMPLETE(name, maxargs, repeatable, command, "usage, "help", comp)
wdenk0d498392003-07-01 21:06:45 +000010
Heinrich Schuchardt3d9640f2018-05-10 15:57:27 +020011name: The name of the command. THIS IS NOT a string.
wdenk0d498392003-07-01 21:06:45 +000012
Heinrich Schuchardt3d9640f2018-05-10 15:57:27 +020013maxargs: The maximum number of arguments this function takes including
14 the command itself.
wdenk0d498392003-07-01 21:06:45 +000015
Heinrich Schuchardt3d9640f2018-05-10 15:57:27 +020016repeatable: Either 0 or 1 to indicate if autorepeat is allowed.
17
18command: Pointer to the command function. This is the function that is
19 called when the command is issued.
20
21usage: Short description. This is a string.
22
23help: Long description. This is a string. The long description is
24 only available if CONFIG_SYS_LONGHELP is defined.
25
26comp: Pointer to the completion function. May be NULL.
27 This function is called if the user hits the TAB key while
28 entering the command arguments to complete the entry. Command
29 completion is only available if CONFIG_AUTO_COMPLETE is defined.
30
31Command function
32----------------
33
34The commmand function pointer has to be of type
35int (*cmd)(struct cmd_tbl_s *cmdtp, int flag, int argc, const char *argv[]);
36
37cmdtp: Table entry describing the command (see above).
38
39flag: A bitmap which may contain the following bit:
40 CMD_FLAG_REPEAT - The last command is repeated.
41 CMD_FLAG_BOOTD - The command is called by the bootd command.
42 CMD_FLAG_ENV - The command is called by the run command.
43
44argc: Number of arguments including the command.
45
46argv: Arguments.
47
48Allowable return value are:
49
50CMD_SUCCESS The command was successfully executed.
51
52CMD_FAILURE The command failed.
53
54CMD_RET_USAGE The command was called with invalid parameters. This value
55 leads to the display of the usage string.
56
57Completion function
58-------------------
59
60The completion function pointer has to be of type
61int (*complete)(int argc, char *const argv[], char last_char,
62 int maxv, char *cmdv[]);
63
64argc: Number of arguments including the command.
65
66argv: Arguments.
67
68last_char: The last character in the command line buffer.
69
70maxv: Maximum number of possible completions that may be returned by
71 the function.
72
73cmdv: Used to return possible values for the last argument. The last
74 possible completion must be followed by NULL.
75
76The function returns the number of possible completions (without the terminating
77NULL value).
78
79Behind the scene
80----------------
wdenk0d498392003-07-01 21:06:45 +000081
Albert ARIBAUDef123c52013-02-25 00:59:00 +000082The structure created is named with a special prefix and placed by
83the linker in a special section using the linker lists mechanism
84(see include/linker_lists.h)
wdenk0d498392003-07-01 21:06:45 +000085
86This makes it possible for the final link to extract all commands
87compiled into any object code and construct a static array so the
Albert ARIBAUDef123c52013-02-25 00:59:00 +000088command array can be iterated over using the linker lists macros.
wdenk0d498392003-07-01 21:06:45 +000089
Albert ARIBAUDef123c52013-02-25 00:59:00 +000090The linker lists feature ensures that the linker does not discard
91these symbols when linking full U-Boot even though they are not
92referenced in the source code as such.
Tom Rini2d1d6582012-09-20 06:02:43 +000093
wdenk0d498392003-07-01 21:06:45 +000094If a new board is defined do not forget to define the command section
Masahiro Yamada4379ac62014-03-11 11:05:19 +090095by writing in u-boot.lds ($(srctree)/board/boardname/u-boot.lds) these
wdenk0d498392003-07-01 21:06:45 +0000963 lines:
97
Marek Vasut6c7c9462012-10-12 10:27:04 +000098 .u_boot_list : {
Albert ARIBAUDef123c52013-02-25 00:59:00 +000099 KEEP(*(SORT(.u_boot_list*)));
Marek Vasut6c7c9462012-10-12 10:27:04 +0000100 }