从头理清uboot(3)-main_loop 及 CMD实现 1. main—loop 函数 2. cmd_process 函数分析 3. cmd 定义流程 1. main—loop 函数 上篇引导启动的分析最后会调用run_main_loop,在其中会循环调用main_loop()函数。见下方: staticintrun_main_loop(void) ...
cmd_process()//处理命令,即执行命令。Uboot使用 U_BOOT_CMD 来定义一个命令。CONFIG_CMD_XXX来使能uboot中的某个命令。U_BOOT_CMD最终是定义了一个cmd_tbl_t类型的变量,所有的命令最终都是存放在.u_boot_list段里面。cmd_tbl_t的cmd成员变量就是具体的命令执行函数,命令执行函数都是do_xxx。 如果本篇文...
cmd_process函数首先调用find_cmd函数根据传入的参数,在.u_boot_cmd段区域查找命令,如果没有找到对应的命令,打印出提示信息并返回。 如果找到则返回命令结构体 cmdtp,再检查传入参数的合法性,最后通过cmd_call函数调用命令响应函数(cmdtp->cmd)(cmdtp, flag, argc, argv)。 说明四 U-boot是通过执行u-boot提供...
2.12 cmd_process函数 在学习cmd_process 之前先看一下uboot中命令是如何定义的。uboot使用宏U_BOOT_CMD来定义命令,宏 U_BOOT_CMD 定义在文件 include/command.h 中 当我们在 uboot 的命令行中输入“dhcp”这个命令的时候,最终执行的是 do_dhcp 这个函数。总结一下,uboot 中使用 U_BOOT_CMD 来定义一个命...
static int builtin_run_command(const char *cmd, int flag) { //合法性校验 while (*str) { //特殊字符解析 } process_macros (token, finaltoken); //宏展开,即完全解析命令 //命令执行过程 if (cmd_process(flag, argc, argv, &repeatable)) ...
cmd_process(int flag, int argc, char * const argv[], int *repeatable) { cmd_tbl_t *cmdtp; cmdtp = find_cmd(argv[0]); //查找命令 if (cmdtp == NULL) { printf("Unknown command '%s' - try 'help'\n", argv[0]); return 1; ...
lowlevel_init.S,设计的操作和文件名吻合,即完成底层的初始化。 uboot流程第二阶段: ③、流程转到r builtin_run_command,经简化可得:这里所做的各种为完整解析命令,并调用函数去进一步执行。 ④、流程转到cmd_process,经简化可得:得到完整的命令和参数,执行命令。 至此,uboot的使命便完成了,将舞台交给linux。
三、cmd_process,执行相应的命令。 uboot启动Linux内核的过程: 自动模式 如果倒计时结束未按下任意键,会执行环境变量bootcmd内的命令启动Linux内核,由下图可知,bootcmd的内容是宏CONFIG_BOOTCOMMAND定义的 而CONFIG_BOOTCOMMAND是在XXX_defconfig内定义的
process_macros(token,finaltoken); if((argc=parse_line(finaltoken,argv))==0){ rc=-1; continue; } if((cmdtp=find_cmd(argv[0]))==NULL){ printf("Unknown command '%s' - try 'help'\n",argv[0]); rc=-1; continue; } 4.就此打断一下, 我们要分析一下find_cmd了, 不能再跳过了. ...
第6.7讲 Uboot启动流程详解-main_loop到cmd_process处理过程 38:50 第6.8讲 Uboot启动流程详解-bootz启动Linux过程详解1 26:39 第6.9讲 Uboot启动流程详解-bootz启动Linux过程详解2 31:01 第7.1讲 Uboot移植实验-NXP官方开发板uboot编译与测试 35:30 第7.2讲 Uboot移植实验-在Uboot中添加ALPHA开发板 ...