看门狗 驱动程序
看门狗是当CPU进入错误状态后,无法恢复的情况下,使计算机重新启动
由于计算机在工作时不可避免的受到各种各样的因素干扰,即使再优秀的计算机程序也可能因为这种干扰使计算机进入一个死循环,更严重的就是导致死机。
有两种办法来处理这种情况: 一是:采用人工复位的方法
二是:依赖于某种硬件来执行这个复位工作。这种硬件通常叫做看门狗(Watch Dog,WD)
看门狗,就像一只狗一样,在那看着们,计算机中通常用定时器来处理这种周期性的动作
看门狗实际上是一个定时器,其硬件内部维护了一个定时器,每当时钟信号到来时,计数寄存器减1。如果减到0,则系统重启(就像狗一样,看你不认识就咬你,可不管你是谁)。
如果在减到0之前,系统又设置计数寄存器一个较大的值,那么系统永远不会重启。系统的这种设置能力表示系统一直处于一种正常运行状态。反之,如果计算机系统崩溃,那么就无法重新设置计数寄存器的值。当计数寄存器为0,系统重启
看门狗的工作原来很简单,处理器内部一般都集成了一个看门狗硬件。其提供了三个寄存器 看门狗控制寄存器(WTCON) 看门狗数据寄存器(WTDAT) 看门狗计数寄存器(WTCNT)
结合上图可知,看门狗从一个PCLK频率到产生一个RESET复位信号的过程如下:
1,处理器向看门狗提供一个PCLK时钟信号。其通过一个8位预分频器(8-bit Prescaler)使频率降低
2,8位预分频器由控制寄存器WTCON的第8~15位决定。分频后的频率就相当于PCLK除以(WTCON[15:8]+1).
3,然后再通过一个4相分频器,分成4种大小的频率。这4种频率系数分别是16,32,64,128.看门狗可以通过寄存器的3,4位决定使用哪种频率
4,当选择的时钟频率到达计数器(Down Counter)时,会按照工作频率将WTCNT减1.当达到0时,就会产生一个中断信号或者复位信号
5,如果控制寄存器WTCOON的第二位为1,则发出一个中断信号;如果控制寄存器WTCON第0位为1,则输出一个复位信号,使系统重新启动
看门狗驱动涉及两种设备模型,分别是平台设备和混杂设备 平台设备模型:
从Linux2.6起引入了一套新的驱动管理和注册模型,即平台设备platform_device和平台驱动platform_driver.Linux中大部分的设备驱动,都可以使用这套机制,设备用platform_device表示,驱动用platform_driver表示
平台设备模型与传统的device和driver模型相比,一个十分明显的优势在于平台设备模型将设备本身的资源注册进内核,由内核统一管理。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性。通过平台设备模型开发底层驱动的大致流程为下图: