微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > s3c6410 uboot代码分析

s3c6410 uboot代码分析

时间:11-09 来源:互联网 点击:

if判断为真,执行418行的run_command函数,这个函数很重要,是查找解析命令并执行的,所以我们还是看图吧:

run_command函数的1265行,设置ctrlc_was_pressed = 0,,这个变量标记ctrl+c没有被按下

1267行判断没有输入命令则返回-1

1271行判断我们输入的命令字符串是否大于我们定义的控制台buffer

1276行把命令拷贝到cmdbuf数组中

1285行是一个while循环,str指针指向cmdbuf

1291~1312用于查找“;”号,因为我们的命令可以使用“;”号来执行多条命令,就好像

在shell环境里你输入ls;cd,会先执行ls,然后又会执行cd

1324行process_macros是判断如果一条命令里面有两条命令,把第二条命令分离出来放到finaltoken数组中

1327行:parse_line函数解析字符串,并把解析出来的命令和参数放到argv中,parse_line是字符串解析,不贴图

1333行:是到.u_boot_cmd(u-boot.lds中定义)代码段中找匹配的命令

__u_boot_cmd_start和__u_boot_cmd_end两个全局变量是这个段的起始地址和结束地址

1340行:判断参数,如果所给的参数与实现命令的结构体中所指定的参数大小不一样,将调用命令中提供的usage函数

1346行如果定义了CFG_CMD_BOOTD,则在1348行判断执行的是do_bootd命令则执行1356行的flag

1363行,是真正去执行我们命令行所输入的命令

1370行,判断是否有ctrl+c按下,如果有run_command执行结束

再次退回main_loop函数,

449行:开始执行等待用户输入的操作,CFG_HUSH_PARSER没有定义,463行的代码会被执行,readline函数会答应命令行提示符

比如我设置的CFG_PROMPT值为ZC6410 #,将会在命令行打印ZC6410 #,然后等待用户输入;

467行:把console_buffer中的数据拷贝到lastcommand数组中,484行判断len是否为0,如果按下ctrl+c按键,这个值将会是-1,

因为前面代码serial驱动代码中是有这部分代码判断的,如果判断ctrl+c按下,则返回-1,这里的len值自然就是-1,如果ctrl+c按键

没有被按下,将执行run_command,执行用户输入的命令。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top