电视恢复出厂设置卡住不动怎么办 xr恢复出厂设置时卡住了怎么办
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
- 恢复出厂设置 卡住10分钟问题
- 1. 信息初步收集
- 1.1 现象描述
- 1.2 问题概率以及实验情况确认
- 2. 分析过程
- 2.1 确认recovery log信息情况
- 2.2 log分析
- 2.2.1 recovery 重启
- 2.2.2 recovery 清除操作
- 2.2.2.1 block 进入逻辑:
- 2.2.2.2 中间调度逻辑:
- 2.2.2.3 block 退出逻辑
- 3. 问题原因以及处理
- 3.1 原因
- 3.2 处理
- 3.3 记录
- 4. 涉及模块
- 4.1 mmc子系统架构
- 4.2 调度策略处理
- 恢复出厂设置操作;
- 重启进入recovery 清除data/cache分区;
- 概率性出现卡住10分钟后再次启动的情况;
- 反复进行恢复出厂设置动作,约半天出现一次;
- 仅有一台机器出现此case;
- recovery log没有抓取到;
- 正常进行recovery基本在1分钟左右;
从反馈现象分析存在两种可能性:
- recovery 逻辑中存在case,卡在某个逻辑中无法退出;
- 上述recovery逻辑主要为清除data分区内容,则可能在写emmc操作时出现问题卡住; 则需要log信息来进一步证实上述猜测情况;
当前机器中未保存recovery log,而分析问题需要该部分log信息,但是无法确认为个例问题还是普遍问题,则该机器软件环境需要尽可能小的改动;
- recovery log部分会在执行时生成,但是该部分log会在recovery完成后清除掉;
- 默认recovery为单独分区,但是AB版本recovery是打包在boot.img中的,修改后需要升级boot.img
- recovery部分code:bootable/recovery/recovery.cpp,目前直接将log修改为在串口输出;
2.2.1 recovery 重启
从log中找到最后3次重启,找到对应的recovery触发重启的操作:
-
触发recovery 重启;
[ 169.【【QQ微信】】] <0>.(0)[1:init]reboot: Restarting system with command ‘recovery’ [ 169.【【QQ微信】】] <0>-(0)[1:init]ARCH_RESET happen!!! [ 169.277142] <0>-(0)[1:init]arch_reset: cmd = recovery
-
重启到【【微信】】进入recovery 模块内进行清除分区操作;
-
清除结束后重启进入系统:
[ 659.【【QQ微信】】] 【【微信】】. … [ 659.383821] 【【微信】】… [ 661.897156] <1>.(1)[1:init]init: Recei【【微信】】.powerctl=‘reboot,’ from pid: 256 (/sbin/recovery) [ 661.【【QQ微信】】] <1>.(1)[1:init]init: PropSet [sys.powerctl]=[reboot,] Done [ 661.899163] <1>.(1)[1:init]init: Clear action 【【微信】】n trigger [ 661.900146] <1>.(1)[1:init]init: processing action (shutdown_done) from (:0) [ 661.901214] <1>.(1)[1:init]init: Reboot start, reason: reboot, rebootTarget: [ 661.902274] <1>.(1)[1:init]init: PropSet [persist.sys.boot.reason]=[reboot,] Done [ 661.903366] <1>.(1)[1:init]init: Shutdown timeout: 1000 ms
从时间戳可以看得出来,recovery清除操作这次启动时间约11min,则确认问题确实出现在此次recovery 清除逻辑;
2.2.2 recovery 清除操作
则分析这次数据清除逻辑,发现如下信息:
- 【【微信】】进入后30s左右提示emmc 写异常,device端没有回复信息,超时;
- 中间经过10分钟的系统调度;
- 最终emmc reset 恢复后recovery快速进行完重启
2.2.2.1 block 进入逻辑:
[ 37.【【QQ微信】】] <1>.(0)[210:kworker/0:2][msdc][msdc_check_data_timeout]: XXX DMA Data Busy Timeout: 30000 ms, CMD<25> [ 37.859919] <1>.(0)[210:kworker/0:2][msdc]Accumulated dma cnt: 23 [ 37.880459] <1>.(0)[210:kworker/0:2][msdc]msdc0 -> check card state<6> <- msdc_check_data_timeout() : L<4764> PID
<0xd2> [ 37.880465] <1>.(0)[210:kworker/0:2][msdc]msdc0 -> state<6> need cmd12 to stop <- msdc_check_data_timeout() : L<4766> PID <0xd2> [ 60.250439] <0>.(0)[210:kworker/0:2][msdc][msdc_command_resp_polling]: msdc0 CMD<12> MSDC_INT_CMDTMO Arg<0x00000000> [ 60.251914] <0>.(0)[210:kworker/0:2][msdc][msdc_command_resp_polling]: msdc0 CMD<12> Arg<0x00000000> tmo: 21474ms (max 21474ms) [ 60.253356] <0>.(0)[210:kworker/0:2][msdc]msdc0 -> card stuck in 6 state <- msdc_check_data_timeout() : L<4777> PID <0xd2>
-
msdc_check_data_timeout 这个是在host driver中进行的超时检测,即一次DMA传输如果超过30s还未结束,则会调用到这里判断当前device状态
- cmd 25在emmc 5.1协议中规定为write操作;
- DMA传输的超时时间为30s;
- msdc_check_data_timeout这里循环check 状态的超时时间为3s
-
这里还有一个点需要说明,此问题一共抓取到两次log信息,两次读取到的de【【微信】】不一样,即emmc端出现busy不回复,但是可能出现的时机点不同;
[ 33.【【QQ微信】】] [msdc][msdc_check_data_timeout]: XXX DMA Data Busy Timeout: 30000 ms, CMD<25> [ 33.764762] <2>.(2)[44:kworker/2:1][msdc]Accumulated dma cnt: 19 (200723_15:29:52.380)[ 33.863329] <2>.(2)[44:kworker/2:1][msdc]msdc0 -> check card state<7> <- msdc_check_data_timeout() : L<4764> PID
<0x2c> (200723_15:29:52.392)[ 33.864811] <2>.(2)[44:kworker/2:1][msdc]msdc0 -> state<7> card is busy <- msdc_check_data_timeout() : L<4769> PID <0x2c>
这里只是host端的超时检测,这里执行结束后会将err状态反馈给到【【淘密令】】中,后续即【【淘密令】】中的处理;
2.2.2.2 中间调度逻辑:
[ 599.【【QQ微信】】] <1>-(3)[225:mmcqd/0][name:rt&]sched: 【【微信】】 1243084, 【【微信】】 598459789580 [ 599.411739] <1>-(3)[225:mmcqd/0][name:rt&]sched: cpu=3 【【微信】】 952958009 <-> runtime[950000000 -> 950000000] [ 599.411737] <1>-(3)[225:mmcqd/0]【【微信】】[225: mmcqd/0] prio:98 【【微信】】[3998461] clock[599【【QQ微信】】13] 【【微信】】[599407725352] [ 599.411742] <1>-(3)[225:mmcqd/0][name:rt&]sched: 【【微信】】[599407725352, 599407725582] pick[598460008888, 598460013119] 【【微信】】[1051524079, 1051526079] [ 599.411747] <1>-(3)[225:mmcqd/0]sched: 【【微信】】d for rt_rq ffffffe37ff55c58 (cpu 3) [ 599.411747] <1>【【微信】】: [ 599.411747] <1> mmcqd/0 (225) [ 599.【【QQ微信】】] <0>-(0)[0:swapper/0][name:rt&]sched: cpu=3, [952992317 -> 2992317] -= min(952992317, 1*[950000000 -> 950000000]) [ 599.459805] <0>-(0)[0:swapper/0][name:rt&]sched: 【【微信】】d cpu=3
- 这部分打印是在RT Task调度逻辑中添加的:
- sched_【【微信】】xceeded
- print_rt_throttle_info(上述1~4)
- dump_throttled_rt_tasks(上述5~7)
- 系统存在一个RT Task一直在执行(【【微信】】[225: mmcqd/0] prio:98),由于执行时间过久,所以每次超过0.95s后系统对其进行调度,避免其他Task无法执行到;
- rt_bandwidth ,这里在sched_init的时候初始化bandwidth为0.95s;
- 从这里来看,说明Task mmcqd一直进行了10min左右未完成,从这个task的名称即可发现这个与emmc强相关
- 源码中搜索这个mmcqd是在queue.c中启动的【【微信】】(function:mmc_init_queue中进行),这东西是【【淘密令】】中的内容; 从这里的调度逻辑可以看到,host driver中返回的异常状态,并没有触发【【淘密令】】中对device端的重置动作; 而且每次出现问题都是10分钟左右,则有理由怀疑在【【淘密令】】中也存在一个check机制,超时时间为10min:
2.2.2.3 block 退出逻辑
幸运的是我们抓取到一次完整10分钟后退出的log信息,则可以针对性的来看下是在哪里退出的:
[ 660.【【QQ微信】】] <1>.(1)[225:mmcqd/0]mmc0: 【【微信】】ng state! mmcblk0 card_busy_detect [ 660.257011] <1>.(1)[225:mmcqd/0][msdc]msdc0 -> !!! Set<400KHz> Source<400000KHz> -> sclk<400KHz> timing<10> mode<3> div<125> 【【微信】】<0>
- card_busy_detect 即在【【淘密令】】这里做的检测,这里的超时时间是传入的;
- 这个函数跟host端那个处理基本完全一致,检测device端的状态,然后设置一个超时时间,超时后退出;
- 则从这里来看,上述整个过程都已经可以解释通了,那么问题就是这个超时时间是哪里设置的;
- 这个函数有两个调用位置:
- send_stop时调用,有三个调用位置:
- 每个调用都有log打印,而从我们的打印信息中没有相关信息;
- 传入超时时间均为1s中,则也不相符;
- mmc_blk_err_check,这个调用位置有很多
- 超时时间为:MMC_BLK_TIMEOUT_MS = 10 * 60 * 1000 即 10min
- 则整个path我们串通了,在blk驱动中有配置err check机制,且在这里配置时间为10min;
- 调用逻辑:
- mmc_blk_packed_err_check
- mqrq->【【微信】】rr_check = mmc_blk_err_check;
- mqrq->【【微信】】rr_check = mmc_blk_packed_err_check;
- send_stop时调用,有三个调用位置:
- root cause:emmc device端状态不对,在write操作时状态一直没有转变为tran模式,而是PRG、RCV;
- mmc 子系统中分别在host driver和【【淘密令】】中都有做err check以及超时检测处理,出现异常状态超时后会进行reset恢复;
- 修改mmc block driver中的超时时间设置,缩短为1min,但是这个是标准linux 【【微信】】驱动,可能会有未知风险;
- 对于此问题目前仅有一台机复测到,有可能为该机通信情况异常导致,且后续复测其他机器并无此问题;
- 对于此项目中emmc用料,存在多个型号,后续对此型号持续关注;
这个问题分析还算比较顺畅,打印信息中基本可以定位到问题点,分析过程中还是遇到了如下问题:
- 由于此问题为recovery逻辑触发,分析过程中在未找到block退出逻辑之前也有跟踪recovery中过程,未发现block点,但是耗费了比较多的时间;
- block 退出逻辑这个逻辑从host端往上分析则比较麻烦,很难反向找到,需要对于整个mmc 系统框架有一定了解;
对于此问题的分析,涉及到了linux mmc 子系统的框架理解:
这个是以前画的一张图:即mmc中划分为三个层次:
- user层,即【【淘密令】】或者【【微信】】 等使用到sdio通信的实际应用;
- core层,mmc中的核心处理,,提供三部分功能:
- 提供给到上层card通用接口(mmc、sdio、sd)
- 注册mmc bus并实现主要逻辑
- 与host driver进行通信(mmc_host实现)
- HW层, 最终将上层操作转换为底层通信cmd和data的层次,即SOC中的IP驱动,主要实现最底层的内容;
所以针对于此问题我们找到了mmc子系统中两个层次的超时检测,即card 和 host
在卡住的10min中可以看到每秒都会打印一次上述sched的信息,而此就是CPU带宽限制的调度信息:
- 实时任务的优先级高于普通任务,为了防止cpu消耗型的实时任务一直占用cpu引发其他任务"饥饿"的情况发生,内核采用了带宽限制手段来抑制实时任务的运行时间,保证其他普通Task的调度。
- 在任务调度中带宽限制就是指一定周期内一个队列(CPU)上任务可运行的最大时间,内核中使用xxx_bandwidth结构来限制任务的运行时间。 RT_Task对应的是:
则简单理解就是为了限制某些高优先级任务一直在运行,让其他Task没有机会得到“宠幸”机会,则设置了个限制,避免CPU被独占;
对于实时Task,使用【【微信】】_curr_rt()来做更新检查:
- 计算执行时间:rt_rq->【【微信】】 += delta_exec;
- 检测是否超标:sched_【【微信】】xceeded(rt_rq);
- 需要受限,且时间超标,则直接出队,并且限制入队;
则核心就是:sched_【【微信】】xceeded函数,具体来分析下:
在此处处理之后,该Task已经退出了调度,而且所有入队操作其实都会检测该标志为,即该Task无法被调度了; 按照我们的猜测,一定会有个位置接触上述限制,则从逻辑上讲应该是在本次period结束的时候,再将其放入调度队列中;
思科路由器怎么恢复出厂设置步骤 思科路由器初始配置教程
cisco路由器恢复出厂,cisco路由器恢复出厂设置,思科路由器忘记密码怎么重置,思科路由器怎么恢复出厂设置步骤思科路由器配置教程包括了登录路由器、设置基本网络参数、配置安全与管理、设置路由和转发等步骤。首先通过Web登录路由器,输入默认的用户名和密码,进入路由器管理页面。在基本网络参数设置中,可以设置WAN口/ LAN口参数、DHCP、DNS等,然后进行安全与管理配置,例如开启SSH、Web等,并可以设置访问控制。最后,进行路由和转发配置,可以添加静态路由、启用NAT、VPN等功能。完成配置后,保存设置生效即可。
思科路由器设置教程如下:
1.首先,我们需要将我们的思科路由器和光猫用 网线 连接好,连接的顺序是 电话线 、光猫、路由器以及电脑,如果没有绑定电话的可以不用连接电话线。将连接路由器的网线插到光猫的WAN插口上,其他的四个插口是用来插网线连接电脑的。
2.然后,打开我们的电脑上的网上邻居,找到本地连接,打开本地连接的TCP-IP,将其中的IP地址一项修改为192.168.1.X,X可以是2至225中的任意数字哦,网关设置为192.168.1.1,DNS服务器可以咨询网通ADSL运营商后填写。
3.接下来,打开我们电脑中的ie浏览器,输入思科路由器的登陆地址,大部分都是192.168.1.1,我们可以通过查看路由器底部的铭牌上面的标注来确认一下思科路由器的登陆地址。
4.这时,会弹出一个新的界面,在弹出的界面中,分别在用户名和密码两栏中输入帐号和密码,账号和密码默认都是admin,确认进入。
5.进入之后,我们需要在思科路由器的设置界面中找到左边的网络配置,然后点击进入。
6..选择下拉栏里的外网设置,选择PPPoE拨号模式,在输入帐号密码的地方输入宽带上网帐号和密码。设置完成后,记得点击保存哦。
7.选择内网设置,有些时候界面也可能叫LAN口设置,设置LAN口网IP,一般使用路由器默认的即可,设置完成后,也要点击保存。
8.选择DHCP服务,选择开启DHCP,指定DHCP自动分配IP地址范围,设置完成后,点击保存。如果是 无线路由 器的话,还需要进入无 线管 理中,将无线开启,然后进行对自己无线网络用户名和密码的设置。
9.这样就对思科路由器的设置进行完毕了,只需要重新启动一下我们的电脑就可以进行使用了。
答:思科路由器rip动态路由协议配置的具体内容。1.线的连接
2.Ip、封装等设置
3.设置动态路由 路由器间采用背对背的连接方式连接,一条DCE电缆和一条DTE电缆一组。 需要给路由器添加模块,再连接。 登录基于Web的实用程序,然后单击Networking > Routing > RIP。
2. .在“RIP基本设置”区域,单击“打开”以查看RIP状态。3. .通过选择适当的单选按钮选择RIP版本。 选项有: RIPv1 ― 一种不支持可变长子网掩码(VLSM)的有类路由协议。
思科wr【【微信】】设置方法:1.首先,我们需要将我们的思科路由器和光猫用 网线 连接好,连接的顺序是 电话线 、光猫、路由器以及电脑,如果没有绑定电话的可以不用连接电话线。将连接路由器的网线插到光猫的WAN插口上,其他的四个插口是用来插网线连接电脑的。
2.然后,打开我们的电脑上的网上邻居,找到本地连接,打开本地连接的TCP-IP,将其中的IP地址一项修改为192.168.1.X,X可以是2至225中的任意数字哦,网关设置为192.168.1.1,DNS服务器可以咨询网通ADSL运营商后填写。
3.接下来,打开我们电脑中的浏览器,输入思科路由器的登陆地址,大部分都是192.168.1.1,我们可以通过查看路由器底部的铭牌上面的标注来确认一下思科路由器的登陆地址。
4.这时,会弹出一个新的界面,在弹出的界面中,分别在用户名和密码两栏中输入帐号和密码,账号和密码
思科路由器设置方法如下:;1.首先,我们需要将我们的思科路由器和光猫用 网线 连接好,连接的顺序是 电话线 、光猫、路由器以及电脑,如果没有绑定电话的可以不用连接电话线。将连接路由器的网线插到光猫的WAN插口上,其他的四个插口是用来插网线连接电脑的。;2.然后,打开我们的电脑上的网上邻居,找到本地连接,打开本地连接的TCP-IP,将其中的IP地址一项修改为192.168.1.X,X可以是2至225中的任意数字哦,网关设置为192.168.1.1,DNS服务器可以咨询网通ADSL运营商后填写。;3.接下来,打开我们电脑中的ie浏览器,输入思科路由器的登陆地址,大部分都是192.168.1.1,我们可以通过查看路由器底部的铭牌上面的标注来确认一下思科路由器的登陆地址。;4.这时,会弹出一个新的界面,在弹出的界面中,分别在用户名和密码两栏中输入帐号和密码,账号和密码默认都是admin,确认进入。;5.进入之后,我们需要在思科路由器的设置界面中找到左边的网络配置,然后点击进入。;6..选择下拉栏里的外网设置,选择PPPoE拨号模式,在输入帐号密码的地方输入宽带上网帐号和密码。设置完成后,记得点击保存哦。;7.选择内网设置,有些时候界面也可能叫LAN口设置,设置LAN口网IP,一般使用路由器默认的即可,设置完成后,也要点击保存。;8.选择DHCP服务,选择开启DHCP,指定DHCP自动分配IP地址范围,设置完成后,点击保存。如果是 无线路由 器的话,还需要进入无 线管 理中,将无线开启,然后进行对自己无线网络用户名和密码的设置。
连接思科路由器有两种方式,console口连接和telnet的方式连接到思科路由器。telnet连接路由器是对已经配置了vty的路由器的连接方式,也就是你可以通过网络对思科路由器的ios进行配置。直连console口是本地电脑,直接连到路由器的端口来对路由器进行配置。配置时,可以通过附件--通讯--超级终端,来对路由器进行配置。进入思科路由器配置,并安装设置的步骤如下:
1、首先,接好无线路由器之后需要检查是否通电,无线路由器是否正常亮灯运行。
2、检查无误后,打开浏览器输入:192.168.1.1后按ENTER进入,这个时候弹出一个对话框,需要输入帐户名和密码,在路由器的后面会有的,一般情况下都是:帐户名:admin 密码:admin。
3、按照路由器背后的账户密码输入登录后,就可以登陆到路由器的设置页面了。
4、点击页面的设置向导,按照它的要求一步步进行。
5、点击下一步,进入到账号密码设置,这个账号密码是当前网络上网的账号密码,如果不知道,可以咨询网络运营商。
6、设置好上网的账号密码之后就是无线上网的功能设置了,设置WIFI名称和WIFI密码,建议密码不要设置过于简单,容易被人破解,并且加密方式采用系统推荐就可以。
7、点击完成,重启路由器,设置已经成功了。