资源描述:
《uboot笔记uboot命令分析实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、uboot笔记:uboot命令分析+实现■Ubootuboot命令分析+实现先贴一个重要结构,位于uboot/include/command.这个结构代表每个uboot命令structcmdtbls{MMVchar*name;/*CommandName*/intmaxargs;/*maximumnumberofarguments*/intrepeatable;/*autorepeatallowed?*//*Implementationfunction*/int(*cmd)(structcmd_tbl_s*,int,
2、int,char*[]);char*usage;/*Usagemessage(short)简短用法信息*/#ifdefCFG_LONGHELPchar*help;/*Helpmessage(long)长的帮助信息*/#endif#ifdefCONFIG_AUTO_COMPLETE/*doautocompletiononthearguments*/int(*complete)(intarge,char*argv[],charlast_charintmaxv,char*cmdv[]);#endif};typedefst
3、ructcmd_tbl_scmd_tbl_t;uboot的第一阶段:硬件相关初始化©.reset执行arm920t/start.s过程如下1•设置cpusvc管理模式2•关看门狗中断』mu等3・设置时钊Ssdram,夕卜部总线4•代码重定位,搬运代码,从flash到sdram5•设置栈,bss段清零,bss用于未初始化的全局变量和静态变量6・ldrpc,_start_armboot即进入uboot启动的第二阶段,调用c函数start_armboot()从start_armboot开始经过一系列外设初始化比如fals
4、h_initnand_init•••最后循环调用mian_loop()main_loop主要流程1.生成环境变量mtdparts^调用mtdparts_init2.在启动过程中若无空格键按下则boot—Zlmage,即run_command(getenv("bootcmd"),0)有空格键按卜则run_command("menu",0)3・shellil程,读取用户的输入并执行相应的命令{从控制台获得命令,保存在全局变量comsole_buffer中解析命令行字符串,分割命令与参数,最后执行run_command(
5、...);}}也就是说在mian_loop屮,是处理坏境变量和控制台人机交互,mian_loop调用readline()读取命令行到console_buffer,再把console_buffer复制到lastcommand屮去,还要设置flag,最后调用run_command(lastcommand,flag)函数,run_command(lastcommand,flag)函数1+1,首先定义cmd_tbl_t*cmdtp,再扁需命令行。一一再调用find_cmd(argv[0])函数,其中argv[0]应该是命令
6、本身,参数已经被剥离,这个函数返回的是一个cmd_tbl_t结构体,就是说每个命令都有一个cmd_tbl_t结构体相对应,关于run_command函数后面再分析mian_loop中有#defineCONFIG_BOOTDELAY3//设置启动延时时间//如果延时大于等于零,并且没有在延时过程中接收到按键,则引导内核if(bootdelay>=0&&s&&!abortboot(bootdelay)){//#ifdefCONFIG_AUTOBOOT_KEYEDintprev=disable_ctrlc(l);/*di
7、sableControlCchecking*/#endif//状态设置#ifndefCFG_HUSH_PARSER{printf("BootingLinux...");//启动linuxrun_command(s,0);//运行引导内核的命令,s=getenv("bootcmd")}加载linux内核时将使用变量"bootcmd"和"bootargs",变量"bootcmd"和"bootargs"的值可以在在加载linux内核前,uboot的命令控制台中进行修改bootcmd=nandread.jffs20X3
8、0007FC0kernel;bootm0X30007FC0第一条命令从flash±读出内核kernel是一个分区标志第二条命令启动命令指示了启动地址而bootargs是其它参数信息而run_command(getenv(nbootcmd"),flag)bootcmd中的bootm,l!卩bootappliestionimagefrommemory参数形式:"