新闻中心

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

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

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

⑤初始化本阶段使用的硬件设备。

⑥检测系统内存映射。

⑦将内核从Flash读取到RAM中。

⑧设置内核启动参数,然后启动硬件,通过访问控制寄存器来实现。该阶段可以设置超时溢出时间为120 s。以DM8168芯片为例(后面的代码都是基于该芯片实现),相关代码为:

__raw_writel(0xBBBB,WDT_WSPR);

__raw_writel(0x4444,WDT_WSPR);

__raw_writel(wdt_trgr_time,WDT_WTGR);

这样如果后续的内核解压及启动出错,超时可以复位开发板以重启,重新加载内核并试图修复。

⑨完成系统初始化工作,U—Boot进入主循环程序,处理用户输入的命令。在abortboot中,关闭看门狗,向控制寄存器依次写入:

__raw_writel(0xAAAA,WDT_WSPR);

__raw_writel(0x5555,WDT_WSPR);

若收到用户中断,U—Boot自动启动的命令后,关闭看门狗,以方便用户调试U—Boot、设置内核相关参数等信息。

⑩如果没有收到用户中断命令,U—Boot会拷贝内核镜像并解压内核,开始启动内核调用。

4.2 内核启动阶段

在U—Boot加载了内核之后,系统就进入内核启动阶段,此时,看门狗的管理控制也要由内核来接管。内核启动主要包括内核自解压、注册及加载硬件驱动程序、Flash分区等。

在内核启动时,内核程序会注册硬件看门狗的驱动程序,并执行probe探针函数,此时,内核接管U—Boot阶段的看门狗,即先关闭看门狗,然后再重新打开看门狗,并加载新的超时时长,此处设置wdt_trgr_time=120 s。

__raw_writel(0xAAAA,WDT_WSPR);

__raw_writel(0x5555,WDT_WSPR);

__raw_writel(0xBBBB,WDT_WSPR);

__raw_writel(0x4444,WDT_WSPR);

__raw_writel(wdt_trgr_time,WDT_WTGR);

这样可以保证文件系统在挂载或解压出错时,看门狗没有进行喂狗操作,从而导致120 s超时后重启。

在注册完硬件驱动程序之后,内核会挂载根文件系统并进行解压。

4.3 应用程序启动阶段

文件系统启动后,用户的应用进程也会开始启动。在这个阶段,通常会创建一个独立的守护进程,来接管看门狗。守护进程启动时,首先关闭内核阶段启动的看门狗,并重新启动看门狗设置超时时长,实现接管内核阶段看门狗的功能。在看门狗启动后,守护进程可以周期性地进行喂狗操作,并通过心跳的方式同用户进程通信,在收不到用户进程的心跳包消息时,即停止喂狗操作,这样看门狗会超时溢出导致系统重启,以进行故障修复。

守护进程通过看门狗中断响应函数,实现重启系统等操作,以恢复系统可用性。

至此,从U—Boot启动直到应用程序完成过程中,看门狗都有相应的启动及管理。

4.4 看门狗管理小结

系统下,U—Boot启动后打开硬件看门狗,保证内核解压及启动出现异常时重启;内核启动阶段,接管U—Boot下的看门狗并设置时间,可以保证文件系统挂载、解压及启动出现异常时重启系统;在进入文件系统后,守护进程接管内核阶段的看门狗,并定期地执行喂狗操作,这样在用户进程出现异常(退出)时,守护进程可以监测到异常,停止喂狗操作,看门狗超时复位系统。嵌入式系统中,重启是从故障中修复的最简单有效的方法,通过在启动的不同阶段启用硬件看门狗,可以有效保障系统异常时重启。

5 DM8168看门狗的管理

除了前文提到的系统下看门狗的基础管理,DM8168芯片的硬件看门狗外围输出引脚,可以同时支持Reset和Interrupt信号,功能更加强大。

如果只是期望看门狗超时后能重启复位板卡,参考前节提到的方法,依次在Linux启动的各个阶段启用及管理看门狗即可,因为看门狗的溢出引脚直接连接电源及复位管理模块。

此外,如果想在看门狗超时溢出时增加一些额外的处理,可以采用捕获中断信号的方法。具体流程如下:

①注册硬件看门狗中断处理函数,实现程序为omap_irq=platform_get_resource(pdev,IORESOURCE_IRQ,0); //获得中断标号

ret=request_irq(omap_irq,omap_wdt_irqhdl,0,pdev->name,wdev); //注册中断

其中omap_wdt_irqhdl为看门狗的中断处理函数。

②在硬件看门狗中断处理函数中可以增加一些附加的处理,需要注意的是,此时需要设置另外一组寄存器WDT_WDLY,以保证在复位前捕获到中断信号。

中断处理函数omap_wdt_irqhdl的关键实现程序为:

采用此方法后,看门狗超时产生中断信号,系统捕获到中断信号后自动触发中断响应函数,可以更灵活地处理(比如不复位系统,保留现场以便定位问题)。

结语

本文以TI公司的TMS320DM8168芯片为例,详细介绍了Linux系统从U—Boot启动、内核启动到文件系统加载及用户程序启动过程中看门狗的启用及管理,通过不同阶段管理看门狗,可以保证系统在任何一个可能出现问题的阶段,自动重启以修复故障,从而有效提高系统的可靠性。在嵌入式设备越来越普及的今天,设备自恢复功能会具有极大的竞争力。


上一页 1 2 下一页

关键词: Linux 看门狗

评论


相关推荐

技术专区

关闭