s3c6410 uboot代码分析
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,执行用户输入的命令。
s3c6410uboot代码分 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)