]>
Commit | Line | Data |
---|---|---|
3d9640f5 HS |
1 | Command definition |
2 | ------------------ | |
0d498393 WD |
3 | |
4 | Commands are added to U-Boot by creating a new command structure. | |
3d9640f5 HS |
5 | This is done by first including command.h, then using the U_BOOT_CMD() or the |
6 | U_BOOT_CMD_COMPLETE macro to fill in a cmd_tbl_t struct. | |
0d498393 | 7 | |
3d9640f5 HS |
8 | U_BOOT_CMD(name, maxargs, repeatable, command, "usage", "help") |
9 | U_BOOT_CMD_COMPLETE(name, maxargs, repeatable, command, "usage, "help", comp) | |
0d498393 | 10 | |
3d9640f5 | 11 | name: The name of the command. THIS IS NOT a string. |
0d498393 | 12 | |
3d9640f5 HS |
13 | maxargs: The maximum number of arguments this function takes including |
14 | the command itself. | |
0d498393 | 15 | |
3d9640f5 HS |
16 | repeatable: Either 0 or 1 to indicate if autorepeat is allowed. |
17 | ||
18 | command: Pointer to the command function. This is the function that is | |
19 | called when the command is issued. | |
20 | ||
21 | usage: Short description. This is a string. | |
22 | ||
23 | help: Long description. This is a string. The long description is | |
24 | only available if CONFIG_SYS_LONGHELP is defined. | |
25 | ||
26 | comp: 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 | ||
ca80b561 HS |
31 | Sub-command definition |
32 | ---------------------- | |
33 | ||
34 | Likewise an array of cmd_tbl_t holding sub-commands can be created using either | |
35 | of the following macros: | |
36 | ||
37 | * U_BOOT_CMD_MKENT(name, maxargs, repeatable, command, "usage", "help") | |
38 | * U_BOOT_CMD_MKENTCOMPLETE(name, maxargs, repeatable, command, "usage, "help", | |
39 | comp) | |
40 | ||
41 | This table has to be evaluated in the command function of the main command, e.g. | |
42 | ||
43 | static cmd_tbl_t cmd_sub[] = { | |
44 | U_BOOT_CMD_MKENT(foo, CONFIG_SYS_MAXARGS, 1, do_foo, "", ""), | |
45 | U_BOOT_CMD_MKENT(bar, CONFIG_SYS_MAXARGS, 1, do_bar, "", ""), | |
46 | }; | |
47 | ||
48 | static int do_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | |
49 | { | |
50 | cmd_tbl_t *cp; | |
51 | ||
52 | if (argc < 2) | |
53 | return CMD_RET_USAGE; | |
54 | ||
55 | /* drop sub-command argument */ | |
56 | argc--; | |
57 | argv++; | |
58 | ||
59 | cp = find_cmd_tbl(argv[0], cmd_ut_sub, ARRAY_SIZE(cmd_sub)); | |
60 | ||
61 | if (cp) | |
62 | return cp->cmd(cmdtp, flag, argc, argv); | |
63 | ||
64 | return CMD_RET_USAGE; | |
65 | } | |
66 | ||
3d9640f5 HS |
67 | Command function |
68 | ---------------- | |
69 | ||
f3ccba3e | 70 | The command function pointer has to be of type |
3d9640f5 HS |
71 | int (*cmd)(struct cmd_tbl_s *cmdtp, int flag, int argc, const char *argv[]); |
72 | ||
73 | cmdtp: Table entry describing the command (see above). | |
74 | ||
75 | flag: A bitmap which may contain the following bit: | |
76 | CMD_FLAG_REPEAT - The last command is repeated. | |
77 | CMD_FLAG_BOOTD - The command is called by the bootd command. | |
78 | CMD_FLAG_ENV - The command is called by the run command. | |
79 | ||
80 | argc: Number of arguments including the command. | |
81 | ||
82 | argv: Arguments. | |
83 | ||
84 | Allowable return value are: | |
85 | ||
86 | CMD_SUCCESS The command was successfully executed. | |
87 | ||
88 | CMD_FAILURE The command failed. | |
89 | ||
90 | CMD_RET_USAGE The command was called with invalid parameters. This value | |
91 | leads to the display of the usage string. | |
92 | ||
93 | Completion function | |
94 | ------------------- | |
95 | ||
96 | The completion function pointer has to be of type | |
97 | int (*complete)(int argc, char *const argv[], char last_char, | |
98 | int maxv, char *cmdv[]); | |
99 | ||
100 | argc: Number of arguments including the command. | |
101 | ||
102 | argv: Arguments. | |
103 | ||
104 | last_char: The last character in the command line buffer. | |
105 | ||
106 | maxv: Maximum number of possible completions that may be returned by | |
107 | the function. | |
108 | ||
109 | cmdv: Used to return possible values for the last argument. The last | |
110 | possible completion must be followed by NULL. | |
111 | ||
112 | The function returns the number of possible completions (without the terminating | |
113 | NULL value). | |
114 | ||
115 | Behind the scene | |
116 | ---------------- | |
0d498393 | 117 | |
ef123c52 AA |
118 | The structure created is named with a special prefix and placed by |
119 | the linker in a special section using the linker lists mechanism | |
120 | (see include/linker_lists.h) | |
0d498393 WD |
121 | |
122 | This makes it possible for the final link to extract all commands | |
123 | compiled into any object code and construct a static array so the | |
ef123c52 | 124 | command array can be iterated over using the linker lists macros. |
0d498393 | 125 | |
ef123c52 AA |
126 | The linker lists feature ensures that the linker does not discard |
127 | these symbols when linking full U-Boot even though they are not | |
128 | referenced in the source code as such. | |
2d1d6583 | 129 | |
0d498393 | 130 | If a new board is defined do not forget to define the command section |
4379ac61 | 131 | by writing in u-boot.lds ($(srctree)/board/boardname/u-boot.lds) these |
0d498393 WD |
132 | 3 lines: |
133 | ||
6c7c946c | 134 | .u_boot_list : { |
ef123c52 | 135 | KEEP(*(SORT(.u_boot_list*))); |
6c7c946c | 136 | } |