高级会员
- 积分
- 673
- 金钱
- 673
- 注册时间
- 2019-3-26
- 在线时间
- 18 小时
|
本篇文章主要介绍了详解linux看门狗驱动编写,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
看门狗是linux驱动的一个重要环节。某些特殊的设备,有时候需要放在一些环境恶劣的地方,比如电信设备。但是,任何软件都不可能100%没有bug。如何保证软件在遇到严重bug、死机的时候也能正常运行呢,那么看门狗就是有效的一种方法。看门狗一般要求用户定时喂狗,如果一段时间没有喂狗的话,那么系统就会自动重启。今天,我们就来看看这个看门狗驱动怎么编写?
1、代码目录
drivers/watchdog
2、阅读目录下的Kconfig,可以找一个s3c模块macro
configHAVE_S3C2410_WATCHDOGboolhelpThiswillincludewatchdogtimersupportforSamsungSoCs.Ifyouwanttoincludewatchdogsupportforanymachine,kindlyselectthisintherespectivemach-XXXX/Kconfigfile.configS3C2410_WATCHDOGtristate"S3C2410Watchdog"dependsonHAVE_S3C2410_WATCHDOG||COMPILE_TESTselectWATCHDOG_COREselectMFD_SYSCONifARCH_EXYNOShelpWatchdogtimerblockintheSamsungSoCs.Thiswillrebootthesystemwhenthetimerexpireswiththewatchdogenabled.Thedriverislimitedbythespeedofthesystem'sPCLKsignal,sowithreasonablyfastsystems(PCLKaround50-66MHz)thenwatchdogintervalsofoverapproximately20secondsareunavailable.ThedrivercanbebuiltasamodulebychoosingM,andwillbecalleds3c2410_wdt
3、S3C2410_WATCHDOG主要依赖WATCHDOG_CORE,可以继续跟踪Makefile
obj-$(CONFIG_S3C2410_WATCHDOG)+=s3c2410_wdt.o
4、macro只依赖一个s3c2410_wdt.c文件,继续查看
staticSIMPLE_DEV_PM_OPS(s3c2410wdt_pm_ops,s3c2410wdt_suspend,s3c2410wdt_resume);staticstructplatform_drivers3c2410wdt_driver={.probe=s3c2410wdt_probe,.remove=s3c2410wdt_remove,.shutdown=s3c2410wdt_shutdown,.id_table=s3c2410_wdt_ids,.driver={.name="s3c2410-wdt",.pm=&s3c2410wdt_pm_ops,.of_match_table=of_match_ptr(s3c2410_wdt_match),},};module_platform_driver(s3c2410wdt_driver);
5、确认driver为platform类型,继续在probe函数中查找有用的code
ret=watchdog_register_device(&wdt->wdt_device);if(ret){dev_err(dev,"cannotregisterwatchdog(%d)\n",ret);gotoerr_cpufreq;}
6、网上继续查找,寻找到和watchdog有关的数据结构
staticconststructwatchdog_infos3c2410_wdt_ident={.options=OPTIONS,.firmware_version=0,.identity="S3C2410Watchdog",};staticconststructwatchdog_opss3c2410wdt_ops={.owner=THIS_MODULE,.start=s3c2410wdt_start,.stop=s3c2410wdt_stop,.ping=s3c2410wdt_keepalive,.set_timeout=s3c2410wdt_set_heartbeat,.restart=s3c2410wdt_restart,};staticconststructwatchdog_devices3c2410_wdd={.info=&s3c2410_wdt_ident,.ops=&s3c2410wdt_ops,.timeout=S3C2410_WATCHDOG_DEFAULT_TIME,};
7、找到设备注册函数、函数结构基本就算结束了,VPS云主机当然有中断的话,也可以确认一下
|
|