大家好,我是极客范的本期栏目编辑小友,现在为大家讲解linux看门狗使用方法问题。
Linux操作系统操作系统看门狗使用很简单,在应用层使用,只需要ioctl设置一下溢出时间,既可以使用看门狗,定时喂狗即可
前提是核心支持看门狗
设备驱动程序
[*]看门狗定时器支持-
配置好好后,即可制造
应用层的使用,直接上代码
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
//看门狗
#定义看门狗_IOCTL_BASE 'W '
struct watchdog_info {
无符号int opTIons
未签名的(同Internationalorganizations)国际组织固件版本;
char IDentity[32];
};
#定义WDIOC_GETSUPPORT _IOR(看门狗_IOCTL_BASE,0,结构看门狗_信息)
#定义WDIOC_GETSTATUS _IOR(看门狗_IOCTL_BASE,1,int)
#定义WDIOC_GETBOOTSTATUS _IOR(看门狗_IOCTL_BASE,2,int)
#定义WDIOC_GETTEMP _IOR(看门狗_IOCTL_BASE,3,int)
#定义WDIOC_SETOPTIONS _IOR(看门狗_IOCTL_BASE,4,int)
#定义WDIOC_KEEPALIVE _IOR(看门狗_IOCTL_BASE,5,int)
#定义WDIOC_SETTIMEOUT _IOWR(看门狗_IOCTL_BASE,6,int)
#定义WDIOC_GETTIMEOUT _IOR(看门狗_IOCTL_BASE,7,int)
#定义WDIOC_SETPRETIMEOUT _IOWR(看门狗_IOCTL_BASE,8,int)
#定义WDIOC_GETPRETIMEOUT _IOR(看门狗_IOCTL_BASE,9,int)
#定义WDIOC_GETTIMELEFT _IOR(看门狗_IOCTL_BASE,10,int)
#定义WDIOF _开销0x 0001
#定义WDIOF_FANFAULT0x0002
#定义WDIOF_EXTERN10x0004
#定义WDIOF_EXTERN20x0008
#定义WDIOF_POWERUNDER0x0010
#定义WDIOF_CARDRESET0x0020
#定义WDIOF_POWEROVER0x0040
#定义WDIOF_SETTIMEOUT0x0080
#定义WDIOF_MAGICCLOSE0x0100
#定义WDIOF _ PRETIMEOUT0x 0200
#定义WDIOF_KEEPALIVEPING0x8000
#定义WDIOS_DISABLECARD0x0001
#定义WDIOS_ENABLECARD0x0002
#定义WDIOS _ temp恐慌0x0004
int wdt _ fd
int time _ out=5;
无效停止信号()
{
int i=0,ret=0;
i=WDIOS _ DISABLECARD
ioctl(wdt_fd,WDIOC_SETOPTIONS,I);
printf('===watchdow将被关闭===\ n ');
关闭(wdt _ FD);
退出(0);
}
int main(int argc,char *argv[])
{
国际新时间
int I;
int ret,计数=10
结构体看门狗_信息wdt _信息
信号(SIGINT,stop _ signal);
wdt_fd=open('/dev/watchdog ',O _ RDWR);
if(wdt_fd==-1)
perror('打开看门狗错误!\ n ');
//获取看门狗信息结构
ioctl(wdt_fd,WDIOC_GETSUPPORT,wdt _ info);
//printf('options=%d,id=%s\n ',wdt_info.options,wdt_info。身份);
ioctl(wdt_fd,WDIOC_SETTIMEOUT,time _ out);
而(1)
{
ioctl(wdt_fd,WDIOC_KEEPALIVE,NULL);
睡眠(atoi(argv[1]);
}
关闭(wdt _ FD);
返回0;
}