扩展知识点----Linux中看门狗应用编程
1、在嵌入式产品中,为了方便Linux操作系统在异常情况下,能够自动复位,一般需要引入看门狗。看门狗其实就是在一定的时间内被复位的计数器。当看门狗启动后,计数器开始自动计数,如果计数器溢出就会产生CPU产生一个复位信号使得系统重启--俗称被狗咬。如果在一定的时间内对看门狗及时喂狗,不产生复位信号。
2、正常的Linux开发板中,都会集成看门狗定时器:WDOG1 普通的看门狗,支持产生中断信号或者复位CPU。 相应的设备节点在对应的路径下为:/dev/watchdog0 /dev/watchdog1等。
3、看门狗应用编程实验代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#define WDOG_DEV “/dev/watchdog”
int main(int argc,char *argv[])
{
struct watchdog_info info;
int timeout; int time;
int fd;
int op;
/* 打开看门狗 */
fd = open(WDOG_DEV, O_RDWR);
if (0 > fd) { fprintf(stderr, "open error: %s: %s\n", WDOG_DEV, strerror(errno)); exit(EXIT_FAILURE); }
/* 打开之后看门狗计时器会开启、先停止它 */
op = WDIOS_DISABLECARD;
if (0 > ioctl(fd, WDIOC_SETOPTIONS, &op)) {
fprintf(stderr, "ioctl error: WDIOC_SETOPTIONS: %s\n", strerror(errno));
close(fd);
exit(EXIT_FAILURE);
}
timeout = atoi(argv[1]);
if (1 > timeout)
timeout = 1;
/* 设置超时时间 */
printf("timeout: %ds\n", timeout);
if (0 > ioctl(fd, WDIOC_SETTIMEOUT, &timeout)) {
fprintf(stderr, "ioctl error: WDIOC_SETTIMEOUT: %s\n", strerror(errno));
close(fd);
exit(EXIT_FAILURE);
}
/* 开启看门狗计时器 */
op = WDIOS_ENABLECARD;
if (0 > ioctl(fd, WDIOC_SETOPTIONS, &op)) {
fprintf(stderr, "ioctl error: WDIOC_SETOPTIONS: %s\n", strerror(errno));
close(fd); exit(EXIT_FAILURE);
}
/* 喂狗 */
time = (timeout * 1000 - 100) * 1000;//喂狗时间设置 us 微秒、在超时时间到来前 100ms 喂狗
for ( ; ; ) {
usleep(time);
ioctl(fd, WDIOC_KEEPALIVE, NULL);
}
}
总结:1、实例的代码很简单,利用参数传进来相应的超时时间,需要传入一个参数作为看门狗超时时间。2、Linux系统下都会有常用硬件的驱动节点,直接调用即可控制硬件。
相关文章
- linux 安装 ImageMagick 和 imagick 扩展
- Linux基于libmemcached,php扩展memcached的安装
- Linux常用命令大全
- 【Linux】linux常用查看命令
- ireport 在 AIX Linux websphere下的字体安装
- Linux下php安装Redis扩展
- 【Linux基础】linux下的stdin,stdout和stderr理解
- linux文件分割(将大的日志文件分割成小的)
- linux ubuntu 22.04安装后配置优化:调整 Dock Panel 外观 & 启用 Gnome 扩展支持 & 安装gnome tweaks
- Linux中搜索命令find
- 【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18kernelschedsched.h )
- L85.linux命令每日一练 -- 第12章 Linux系统常用内置命令(一)
- L80.linux命令每日一练 -- 第11章 Linux系统管理命令 -- ntsysv和setup
- L77.linux命令每日一练 -- 第11章 Linux系统管理命令 -- vmstat和mpstat
- L67.linux命令每日一练 -- 第十章 Linux网络管理命令 -- netstat和ss
- L59.linux命令每日一练 -- 第九章 Linux进程管理命令 -- killall和pkill
- 【Linux】linux经常使用基本命令
- ZYNQ - 嵌入式Linux开发 -10- ZYNQ启动流程分析
- linux奇怪的知识---文件描述符,pid,inode,ulimit和它们之间的关系
- linux/windows上的端口转发 —— 筑梦之路
- [ Linux ] 查看并修改时区