上一节说到,u-boot中最重要的就是命令,那么这些命令是怎么被识别并去执行相应的动作的,这里详细分析一下。
首先可以想象一下,u-boot需要完成对很多命令的响应,当用户输入一个命令时,它需要去解析识别该命令,然后调用与该命令相对应的函数(即执行相应的动作),由于命令有很多,命令与执行动作需要对应起来,所以这里应该是一个命令对应一个结构体,结构体里面至少包括两个变量:命令的名字name、命令对应函数指针void(*do_name)(void var)。输入命令,根据命令的名字去找到相对应的结构体,然后执行相关函数。
不管是启动内核还是响应控制界面,u-boot从串口获取到命令后,都是执行run_command()函数,去run_command()函数里看一下:
首把命令复制到 char *str,存起给后面使用
往下看:对命令进行分离并且支持";"分离命令
接着是: 提取参数,解析命令,解析完后,要去找到与这个命令对应的命令结构体cmd_tbl_t *cmdtp。如何找到?重点分析cmd_tbl_t *find_cmd (const char *cmd)这个函数
先看下结构体cmd_tbl_t ,在Command.h中定义: