免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3829 | 回复: 8
打印 上一主题 下一主题

linux下如何对看门狗(watchdog)编程!急! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-22 15:28 |只看该作者 |倒序浏览
--------------------------------------------------------------------------------

各位大虾:
我最近移植一个DOS的程序到LINUX上!
今天我移植到看门狗程序部分(watchdog),在LINUX下看门狗编程很简单,就是程序先向看门狗控制器地址写1(一般地址为0x0443),就是outportb(1,0x0443),这样就打开了看门狗记时器!
程序运行中要不断的向看门狗写1,否则看门狗就认为程序死机了,就重新启动系统!这就是我理解的看门狗工作原理!
我按这个想法,在LINUX上编程! 首先我查看 cat /proc/ioport ,发现0x443已经有了看门钩定义! 从而系统已经包含了看门狗驱动程序了!所以我就把看门狗当作一个设备(/dev 中有一个设备名叫 /dev/watchdog)
我编了测试程序片段,打算在程序开始打开/dev/watchdog,然后写1,然后执行一个死循环,
#incude ...
...
#include ...
int main()
{
char buf[2] ={0,1}
fd = open("/dev/watchdog".O_RDWR);
write(fd,buf+1,1)
while(1){}
}
预期的结果应该是 在死循环中,没有向0x0443写1,系统应该重新启动!结果系统却没有重新启动!

我的LINUX内核编译时候选择了支持看门狗(watchdog)选项!
请大虾帮帮我,最好能给一点实例代码,现在很急! 万分感谢

论坛徽章:
0
2 [报告]
发表于 2004-12-22 19:49 |只看该作者

linux下如何对看门狗(watchdog)编程!急!

这个,看门狗的程序我没有在LINUX下实际搞过,但是看过你的贴子,简单提一些建议:
在Documents的watchdog.txt中提了六种看门狗的用法。其中的一个例程如下:
Example Watchdog Driver
-----------------------

#include <stdio.h>;
#include <unistd.h>;
#include <fcntl.h>;

int main(int argc, const char *argv[])
{
        int fd=open("/dev/watchdog",O_WRONLY);
        if(fd==-1)
        {
                perror("watchdog";
                exit(1);
        }
        while(1)
        {
                write(fd,"\0",1);
                fsync(fd);
                sleep(10);
        }
}

All six interfaces provide /dev/watchdog, which when open must be written
to within a timeout or the machine will reboot. Each write delays the reboot
time another timeout. In the case of the software watchdog the ability to
reboot will depend on the state of the machines and interrupts.

上面的例程你可以先测一下。首先从理解上,无论写什么都可以,不一定非要写1。另外你可以调一下,看open是否成功,write实际写的字符数是否正确,等等。然后我们可以再讨论。

论坛徽章:
0
3 [报告]
发表于 2004-12-22 20:50 |只看该作者

linux下如何对看门狗(watchdog)编程!急!

非常感谢楼上提供的信息和帮助,我明天到公司实验一下!

  不管结果怎么样,先对你表示感谢和敬佩:)

   我的QQ是:45517999
   如果愿意的话,请把我加入好友,一起讨论LINUX技术;)

论坛徽章:
0
4 [报告]
发表于 2004-12-22 21:27 |只看该作者

linux下如何对看门狗(watchdog)编程!急!

没问题,我也是初学者,很多事情都要和大家一起学习!!

论坛徽章:
0
5 [报告]
发表于 2004-12-23 09:45 |只看该作者

linux下如何对看门狗(watchdog)编程!急!

我今天试验了一下,还是不行!
  我编了程序测试看门狗有没有起作用!我将Document中的程序改为下面的样子,(去掉while死循环),
#include <stdio.h>;
#include <unistd.h>;
#include <fcntl.h>;

int main(int argc, const char *argv[])
{
int fd=open("/dev/watchdog",O_WRONLY);
if(fd==-1)
{
perror("watchdog";
exit(1);
}


   write(fd,"\0",1);
   fsync(fd);
  sleep(10);

}

  这样看门狗应该重新启动系统的,可是并没有,程序运行完后出现以下提示:
  WDT closes unexpectedly! WDT will not stop

   不知道是怎么回事! 请大虾帮我看看!!

   先谢了!!

论坛徽章:
0
6 [报告]
发表于 2004-12-24 21:15 |只看该作者

linux下如何对看门狗(watchdog)编程!急!

大狭人呢!

  能不能给点提示啊

论坛徽章:
0
7 [报告]
发表于 2004-12-24 23:48 |只看该作者

linux下如何对看门狗(watchdog)编程!急!

别急 正在编 试一试

论坛徽章:
0
8 [报告]
发表于 2004-12-27 20:01 |只看该作者

linux下如何对看门狗(watchdog)编程!急!

牛人呢!
   
    请大虾帮帮啊!谢谢了!

论坛徽章:
0
9 [报告]
发表于 2004-12-31 13:04 |只看该作者

linux下如何对看门狗(watchdog)编程!急!

你选的是什么watchdog驱动啊?确信和你的硬件是匹配的吗?
打开设备有没有错误?
我觉得你要自已经写一个驱动,应该很简单。
或者你用kdb或kgdb跟踪一下,应该很容易解决。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP