uboot学习之四《U_BOOT_CMD分析》

在include/command.h里面 #define U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd,\ _usage, _help, _comp)\ { #_name, _maxargs, _rep, _cmd, _usage,\ _CMD_HELP(_help) _CMD_CO...

在include/command.h里面

#define U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd,\

_usage, _help, _comp)\

{ #_name, _maxargs, _rep, _cmd, _usage,\

_CMD_HELP(_help) _CMD_COMPLETE(_comp) }


#define U_BOOT_CMD_MKENT(_name, _maxargs, _rep, _cmd, _usage, _help)\

U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd,\

_usage, _help, NULL)


#define U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, _comp) \

ll_entry_declare(cmd_tbl_t, _name, cmd) =\

U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd,\

_usage, _help, _comp);


#define U_BOOT_CMD(_name, _maxargs, _rep, _cmd, _usage, _help)\

U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, NULL)

在include/linker_lists.h里面

#define ll_entry_declare(_type, _name, _list)\

_type _u_boot_list_2_##_list##_2_##_name __aligned(4)\

__attribute__((unused,\

section(".u_boot_list_2_"#_list"_2_"#_name)))


现在来列举一个例子

U_BOOT_CMD(cls,1, 1, do_lcd_clear, "clear screen", "");

U_BOOT_CMD_COMPLETE(cls, 1, 1, do_lcd_clear, "clear screen", "", NULL)

ll_entry_declare(cmd_tbl_t, cls, cmd) =U_BOOT_CMD_MKENT_COMPLETE(cls, 1, 1, do_lcd_clear,"clear screen", "", NULL);

ll_entry_declare(cmd_tbl_t, cls, cmd) ="cls", 1, 1, do_lcd_clear,"clear screen", "", NULL);

cmd_tbl_t_u_boot_list_2_cmd_2__cls __aligned(4)\

__attribute__((unused,\

section(".u_boot_list_2_cmd_2_cls))) ="cls", 1, 1, do_lcd_clear,"clear screen", "", NULL);

在u-boot.lds中

 .u_boot_list : {

  KEEP(*(SORT(.u_boot_list*)));

 }



你可能感兴趣的文章

相关问题

0 条评论&回复

请先 登录 后评论
DebugArm
DebugArm

5 篇文章

作家榜 »

  1. 百问网-周老师 18 文章
  2. st_ashang 14 文章
  3. 渐进 12 文章
  4. zxq 11 文章
  5. helloworld 8 文章
  6. 谢工 5 文章
  7. Litchi_Zheng 5 文章
  8. DebugArm 5 文章