- 论坛徽章:
- 0
|
--------------------------------------------------------------------------------
各位大虾:
我最近移植一个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)选项!
请大虾帮帮我,最好能给一点实例代码,现在很急! 万分感谢 |
|