前言
关于 Uboot 初始化阶段,在 start.S 中,为何要去关闭 watchdog,下面解释具体的原因:
1、什么是 watchdog
watchdog 一般是一个硬件模块,其作用是,在嵌入式操作系统中,很多应用情况是系统长期运行且无人看守,所以难免或者怕万一出现系统死机,那就杯具了,这时,watchdog 就会自动帮你重启系统。
那么其是如何实现此功能的呢?那么就要简单解释一下其实现原理了。
watchdog 硬件的逻辑就是,其硬件上有个记录超时功能,然后要求用户需要每隔一段时间(此时间可以根据自己需求而配置)去对其进行一定操作,比如往里面写一些固定的值,俗称“喂狗”,那么我发现超时了,即过了这么长时间你还不给偶喂食,那么偶就认为你系统是死机了,出问题了,偶就帮你重启系统。说白了就是弄个看家狗 dog,你要定期给其喂食,如果超时不喂食,那么狗就认为你,他的主人,你的系统,死机了,就帮你 reset 重启系统。
1。概述:
WATCHDOG对于没有底层开发经验的开发人员来说,可能比较陌生,但是它在系统起到非常重要的作用,相当于系统警察,当系统发生严重错误(如程序进入死循环等)不能恢复的时候,WATCHDOG能够让系统重启。WATCHDOG的应用主要是在嵌入式操作系统中,避免了系统在无人干预时长时间挂起的情况。
2。WATCHDOG模块
在比较高档的嵌入式硬件。片虫:都有一个.WATCHDOG模块.如果在MCUMPU史没有集成WATCHDOG,一般会在此嵌入式系统中加一个专门的 WATCHDOG芯片来实现WATCHDOG机制。此模块主要的功能包括:
- 1 提供WATCHDOG控制寄存器和配置寄存器,供软件开发人员根据系统需要进行灵活配置。
- 2 提供一接口,使应用软件能够定时给WATCHDOG“喂狗”。
- 3 提供WATCHDOG机制,当系统进入不可恢复错误时,能产生一个不可屏蔽中断来通知系统自动重启(一般这样,也有改变为其他处理方式的),只有相应的复位信号才能清除它。
3。WATCHDOG的实现方式:
对于WATCHDOG模块的实现,不同的硬件芯片有不同的方式,这里介绍2中工作方式:
1 利用系统操作系统时钟来实现WATCHDOG
在Intel XScale系列中,利用了操作系统时钟的比较寄存器3(OSMR3)做为WATCHDOG的运行主体,当系统的WATCHDOG激活后,软件就必须在一定时间内从OSMR3读出当前的计数,然后加上一定的计数值(下一次到期的计数值),再写回到OSMR3中,软件一直周期性的重复这个过程,如果软件没有重新写入新的计数使定时器到期,此OSMR3会利用一个GPIO触发系统复位。
2 芯片的专门WATCHDOG模块
对于现在的很多芯片,已经集成了专门的WATCHDOG模块,比如 ARMl1的芯片,WATCHDOG模块中,提供了比较灵活的配置和控制机制:
- A。宽范围设置过期时间间隔,从0.5秒到128秒可以用户配置
- B。可以灵活配置在低功耗下,使用或者停止WATCHDOG功能
- C。可以灵活配置在DEBUG等状态下,使用或者停止WATCHDOG 功能
根据不同的系统,设置好相应的寄存器,激活WATCHDOG后,需要应用程序周期性的服务WATCHDOG,即我们所说的“喂狗”,对于WATCHDOG模块,需要定时向Watchdog ServiceRegister按顺序写入0x5555,0xaaaa.一般在WATCHDOG模块中还会提供Watchdog ResetStatus Register,从中可以找到复位的具体原因。
3。单片机的WATCHDOG实现
许多单片机片内自带看门狗电路,单片机复位时将片内自带看门狗电路禁止,只有当程序访问该电路时,电路启动。如51系列单片机对SFR中的0A6H地址顺序写入#01EH、#0E1H;而96系列单片机则对SFR中的0A6H地址顺序写入#1EH、#0E1H;工控主机板上看门狗电路本身并不要求复位后重新启动,但BIOS在复位后将板上看门狗禁止,启动和喂狗方法与单片机相同。如研祥的FSC-1713主板,在WatchDog编程状态,只要执行如下两条指令:
outportb(Ox2e,0xf6); outportb(Ox2f,TIME-OUT-VALUE);
可实现WatchDog 的启停,其中TIME-OUT-VALUE0启动; TIME-OUT-VALUE=0停止[2]。能够用指令禁止看门狗是为了适应用户程序开发阶段的需要,这同时给看门狗启动和运行失败留下了后门,在看门狗启动时或启动前遇干扰而使程序跑飞,则看门狗启动失败,无法行使监控职能。
4。结论
WATCHDOG在嵌入式系统中发挥着非常重要的作用,其实现方式也千差万别,根据不同的硬件设计,可以选用不同的WATCHDOG,但它们的作用是一样的:保证系统在出现不可恢复错误时,能够自动让系统重启。
2、为何在要系统初始化的时候关闭 watchdog
了解了watchdog的原理后,此问题就很容易理解了。
如果不禁用watchdog,那么就要单独写程序去定期“喂狗”,那多麻烦,多无聊啊。
毕竟咱此处只是去用uboot初始化必要的硬件资源和系统资源而已,完全用不到这个watchdog的机制。 需要用到,那也是你linux内核跑起来了,是你系统关心的事情,和我uboot没啥关系的,所以肯定此处要去关闭watchdog(的reset功能)了。(不错不错前辈优秀)
参考链接
https://wenku.baidu.com/view/e5cd52ff04a1b0717fd5dd27.html?wkts=1676475803755