`
helloyesyes
  • 浏览: 1306550 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Linux驱动修炼之道-看门狗框架源码分析

阅读更多

努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/06/03/6525504.aspx

由于计算机在工作时不可避免的要受到各种各样因素的干扰,即使再优秀的计算机程序也可能因为这种干扰使计算机进入一个死循环,更严重的就是导致死机。有两种方法来处理这种情况,一是采用人工复位的方法,而是依赖某种硬件来执行这个复位工作。这种硬件通常叫做看门狗。S3C2440A处理器内部集成了一个看门狗硬件,如下图:

看门狗有两个功能,即可作为一个正常的16位的内部寄存器来请求中断服务,也可产生128PCLK周期的复位信号。下面分析一下看门狗工作过程:首先处理器提供的PCLK经过8位预分频(这个值在WTCON[15:8]), 然后通过一个多路选择器,可以选择4种分频方式,16,32,64,128。看门狗通过WTCON[4:3]来选择哪种分频方式,这样可以产生一个时钟频率,每一个时钟周期WTCNT中的值就减1,直到为0。当为0时,如果WTCON[2]为1,则产生一个中断信号;如果WTCON[0]为1,则产生一个复位信号。看门狗的工作频率=PCLK/(WTCON[15:8]+1)/divider(divider=(16,32,64,128))。公式中WTCON[15:8]+1是因为WTCONT[15:8]的取值范围为0~255,因为除数不能为0,所以设计者规定需要加1。divider的值由WTCONT的第3,4位决定,可以取值16,32,64和128。
下面来分析Linux内核中看门狗的源码,其实我觉得看门狗相当简单了,因为一共就3个寄存器,来看一些全局变量,这些在一些函数中会用到:

nowayout表示决不允许看门狗关闭,为1表示不允许关闭,为0表示允许关闭;tmr_margin表示默认的看门狗喂狗时间为15s;tmr_atboot表示系统启动时就使能看门狗,为1表示使能,为0表示关闭;soft_noboot表示看门狗工作的方式,看门狗可以作为定时器使用也可作为复位硬件使用,soft_noboot为1表示看门狗作为定时器使用,不发送复位信号;debug表示是否使用调试模式来调试代码,该模式中,会打印调试信息。
WATCHDOG_NOWAYOUT的值由配置选项CONFIG_WATCHDOG_NOWAYOUT决定,其宏定义如下:

另外一个重要的枚举值close_state用来标识看门狗是否允许关闭,其定义如下:

CLOSE_STATE_NOT表示不允许关闭看门狗,CLOSE_STATE_ALLOW表示允许关闭看门狗。
S3C2410的看门狗同时具有多重身份:字符设备,混杂设备,平台设备。下面看一下看门狗驱动作为平台驱动的描述:

下面是看门狗驱动作为平台驱动的注册:

下面是看门狗平台设备及其资源:

当使用platform_bus_type的platform_match对s3c2410wdt_driver与s3c_device_wdt匹配成功时,调用s3c2410_wdt_probe函数,下面来看s3c2410_wdt_probe的实现:

下面看一下刚才调用的那个设置看门狗复位时间的方法:

平台驱动的移除函数:

平台驱动中的关闭函数:

平台驱动中的电源管理部分:

来看看看门狗驱动作为字符驱动的file_operations结构:

看门狗作为字符设备的打开函数:

下面看一下开启看门狗的函数:

关闭函数:

下边是关闭函数中调用的看门狗停止函数,可以看出实际关闭看门狗的操作是由__s3c2410wdt_stop函数完成的。

写函数:

io控制函数:

如果选择了看门狗作为内部定时器,则当计数值为0时调用中断处理函数,中断处理函数的主要功能就是喂狗:

喂狗函数:

总结一下:看门狗设备可以在系统启动的时候开启也可以在打开设备的时候启动,看门狗设备不是用来读取或者写入神马数据的,只可写入一个'V'用来允许关闭看门狗设备,打开看门狗设备后主要就是通过ioctl来发各种命令,进行获得门狗设备的信息,门狗设备的信息,门狗设备的信息,设置看门狗的超时时间,对看门狗进行喂狗等操作在内核和用户空间之间传递信息。

分享到:
评论

相关推荐

    Linux常见驱动源码分析(kernel hacker修炼之道全集)--李万鹏

    Linux驱动修炼之道-看门狗框架源码分析.pdf Linux驱动修炼之道-触摸屏驱动之s3c2410_ts源码分析.pdf Linux驱动修炼之道-SPI驱动框架源码分析(中).pdf Linux驱动修炼之道-SPI驱动框架源码分析(下).pdf ...

    C语言09-看门狗复位测试程序(STC32G-DEMO-CODE-220311kw)

    C语言09-看门狗复位测试程序(STC32G-DEMO-CODE-220311kw)C语言09-看门狗复位测试程序(STC32G-DEMO-CODE-220311kw)C语言09-看门狗复位测试程序(STC32G-DEMO-CODE-220311kw)C语言09-看门狗复位测试程序(STC32G-...

    73-看门狗溢出测试(51单片机C语言实例Proteus仿真和代码)

    73-看门狗溢出测试(51单片机C语言实例Proteus仿真和代码)73-看门狗溢出测试(51单片机C语言实例Proteus仿真和代码)73-看门狗溢出测试(51单片机C语言实例Proteus仿真和代码)73-看门狗溢出测试(51单片机C语言实例...

    暂停-结束-看门狗指令.zip西门子PLC编程实例程序源码下载

    暂停-结束-看门狗指令.zip西门子PLC编程实例程序源码下载暂停-结束-看门狗指令.zip西门子PLC编程实例程序源码下载暂停-结束-看门狗指令.zip西门子PLC编程实例程序源码下载暂停-结束-看门狗指令.zip西门子PLC编程实例...

    EDA课程设计-看门狗设计

    课程设计-看门狗设计EDA 课程设计-看门狗设计EDA 课程设计-看门狗设计EDA 课程设计-看门狗设计EDA

    linux 看门狗驱动

    2. **驱动模型**:Linux内核中的驱动模型包括总线、设备、驱动等概念,看门狗驱动通常注册为字符设备驱动,遵循通用的设备驱动框架。 3. **看门狗接口**:Linux内核提供了一套API供驱动开发者使用,例如`wdt_open()...

    周立功 lpc2300多媒体课件\LPC2300系列ARM-看门狗定时器.pps

    周立功 lpc2300多媒体课件\LPC2300系列ARM-看门狗定时器.pps周立功 lpc2300多媒体课件\LPC2300系列ARM-看门狗定时器.pps周立功 lpc2300多媒体课件\LPC2300系列ARM-看门狗定时器.pps

    73-看门狗溢出测试.rar_看门狗_看门狗溢出

    看门狗技术是嵌入式系统中非常关键的安全机制,主要用于防止系统因软件错误或硬件异常而陷入不可预测的状态。看门狗定时器(Watchdog Timer, WDT)是一种独立于主处理器的计时器,当它检测到系统未在预设的时间内...

    单片机C语言实例--73-看门狗溢出测试.zip

    "看门狗溢出测试_Opt.Bak" 和 "看门狗溢出测试.Opt" 文件可能是编译优化后的备份文件,这些文件记录了编译器对源代码的优化信息,比如变量存储位置、指令选择等,有助于分析和调试程序性能。 "看门狗溢出测试.plg" ...

    IT8786-看门狗喂狗程序,包括windows和linux

    IT8786-看门狗喂狗程序,包括windows和linux,直接调用watchdogstart即可喂狗

    linux在TQ2440上移植8--启动看门狗

    在TQ2440开发板上移植Linux并启动看门狗涉及到多个步骤,包括配置内核、编写驱动和应用程序,以及设置开机自启动。 首先,我们需要了解TQ2440开发板的硬件特性。TQ2440基于Samsung S3C2440处理器,该处理器内含一个...

    F81866-看门狗喂狗程序-包含windows和linux

    F81866_看门狗喂狗程序_包含windows和linux,喂狗直接调用watchdogstart即可

    12-看门狗复位测试程序.rar

    这个“12-看门狗复位测试程序.rar”压缩包文件显然是针对STC8A8K单片机的看门狗复位功能进行的教学资源,它可以帮助初学者了解和掌握如何在STC8A8K上实现看门狗定时器的配置和复位操作。 看门狗定时器(Watchdog ...

    看门狗程序源码

    "看门狗程序"在IT领域中通常指的是一个监控系统,用于确保计算机程序或设备能够按照预期持续运行,如果出现故障或异常,看门狗程序会执行重启或其他恢复操作。在本例中,源码是用VC(Visual C++)编写的,这是一种...

    ewm_interrupt_S32KEWM_s32k144外置看门狗_源码

    本文将深入探讨标题为"ewm_interrupt_S32KEWM_s32k144外置看门狗_源码"的资源,该资源涉及的是在基于NXP S32K144微控制器(MCU)上的外置看门狗编程。S32K144是一款基于ARM Cortex-M4F内核的高性能MCU,广泛应用于...

    200-宏晶看门狗(51单片机C语言实例Proteus仿真和代码)

    200-宏晶看门狗(51单片机C语言实例Proteus仿真和代码)200-宏晶看门狗(51单片机C语言实例Proteus仿真和代码)200-宏晶看门狗(51单片机C语言实例Proteus仿真和代码)200-宏晶看门狗(51单片机C语言实例Proteus仿真和代码)...

    51单片机教程实例73-看门狗溢出测试

    本教程实例73聚焦于一个重要的系统稳定性保障功能——看门狗定时器(Watchdog Timer)。看门狗定时器在51单片机中的作用是监控程序的运行状态,防止程序因为意外的死循环或者硬件故障导致系统长时间无响应。 看门狗...

    linux应用程序的看门狗操作

    总结来说,Linux应用程序操作硬件看门狗涉及到的基本知识点有:Linux设备驱动模型、字符设备文件的使用、系统调用(如`open()`, `write()`, `ioctl()`)以及异常处理和安全性设计。通过学习提供的`watchdog`压缩包中...

    STM32F407学习记录---看门狗实现流水灯.rar

    利用看门狗的复位功能实现流水灯,同时可使用WK_UP按键喂狗

    绘本故事-看门狗和母鸡的故事范本.doc

    绘本故事-看门狗和母鸡的故事范本.doc

Global site tag (gtag.js) - Google Analytics