摘 要 Linux嵌入式系统在启动过程中如何喂狗是提高嵌入式系统可靠性需要解决的问题,传统做法是用复杂看门狗电路或在启动过程中关闭看门狗。本文提出了一种嵌入式系统喂狗策略,可以实现系统在启动过程和运行过程中全程喂狗。基于简单的硬件电路,在系统不同过程的程序中插入喂狗程序。实验表明,该方法简单可行,成本较低,是一种嵌入式系统的可靠喂狗方法。
关键词 嵌入式系统 看门狗 全程喂狗 IMP706 Linux
引 言
在嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入看门狗电路。看门狗电路其实就是一个计数器。当看门狗启动后,计数器开始自动计数,经过一定时间计数器溢出就会对CPU产生一个复位信号使系统重启。系统正常运行时,需要在看门狗允许的时间间隔内对看门狗计数器清零也即喂狗,不让复位信号产生。
当前在带Linux操作系统的嵌入式系统中,由于Linux操作系统加载时间较长(如lO~30 s),一般都超过看门狗的时间间隔(典型值为1.6 s);而如果不采取特殊措施,则系统在Linux操作系统加载过程中复位,Linux操作系统永远无法加载成功。为了解决这个问题,通常有两种方案:做一个看门狗的时间间隔更长的硬件电路;修改内核,在内核启动过程中将看门狗设成无效。以上方案无法解决嵌入式系统在操作系统启动阶段的失效问题,降低了系统可靠性。
本文提出了一种嵌入式系统全程喂狗策略及实现方法,从系统上电、引导程序(Bootloader)、操作系统内核直至应用阶段都启用看门狗。实验表明,该方法简单可行,成本较低,在嵌入式系统的全过程中都可以实现喂狗策略,提高了系统可靠性。
1 系统总体设计
采用IMP706芯片组成硬件看门狗电路(看门狗的时间间隔为1.6 s),在操作系统程序(包括Bootloader)和应用程序中插入喂狗程序,这些喂狗程序运行时间间隔小于看门狗的时间间隔(本设计选为1 s)。这样做可以保证:如果系统正常工作,系统可以在小于看门狗的时间间隔内不断进行喂狗动作,硬件看门狗的计数器不断清零,不产生复位信号;如果系统非正常工作,喂狗动作失效,硬件看门狗的计数器在1.6 s后溢出,对CPU产生复位信号使系统重启。
1.1 看门狗电路设计
图1为看门狗电路原理,采用IMP706芯片组成硬件看门狗电路,通过电平转换器件74AVClT45,硬件看门狗器件的ST脚与中央处理器(CPU)的GPIO3脚相连。看门狗器件的PRST脚与IN脚接到复位开关,RST脚接到CPU的RESET脚,当复位开关被触动或看门狗器件的计数器溢出时,看门狗器件的RST脚输出复位信号给CPU的RESET脚,CPU复位重启。
1.2 喂狗策略及实现
1.2.1 Bootloader阶段
在Boot1oader阶段(本设计采用U—boot,但不限于此),喂狗策略是在Bootloader的程序中不同位置插入喂狗程序。具体做法是:由于Bootoader第一阶段的启动不会超过1.6 s,因此只需在Bootoader的第二阶段,如Flash读写、CRC校验、循环等待等处,插入喂狗代码。喂狗代码采用直接置位中央处理器的GPIO3状态寄存器的方式进行。