php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 614|回复: 0

Linux系统看门狗源码

[复制链接]

3150

主题

3160

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7976
贡献
0
注册时间
2021-4-14
最后登录
2024-11-24
在线时间
763 小时
QQ
发表于 2022-5-25 15:01:07 | 显示全部楼层 |阅读模式
[mw_shl_code=cpp,true]/*
*
*
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>
#define lPort      0x2E
#define cData      0x2F
#define message(args...)  fprintf(stdout, args)
void init_wdt_timer();
void wdt_active(int timeout);
void wdt_disable(void);

int main(int argc, char **argv)
{
        int timeout;

        if (argc == 1)
        {
                timeout = 5;
        }
        else
        {
                timeout = atoi(argv[1]);
                if (timeout < 3)
                {
                        timeout = 3;
                }
                else if (timeout > 60)
                {
                        timeout = 60;
                }
        }

        //message("Starting Watchdog, %d secs timeout\n", timeout);
        //I/O端口访问
        if (ioperm(0, 0x3ff, 1) < 0)
        {
                //端口可读写
                if (iopl(3) < 0)
                {
                        message("iopl fail\n");
                        return 0;
                }
        }
        message("Starting Watchdog, %d secs timeout\n", timeout);
        init_wdt_timer();
        //每隔一秒钟重置看门狗时间,达到喂狗效果
        while (1)
        {
                wdt_active(timeout);
                message("set watch dog timeout value: %d secs\n", timeout);
                sleep(1);
        }
}

void init_wdt_timer()
{
        unsigned int temp = 0;
        outb(0x87, lPort);
        outb(0x01, lPort);
        outb(0x55, lPort);
        outb(0x55, lPort);

        outb(0x07, lPort);
        outb(0x07, cData);

        outb(0x72, lPort);
        temp = inb(cData);
        temp = temp | 0xC0;
        outb(temp, cData);
}

void wdt_active(int timeout)
{
        outb(0x73, lPort);
        outb(timeout, cData);
}

void wdt_disable(void)
{
        unsigned int temp = 0;
        outb(0x87, lPort);
        outb(0x01, lPort);
        outb(0x55, lPort);
        outb(0x55, lPort);

        outb(0x07, lPort);
        outb(0x07, cData);

        outb(0x72, lPort);
        temp = inb(cData);
        temp = temp & 0xBF;
        outb(temp, cData);
        outb(0x73, lPort);
        outb(0x00, cData);
}[/mw_shl_code]

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-24 14:16 , Processed in 0.245414 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表