autoboot_command //自动执行bootcmd命令 run_command_list cli_loop // uboot命令处理函数 common/cli.c cmd_process()//处理命令,即执行命令。Uboot使用 U_BOOT_CMD 来定义一个命令。CONFIG_CMD_XXX来使能uboot中的某个命令。U_BOOT_CMD最终是定义了一个cmd_tbl_t类型的变量,所有的命令最终都是存放在.u...
从头理清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函数首先调用find_cmd函数根据传入的参数,在.u_boot_cmd段区域查找命令,如果没有找到对应的命令,打印出提示信息并返回。 如果找到则返回命令结构体 cmdtp,再检查传入参数的合法性,最后通过cmd_call函数调用命令响应函数(cmdtp->cmd)(cmdtp, flag, argc, argv)。 说明四 U-boot是通过执行u-boot提供...
2.10 cli_loop函数 2.12 cmd_process函数 在学习cmd_process 之前先看一下uboot中命令是如何定义的。uboot使用宏U_BOOT_CMD来定义命令,宏 U_BOOT_CMD 定义在文件 include/command.h 中 当我们在 uboot 的命令行中输入“dhcp”这个命令的时候,最终执行的是 do_dhcp 这个函数。总结一下,uboot 中使用 U_BOOT...
static int builtin_run_command(const char *cmd, int flag) { //合法性校验 while (*str) { //特殊字符解析 } process_macros (token, finaltoken); //宏展开,即完全解析命令 //命令执行过程 if (cmd_process(flag, argc, argv, &repeatable)) ...
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,执行相应的命令。 uboot启动Linux内核的过程: 自动模式 如果倒计时结束未按下任意键,会执行环境变量bootcmd内的命令启动Linux内核,由下图可知,bootcmd的内容是宏CONFIG_BOOTCOMMAND定义的 而CONFIG_BOOTCOMMAND是在XXX_defconfig内定义的
③、流程转到r builtin_run_command,经简化可得:这里所做的各种为完整解析命令,并调用函数去进一步执行。 ④、流程转到cmd_process,经简化可得:得到完整的命令和参数,执行命令。 至此,uboot的使命便完成了,将舞台交给linux。
enum command_ret_t cmd_process(int flag, int argc, char * const argv[], int *repeatable, ulong *ticks) { enum command_ret_t rc = CMD_RET_SUCCESS; cmd_tbl_t *cmdtp; #if defined(HUSH_CMDLINE_DBG) { int i; printf(" +-+"); for (i = 0; i < argc; ...
在uboot的顶层目录,使用grep -nr "_main"搜索一下。 可以看到有很多,根据实际情况,我们的芯片是32位的,所以定义应该是在 arch/arm/lib/crt0.S,然后我们分析下*arch/arm/lib/crt0.S*这个文件,以下带序号的是我增加的注释。 代码语言:javascript