蜕变成蝶:Linux设备驱动之watchdog设备驱动

看门狗(watchdog )分硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器 电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零 (俗称 “喂狗”),如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号 并重启系统。软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定 时器代替。

1 看门狗的三个寄存器

1.1 watchdog原理

S3C2410内部集成了watchdog,提供3 个寄存器对watchdog 进行操作,这3 个寄存器分别为WTCON (watchdog 控制寄存器)、WTDAT (watchdog 数据寄存器)和WTCNT(watchdog 记数寄存器) S3c2440的看门狗的原理框图如下:

可以看到,看门狗定时器的频率由PCLK提供,其预分频器最大取值为255+1;另外,通过MUX,可以进一步降低频率。定时器采用递减模式,一旦到0,则可以触发看门狗中断以及RESET复位信号。 看门狗定时器的频率的计算公式如下:

1.2 开启S3C2410 的看门狗

1.3 S3C2410 的看门狗 “喂狗”

1.4 看门狗的使用例程

2 watchdog中的数据结

有一类设备被称为 “平台设备”,通常 SoC 系统中集成的独立的外设单元都被当作平台设备处理

2.1 platform_device 结构体

2.2 S3C2410 中的平台设备

2.3 S3C2410 看门狗的platform_device 结构体

2.4 int platform_add_devices()函数

2.5 platform_driver 结构体

2.6 S3C2410 看门狗的platform_driver 结构体

2.7 S3C2410 看门狗所用资源

2.8 S3C2410 看门狗驱动的miscdevice 结构体

2.9 S3C2410 看门狗驱动的文件操作结构体

3 加载和卸载函数

驱动模块的加载和卸载函数分别 用 platform_driver_register() 和 platform_driver_ unregister()注册和注销platform_driver

3.1 S3C2410 看门狗驱动

4 探测和移除函数

4.1 探测函数

4.2 探测函数

5 挂起和恢复函数

5.1 挂起函数

5.2 恢复函数

6 打开和释放函数

6.1 打开函数

6.2 释放函数

7 启停watchdog函数和写函数

7.1 启停看门狗函数

7.2 写函数

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

1 1 收藏 评论

关于作者:李辉

湖南省天杰信息技术有限公司创始人之一,主要从事基站智能门禁锁、智能蓝牙锁、智慧商城等等的研发。在2015年1月完成《24小时学通Linux内核》的写作,目前其关于嵌入式Linux 驱动的写作仍在进行中。 个人主页 · 我的文章 · 2 ·    

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部