新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Linux看门狗管理及在DM8168芯片上的应用

Linux看门狗管理及在DM8168芯片上的应用

作者:时间:2016-09-12来源:网络收藏

摘要:随着智能手机及平板为代表的嵌入式设备的普及,对系统的可靠性提出较高的要求。以TI TMS320DM8168芯片为例,详细介绍了系统从U—Boot启动、内核启动到文件系统加载及用户程序启动过程中,的启用及管理,通过不同阶段管理,可以保证系统在任意可能出现问题的阶段,可以自动重启以修复故障,从而有效提高系统的可靠性。

本文引用地址:http://www.eepw.com.cn/article/201609/303453.htm

关键词:;;DM8168

引言

随着智能终端及移动互联网的发展,系统被应用到越来越多的嵌入式设备中,如移动通信基站、Android(基于Linux内核)智能手机、智能手环等。不同领域的应用都对Android/Linux系统的可靠性及可用性有严格的要求。在嵌入式系统中,CPU必须可靠工作,即使因为某种错误或异常进入错误状态,系统应该可以自动复位,看门狗也可以在系统进入错误状态后的一段时间内重启复位,以实现系统自动从故障恢复。

1 看门狗的概念

看门狗是一个进行累加计数的定时器,在其启动后,如果在设定的时间间隔内对定时器清零(俗称“喂狗”操作),定时器就不会溢出,也不会产生复位信号;如果在设定的时间间隔内,没有对定时器清零,定时器就会溢出产生复位信号,从而实现系统重启。根据实现方式的不同,可以分为硬件看门狗和软件看门狗。

硬件看门狗是利用定时器电路实现,其输出连接到电路的复位端,程序在设定间隔内对定时器清零。因此程序正常工作时,定时器不会溢出;如果程序出现故障,未能在设定间隔周期内执行清零操作,就使得看门狗定时器溢出,产生复位信号并重启系统。软件看门狗原理上同硬件看门狗一样,只是将硬件电路上的定时器用操作系统内部的软件定时器代替,这样可以简化硬件电路设计。但软件定时器在可靠性方面不如硬件定时器,在一些异常的情形下,比如处理器或操作系统内部发生故障时,会导致软件定时器不可用,也就无法检测到这些故障。

2 Linux系统对看门狗的支持

Linux内核从1.3.51版本开始提供硬件、软件看门狗的驱动支持。随着内核版本不断更新与发展,Linux内核对各种不同类型的硬件看门狗提供了广泛的支持。根据访问方式的不同,Linux系统下的设备驱动程序分为字符设备及块设备。看门狗在Linux系统下作为字符设备来处理,/dev/watchdog是一个主设备号为10、从设备号为130的字符设备节点。

Linux系统下的硬件看门狗,必须有硬件电路支持,设备节点/dev/watchdog对应着真实的物理设备,不同类型的硬件看门狗设备由相应的硬件驱动管理。

软件看门狗则由Linux内核模块通过定时器机制实现,此时设备节点/dev/watchdog并不对应真实的物理设备,只是为应用提供了一个与操作硬件看门狗相同的接口。各种不同类型的硬件看门狗电路,不仅提供了驱动程序支持,还提供了一个基于定时器的纯软件看门狗驱动,其驱动程序的源码位于Linux内核源码下面的/drivers/watchdog目录。

与Linux下的软件看门狗相比,硬件看门狗具有更高的可靠性。基于Linux内核的定时器实现的软件看门狗,当内核或中断出现异常时,将会失效。而硬件看门狗由自身的硬件电路控制,独立于内核,无论当前系统状态如何,如果硬件看门狗在设定的时间间隔内没有被执行写操作,仍会重新启动系统。

Linux系统下面的软件、硬件看门狗对应用程序而言是透明的。应用程序操作软件看门狗的方式如下:打开设备/dev/watchdog,在设定的时间间隔内对/dev/watchdog设备执行写操作。在任意时刻,只能有一个看门狗驱动模块被加载,管理/dev/watchdog设备节点。如果系统没有硬件看门狗电路,可以加载软件看门狗驱动模块。

3 Linux系统下看门狗的访问

前文提到,Linux系统将看门狗作为一个字符设备来管理。本节将以TI公司推出的高清视频处理芯片TMS320DM8168(以下简称DM8168)芯片为例,介绍Linux下访问及操作看门狗的逻辑层次。

DM8168芯片将高清多通道系统的所有捕获、压缩、显示以及控制功能整合于同一芯片,芯片内部集成了硬件看门狗,外围连接电路如图1所示。硬件看门狗溢出同时产生复位(Reset)及中断信号(Interrupt),复位信号会复位整个芯片,中断信号可以在捕获到中断事件后,在中断处理函数中增加一些额外的操作(比如将收到的看门狗溢出中断的时间写进日志,然后再复位等)。

Linux系统访问硬件接口需通过设备驱动程序接口实现,硬件看门狗也不例外。

如图2所示,Linux系统下操作看门狗需要以下3个层次:

①Hardware Layer-硬件层,指硬件设备,通常提供GPIO;

②Kernel Layer-内核层,内核通过设备驱动程序访问并控制硬件设备;

③Usee Space-用户空间,应用程序通过内核驱动提供的API接口(通常以打开文件或ioctl方式),提供访问硬件设备的接口,比如打开看门狗(int fd = open(“/dev/wat chdog”,O_RDWR))。

4 Linux系统下看门狗的管理

Linux启动过程依次为U—Boot、内核及文件系统,最后是应用程序启动。在Linux系统启动过程中,启用看门狗可以有效监测系统状态,若异常导致看门狗溢出,系统会自动复位以试修复问题,从而提高系统的可靠性及健壮性。本节以DMS168开发板为例,介绍Linux各个启动阶段看门狗的管理。

4.1 U—Boot启动阶段

开发板上电后,执行U—Boot的第一条指令,然后顺序执行U—Boot启动函数。U—Boot启动内核的过程如下:

①硬件设备初始化。

②加载U—Boot第二阶段代码到RAM空间。

③设置好堆栈,跳转到start_armboot函数入口。

④start_armboot是U—Boot执行的第一个C语言函数。


上一页 1 2 下一页

关键词: Linux 看门狗

评论


相关推荐

技术专区

关闭