




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
main_loop()函数做的都是与具体平台无关的工作,主要包括初始化启动次数限制机制、设置软件版本号、打印启动信息、解析命令等。(1)设置启动次数有关参数。在进入main_loop()函数后,首先是根据配置加载已经保留的启动次数,并且根据配置判断是否超过启动次数。代码如下:295voidmain_loop(void) 296 297#ifndefCFG_HUSH_PARSER 298staticcharlastcommandCFG_CBSIZE=0,; 299intlen; 300intrc=1; 301intflag; 302#endif 303 304#ifdefined(CONFIG_BOOTDELAY)&(CONFIG_BOOTDELAY=0) 305char*s; 306intbootdelay; 307#endif 308#ifdefCONFIG_PREBOOT 309char*p; 310#endif 311#ifdefCONFIG_BOOTCOUNT_LIMIT 312unsignedlongbootcount=0; 313unsignedlongbootlimit=0; 314char*bcs; 315charbcs_set16; 316#endif/*CONFIG_BOOTCOUNT_LIMIT*/ 317 318#ifdefined(CONFIG_VFD)&defined(VFD_TEST_LOGO) 319ulongbmp=0;/*defaultbitmap*/ 320externinttrab_vfd(ulongbitmap); 321 322#ifdefCONFIG_MODEM_SUPPORT 323if(do_mdm_init) 324bmp=1;/*alternatebitmap*/ 325#endif 326trab_vfd(bmp); 327#endif/*CONFIG_VFD&VFD_TEST_LOGO*/ 328 329#ifdefCONFIG_BOOTCOUNT_LIMIT 330bootcount=bootcount_load();/加载保存的启动次数 331bootcount+;/启动次数加1 332bootcount_store(bootcount);/更新启动次数 333sprintf(bcs_set,%lu,bootcount);/打印启动次数 334setenv(bootcount,bcs_set); 335bcs=getenv(bootlimit); 336bootlimit=bcs?simple_strtoul(bcs,NULL,10):0; /转换启动次数字符串为UINT类型 337#endif/*CONFIG_BOOTCOUNT_LIMIT*/第329337行是启动次数限制功能,启动次数限制可以被用户设置一个启动次数,然后保存在Flash存储器的特定位置,当到达启动次数后,U-Boot无法启动。该功能适合一些商业产品,通过配置不同的License限制用户重新启动系统。(2)程序第339348行是Modem功能。如果系统中有Modem,打开该功能可以接受其他用户通过电话网络的拨号请求。Modem功能通常供一些远程控制的系统使用,代码如下:339#ifdefCONFIG_MODEM_SUPPORT 340debug(DEBUG:main_loop:do_mdm_init=%dn,do_mdm_init); 341if(do_mdm_init)/判断是否需要初始化Modem 342char*str=strdup(getenv(mdm_cmd);/获取Modem参数 343setenv(preboot,str);/*setordeletedefinition*/ 344if(str!=NULL) 345free(str); 346mdm_init();/*waitformodemconnection*/初始化Modem 347 348#endif/*CONFIG_MODEM_SUPPORT*/(3)接下来设置U-Boot的版本号,初始化命令自动完成功能等。代码如下:350#ifdefCONFIG_VERSION_VARIABLE 351 352externcharversion_string; 353 354setenv(ver,version_string);/*setversionvariable*/ /设置版本号 355 356#endif/*CONFIG_VERSION_VARIABLE*/ 357 358#ifdefCFG_HUSH_PARSER 359u_boot_hush_start();/初始化Hash功能 360#endif 361 362#ifdefCONFIG_AUTO_COMPLETE 363install_auto_complete();/初始化命令自动完成功能 364#endif 365 366#ifdefCONFIG_PREBOOT 367if(p=getenv(preboot)!=NULL) 368#ifdefCONFIG_AUTOBOOT_KEYED 369intprev=disable_ctrlc(1);/*disableControlCchecking*/ /关闭Crtl+C组合键 370#endif 371 372#ifndefCFG_HUSH_PARSER 373run_command(p,0);/运行Boot参数 374#else 375parse_string_outer(p,FLAG_PARSE_SEMICOLON| 376FLAG_EXIT_FROM_LOOP); 377#endif 378 379#ifdefCONFIG_AUTOBOOT_KEYED 380disable_ctrlc(prev);/*restoreControlCchecking*/ /恢复Ctrl+C组合键 381#endif 382 383#endif/*CONFIG_PREBOOT*/程序第350356行是动态版本号功能支持代码,version_string变量是在其他文件定义的一个字符串变量,当用户改变U-Boot版本的时候会更新该变量。打开动态版本支持功能后,U-Boot在启动的时候会显示最新的版本号。程序第363行设置命令行自动完成功能,该功能与Linux的shell类似,当用户输入一部分命令后,可以通过按下键盘上的Tab键补全命令的剩余部分。main_loop()函数不同的功能使用宏开关控制不仅能提高代码模块化,更主要的是针对嵌入式系统Flash存储器大小设计的。在嵌入式系统上,不同的系统Flash存储空间不同。对于一些Flash空间比较紧张的设备来说,通过宏开关关闭一些不是特别必要的功能如命令行自动完成,可以减小U-Boot编译后的文件大小。(4)在进入主循环之前,如果配置了启动延迟功能,需要等待用户从串口或者网络接口输入。如果用户按下任意键打断,启动流程,会向终端打印出一个启动菜单。代码如下:385#ifdefined(CONFIG_BOOTDELAY)&(CONFIG_BOOTDELAY=0) 386s=getenv(bootdelay); 387bootdelay=s?(int)simple_strtol(s,NULL,10):CONFIG_BOOTDELAY; /启动延迟 388 389debug(#main_loopentered:bootdelay=%dnn,bootdelay); 390 391#ifdefCONFIG_BOOT_RETRY_TIME 392init_cmd_timeout();/初始化命令行超时机制 393#endif/*CONFIG_BOOT_RETRY_TIME*/ 394 395#ifdefCONFIG_BOOTCOUNT_LIMIT 396if(bootlimit&(bootcountbootlimit)/检查是否超出启动次数限制 397printf(Warning:Bootlimit(%u)exceeded.Usingaltbootcmd.n, 398(unsigned)bootlimit); 399s=getenv(altbootcmd); 400 401else 402#endif/*CONFIG_BOOTCOUNT_LIMIT*/ 403s=getenv(bootcmd);/获取启动命令参数 404 405debug(#main_loop:bootcmd=%sn,s?s:); 406 407if(bootdelay=0&s&!abortboot(bootdelay) /检查是否支持启动延迟功能 408#ifdefCONFIG_AUTOBOOT_KEYED 409intprev=disable_ctrlc(1);/*disableControlCchecking*/ /关闭Ctrl+C组合键 410#endif 411 412#ifndefCFG_HUSH_PARSER 413run_command(s,0);/运行启动命令行 414#else 415parse_string_outer(s,FLAG_PARSE_SEMICOLON| 416FLAG_EXIT_FROM_LOOP); 417#endif 418 419#ifdefCONFIG_AUTOBOOT_KEYED 420disable_ctrlc(prev);/*restoreControlCchecking*/ /打开Ctrl+C组合键 421#endif 422 423 424#ifdefCONFIG_MENUKEY 425if(menukey=CONFIG_MENUKEY)/检查是否支持菜单键 426s=getenv(menucmd); 427if(s) 428#ifndefCFG_HUSH_PARSER 429run_command(s,0); 430#else 431parse_string_outer(s,FLAG_PARSE_SEMICOLON| 432FLAG_EXIT_FROM_LOOP); 433#endif 434 435 436#endif/*CONFIG_MENUKEY*/ 437#endif/*CONFIG_BOOTDELAY*/ 438 439#ifdefCONFIG_AMIGAONEG3SE 440 441externvoidvideo_banner(void); 442video_banner();/打印启动图标 443 444#endif(5)在各功能设置完毕后,程序第454行进入一个for死循环,该循环不断使用readline()函数(第463行)从控制台(一般是串口)读取用户的输入,然后解析。有关如何解析命令请参考U-Boot代码中run_command()函数的定义,本书不再赘述。代码如下:446/* 447*MainLoopforMonitorCommandProcessing 448*/ 449#ifdefCFG_HUSH_PARSER 450parse_file_outer(); 451/*Thispointisneverreached*/ 452for(;); 453#else 454for(;)/进入命令行循环 455#ifdefCONFIG_BOOT_RETRY_TIME 456if(rc=0) 457/*Sawenoughofavalidcommandto 458*restartthetimeout. 459*/ 460reset_cmd_timeout();/设置命令行超时 461 462#endif 463len=readline(CFG_PROMPT);/读取命令 464 465flag=0;/*assumenospecialflagsfornow*/ 466if(len0) 467strcpy(lastcommand,console_buffer); 468elseif(len=0) 469flag|=CMD_FLAG_REPEAT; 470#ifdefCONFIG_BOOT_RETRY_TIME 471elseif(len=-2) 472/*-2meanstimedout,retryautoboot 473*/ 474puts(nTimedoutwaitingforcommandn); 475#ifdefCONFIG_RESET_TO_RETRY 476/*Reinitboardtoruninitializationcodeagain*/ 477do_reset(NU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030工业自动化控制芯片设计架构演进方向白皮书
- 2025-2030工业自动化控制系统信息安全风险与防护方案研究报告
- 2025-2030工业级无人机在巡检领域应用成熟度评估报告
- 2025-2030工业物联网在机械制造领域应用现状及前景研究报告
- 机动车安全驾驶规范与考核练习
- 脑室引流护理技能操作考核题
- 夏季防暑降温健康知识测试题库
- 住宅楼梯扶手安全安装施工指导
- 粮食仓储管理技术问答汇编
- 室内设计项目策划与管理案例
- 路灯施工安全责任协议书
- 沪科版七年级上册初一数学全册教案(教学设计)
- 防止电力生产事故25项反措地重点要求最终版
- 第2章-信息可视化设计的概念、原则与类型60课件
- 日本蜡烛图技术完整版
- 崇义县凌志矿冶有限责任公司过埠铁木里铁矿(新增资源)采矿权出让收益评估报告
- 大学学生违纪处罚办法
- 癌痛规范化治疗课件资料
- 牛津9AU3-Head-to-head名师制作优质教学课件
- 深信服SDWAN产品介绍
- 雨露计划职业教育补助-学籍证明-模板四川优秀资料
评论
0/150
提交评论