uboot命令体系

学习uboot的命令体系,首先看一下结构体

uboot命令体系

name:命令名    

maxargs:命令最多的参数个数    

repeatable:是否支持可重复,就是什么都不输入按回车会继续执行上一条命令

cmd:执行命令的函数指针

usage:短说明,说明功能

help:长说明,说明用法

 

 

接下来,我们看一下命令是怎么定义的

uboot命令体系

将该宏定义展开

cmd_tbl_t __u_boot_cmd_##name __attribute__ ((unused,section (".u_boot_cmd"))) = {#name, maxargs, rep, cmd, usage, help}

例如:

uboot命令体系

展开之后得到

cmd_tbl_t __u_boot_cmd_version __attribute__ ((unused,section (".u_boot_cmd"))) = {“version”, 1, 1, do_version, "version - print monitor version\n", NULL}

我们看一下u-boot.lds,uboot自定义了一个.u_boot_cmd段。

uboot命令体系

结合展开的宏和链接脚本中的段可以看出,所有定义的命令都被链接到.u_boot_cmd段中。

 

 

接下来,我们分析一下run_command函数

uboot命令体系

查找分隔符或者字符串结尾,把一个完整的命令行截取出来

uboot命令体系

处理一些转义字符

uboot命令体系

将命令行中的参数提取出来

uboot命令体系

在.u_boot_cmd段中查找该命令

uboot命令体系

执行该命令