main_loop分析.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
main_loop分析

main_loop()函数main_loop()函数做的都是与具体平台无关的工作,主要包括初始化启动次数限制机制、设置软件版本号、打印启动信息、解析命令等。(1)设置启动次数有关参数。在进入main_loop()函数后,首先是根据配置加载已经保留的启动次数,并且根据配置判断是否超过启动次数。代码如下:295?void?main_loop?(void) ?296?{ ?297?#ifndef?CFG_HUSH_PARSER ?298???static?char?lastcommand[CFG_CBSIZE]?=?{?0,?}; ?299int?len; ?300int?rc?=?1; ?301int?flag; ?302?#endif?303304?#if?defined(CONFIG_BOOTDELAY)??(CONFIG_BOOTDELAY?=?0) ?305???char?*s; ?306int?bootdelay; ?307?#endif?308?#ifdef?CONFIG_PREBOOT ?309???char?*p; ?310?#endif?311?#ifdef?CONFIG_BOOTCOUNT_LIMIT ?312???unsigned?long?bootcount?=?0; ?313???unsigned?long?bootlimit?=?0; ?314???char?*bcs; ?315???char?bcs_set[16]; ?316?#endif?/*?CONFIG_BOOTCOUNT_LIMIT?*/ ?317318?#if?defined(CONFIG_VFD)??defined(VFD_TEST_LOGO) ?319ulong?bmp?=?0;????/*?default?bitmap?*/ ?320???extern?int?trab_vfd?(ulong?bitmap); ?321322?#ifdef?CONFIG_MODEM_SUPPORT ?323???if?(do_mdm_init) ?324?????bmp?=?1;??/*?alternate?bitmap?*/ ?325?#endif?326trab_vfd?(bmp); ?327?#endif?/*?CONFIG_VFD??VFD_TEST_LOGO?*/ ?328329?#ifdef?CONFIG_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?*/?第329~337行是启动次数限制功能,启动次数限制可以被用户设置一个启动次数,然后保存在Flash存储器的特定位置,当到达启动次数后,U-Boot无法启动。该功能适合一些商业产品,通过配置不同的License限制用户重新启动系统。(2)程序第339~348行是Modem功能。如果系统中有Modem,打开该功能可以接受其他用户通过电话网络的拨号请求。Modem功能通常供一些远程控制的系统使用,代码如下:339?#ifdef?CONFIG_MODEM_SUPPORT ?340???debug?(DEBUG:?main_loop:???do_mdm_init=%d\n,?do_mdm_init); ?341???if?(do_mdm_init)?{???????????????????????????//?判断是否需要初始化Modem ?342?????char?*str?=?strdup(getenv(mdm_cmd));?????//?获取Modem参数?343setenv?(preboot,?str);??/*?set?or?delete?definition?*/ ?344?????if?(str?!=?NULL) ?345???????free?(str); ?346mdm_init();?/*?wait?for?modem?connect

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档