uboot命令体系
学习uboot的命令体系,首先看一下结构体
name:命令名
maxargs:命令最多的参数个数
repeatable:是否支持可重复,就是什么都不输入按回车会继续执行上一条命令
cmd:执行命令的函数指针
usage:短说明,说明功能
help:长说明,说明用法
接下来,我们看一下命令是怎么定义的
将该宏定义展开
cmd_tbl_t __u_boot_cmd_##name __attribute__ ((unused,section (".u_boot_cmd"))) = {#name, maxargs, rep, cmd, usage, help}
例如:
展开之后得到
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段。
结合展开的宏和链接脚本中的段可以看出,所有定义的命令都被链接到.u_boot_cmd段中。
接下来,我们分析一下run_command函数
查找分隔符或者字符串结尾,把一个完整的命令行截取出来
处理一些转义字符
将命令行中的参数提取出来
在.u_boot_cmd段中查找该命令
执行该命令