您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

基于Linux的嵌入式体系全程喂狗战略

发布日期:2011-04-12

  引 言

  在嵌入式体系中,为了使体系在非常环境下能主动规复,一样平常都市引入看门狗电路。看门狗电路着实便是一个计数器。当看门狗启动后,计数器开始主动计数,颠末肯定时间计数器溢出就会对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状态寄存器的方法举行。

  起首在特定平台的定义头文件include/conffigs/xxx.h中参加看门狗的宏定义:

步伐

  在lib_generic下的CRC校验阶段代码crc32.c中参加如下代码,实现CRC校验阶段喂狗:

步伐

  1.2.2 Linux内核阶段

  在Linux内核加载阶段(采取MontaVista Linux操纵体系,但不限于此),喂狗战略是在Linux内核步伐的差别位置插入喂狗步伐。详细做法是:起首在Linux内核阶段1的内核解压缩步伐、RTC驱动加载步伐、GPIO驱动加载步伐得当代码处插入喂狗代码,喂狗代码以直接取反中间处理惩罚器的GPIO3状态寄存器的方法举行;在Linux内核阶段2的Watchdog驱动加载步伐得当代码处插入喂狗代码,喂狗代码调用GPIO驱动,GPIO驱动内含取反中间处理惩罚器的GPIO3状态寄存器的操纵;在Linux内核阶段3的内核加载根文件体系步伐、init步伐的得当代码处调用Linux的Watchdog驱动,Watchdog驱动内含取反中间处理惩罚器的GPIO3状态寄存器的操纵。

  以上内核阶段的分别因此GPIO及Watchdog驱动的加载为标记的。GPIO驱动加载之前为内核阶段1,GPIO驱动加载之后至Watchdog驱动加载之前为内核阶段2,Watchdog驱动加载之后为内核阶段3。

  下面示例阐明内核解压缩asm/arch/boot/compressed.c中喂狗的实当代码:

步伐

  从以上代码可以看出,它是内核阶段l喂狗的典范要领,是直接取反GPIO3状态寄存器的。

  下面示例阐明内核阶段2的喂狗要领(仅以加载RTC驱动为例):起首让RTC驱动中包括GPIO的头文件,然后在读取RTC当前值的函数中调用GPIO驱动举行喂狗。

步伐

  为了可以或许在内核阶段3调用Watchdog驱动举行喂狗,必要在Watchdog驱动中导出喂狗函数以供内核阶段3利用。Watchdog驱动喂狗也是调用GPIO驱动实现的,但Watchdog驱动一旦加载完成,以后的喂狗都通过调用Watchdog驱动完成。

步伐

  1.2.3 步伐运行阶段

  图2为多线程应用步伐运行阶段喂狗要领。在主步伐中起首创建一个监控线程,它的优先级高于其他线程。监控线程在其他被监控的线程正常事变的环境下,肯定时间内对看门狗举行喂狗操纵,喂狗操纵通过调用Watch—dog驱动来完成。要是某个线程出现妨碍,监控线程就不实行喂狗操纵,也就到达这个线程出现妨碍时体系主动重启的目标。要是监控线程自身出现妨碍,不克不及及时实行喂狗操纵,看门狗也主动复位重启。详细做法是,主步伐起首启动监控线程,然后依次启动N个被监控的线程,每一线程内都设置一计数器。被监控的线程中起首对线程内的计数器初始化为O,在各个线程主循环中,对相应的计数器实行加1操纵。监控任务起首启动看门狗,进入循环。每隔M秒对各线程内的计数器举行查验,在M秒内每隔1 s要对看门狗喂狗,不然体系就会复位重启。查问N个计数器值是否为0,要是全都大于0,则阐明映射担当监控的线程正常运行,然后对看门狗喂狗,并将N个计数器值清零。要是有恣意一个计数器值为O,检测到映射担当监督的线程出现妨碍必要重启,这时不同错误看门狗喂狗,使得体系复位重启。

多线程应用步伐运行阶段喂狗要领

  以下示例阐明在应用中怎样调用Watchdog驱动实现喂狗:

步伐

  总之,在体系差别阶段,由于体系调用和封装程度差别,看门狗的喂狗实现要领也差别:在Bootloader阶段,直接取反中间处理惩罚器的GPIO3的状态寄存器;在Linux内核阶段1,采取取反中间处理惩罚器的GPIO3的状态寄存器的要领举行;在Linux内核阶段2,采取调用GPIO的驱动的要领举行;在Linux内核阶段3,采取调用Watchdog驱动的要领举行;在应用步伐运行阶段,应用步伐中的喂狗步伐采取调用Watchdog驱动的要领举行,如图3所示。

喂狗步伐采取调用Watchdog驱动的要领举行

  2 实行结果

  我们在公司研发的智能视频阐发器项目中应用了本要领。该阐发器采取TI DaVinci系列DSP芯片(TMS320DM6446)为CPU,用Monta Vista Linux作为操纵体系。操纵体系启动时间约为20~30 s。采取本要领是为了包管体系在全进程中都能得到有效的失效规复。在振荡波抗扰度、电压颠簸与闪烁、静电放电、电快速瞬变脉冲群等EMC兼容性测试中,当各强度指标高出配置EMC兼容性计划强度时,体系失效,利用这种方法可以测试本要领在硬件失效时的结果。以静电放电为例,计划放电等级为±6 kV(我们取±7 kV的强度等级),配置上电后,分别在1~30 s内每隔5 s及在120 s处举行静电放电测试,经观察配置都可以实时规复。

  对软件失效时本要领结果的测试,采取妨碍植入脚本的主动方法及体系永劫间运行的被动方法举行测试。最闭幕果表明,配置在失效后可实时规复。

  综上所述,本全程喂狗的要领能确保体系在任一阶段出现软件或硬件妨碍时都能复位重启。

  结 语

  本文提出了一种嵌入式体系全程喂狗战略,包括硬件电路计划和软件实现要领。该要领有如下特点:看门狗电路大略,硬件只需一块看门狗芯片,不需巨大的外围逻辑电路,本钱较低;体系全进程启用看门狗,确保体系在任一阶段出现软件或硬件妨碍都能复位重启,体系可靠性得到进步。