1 2Commands are added to U-Boot by creating a new command structure. 3This is done by first including command.h, then using the U_BOOT_CMD() macro 4to fill in a cmd_tbl_t struct. 5 6U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help") 7 8name: is the name of the commad. THIS IS NOT a string. 9maxargs: the maximum number of arguments this function takes 10repeatable: either 0 or 1 to indicate if autorepeat is allowed 11command: Function pointer (*cmd)(struct cmd_tbl_s *, int, int, char *[]); 12usage: Short description. This is a string 13help: Long description. This is a string 14 15 16**** Behind the scene ****** 17 18The structure created is named with a special prefix (__u_boot_cmd_) 19and placed by the linker in a special section. 20 21This makes it possible for the final link to extract all commands 22compiled into any object code and construct a static array so the 23command can be found in an array starting at __u_boot_cmd_start. 24 25To ensure that the linker does not discard these symbols when linking 26full U-Boot we generate a list of all the commands we have built (based 27on the sections mentioned above) and use that to force the linker to 28first enter the symbol as undefined in the output object so that there 29is then a need for the symbol to be kept (this is the UNDEF_SYM logic in 30the Makefile). 31 32If a new board is defined do not forget to define the command section 33by writing in u-boot.lds ($(TOPDIR)/board/boardname/u-boot.lds) these 343 lines: 35 36 __u_boot_cmd_start = .; 37 .u_boot_cmd : { *(.u_boot_cmd) } 38 __u_boot_cmd_end = .; 39