天嵌 ARM开发社区

 找回密码
 注册
查看: 5850|回复: 12

为何停止喂看门狗后,系统不重启?

[复制链接]
nice026 发表于 2012-6-14 11:00:54 | 显示全部楼层 |阅读模式
按照Linux移植手册 step19 看门狗驱动移植 的说明
在没加喂狗程序的时候系统会按设置的时间重启
加入喂狗程序后,系统不再重启,但我用kill 命令 终止喂狗程序后,系统也不再重启,停止喂狗了,系统为什么不重启呢?
TQ-ZQL 发表于 2012-6-14 14:02:24 | 显示全部楼层
你ps看下那个进程还在不在
 楼主| nice026 发表于 2012-6-14 14:26:49 | 显示全部楼层
本帖最后由 nice026 于 2012-6-14 14:27 编辑
TQ-ZQL 发表于 2012-6-14 14:02
你ps看下那个进程还在不在

那个进程已不在了
 楼主| nice026 发表于 2012-6-14 14:37:27 | 显示全部楼层
我的喂狗程序是照着天嵌文档写的,自己编译好之后,放到/sbin/,重新制作root镜像烧进去的
没法用天嵌自带root里面的EmbedSky_wdg,因为我的程序用的编译器是3.4.1
TQ-ZQL 发表于 2012-6-14 16:32:25 | 显示全部楼层
你开机不运行你自己写的那个程序会重启吗?
 楼主| nice026 发表于 2012-6-14 16:55:04 | 显示全部楼层
TQ-ZQL 发表于 2012-6-14 16:32
你开机不运行你自己写的那个程序会重启吗?

在 rcS里设置了,喂狗程序是开机自动运行的。
开机后怎样查看看门狗的状态?不知道执行完kill -9 345 后看门狗是开还是关?(345是喂狗进程)
 楼主| nice026 发表于 2012-6-14 17:18:08 | 显示全部楼层
本帖最后由 nice026 于 2012-6-14 17:18 编辑

我把etc/init.d/rcS中设置的启动看门注释掉了,制作root,烧入,开机后系统会自动重启,然后在超级终端输入:/sbin/feedwatchdog  ,之后系统不会再重启了,但是终端也不能再输入命令了,无法再停止喂狗进程进行验证//feedwatchdog  是我自己编译的喂狗程序。
TQ-ZQL 发表于 2012-6-14 17:50:50 | 显示全部楼层
你可以每次喂狗的时候打印一次信息,然后杀死看还有没有运行。
/sbin/feedwatchdog  ,之后系统不会再重启了,但是终端也不能再输入命令了---可以加个& 即/sbin/feedwatchdog& 后台运行看下
 楼主| nice026 发表于 2012-6-15 09:56:22 | 显示全部楼层
本帖最后由 nice026 于 2012-6-15 10:03 编辑
TQ-ZQL 发表于 2012-6-14 17:50
你可以每次喂狗的时候打印一次信息,然后杀死看还有没有运行。
/sbin/feedwatchdog  ,之后系统不会再重启了 ...

1、我在ioctl(fd,WDIOC_KEEPALIVE);后加了 printf("/n feed the watchdog ! ");
  2、重新烧录之后,开机系统会按时重启
  3、执行/sbin/feedwatchdog& 后,系统不再重启,也没打印信息,执行ps后显示有/sbin/feeddog 进程,过了很长时间一下子出现了很多条(约100多)“feed the watchdog!”,然后又过了很长时间(时间不确定)又一次出现很多条信息
4、执行 kill -9 345 杀死feedwatchdog,过了很久也没打印信息,也没重启,执行ps后显示无feedwatchdog进程
5、再执行/sbin/feedwatchdog&,效果和 第3步一样

另:
    在烧入前我把feedwatchdog权限改为了777(sudo chmod 777 feedwatchdog )
    开机正常启动后打印了以下信息:
    -sh:can't access tty;job control turned off
以上两点不知道有没有影响。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
Jangel 发表于 2012-6-15 10:12:34 | 显示全部楼层
复制一下ps的列表看看
 楼主| nice026 发表于 2012-6-15 10:57:00 | 显示全部楼层
Jangel 发表于 2012-6-15 10:12
复制一下ps的列表看看

第一张是开机后ps(没启动喂狗进程)
第二张是启动喂狗进程后ps
第三张是kill -9 后ps



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
猪猪 发表于 2012-6-23 23:39:22 | 显示全部楼层
学习了 谢谢LZ
 楼主| nice026 发表于 2012-6-29 09:38:12 | 显示全部楼层
因别的事儿此问题搁置了一段时间,昨天终于知道了为啥kill掉喂狗程序后系统也不再重启-----看门狗定时器被关掉了!!
kill掉喂狗程序后,会调用s3c2410_wdt.c中的s3c2410wdt_release(),在s3c2410wdt_release()中又调用s3c2410wdt_stop(),就关掉了看门狗定时器。
static int s3c2410wdt_release(struct inode *inode, struct file *file)  
{  
    /*
     *  Shut off the timer.
     *  Lock it in if it's a module and we set nowayout
     */  
  
    if (expect_close == 42)  
        s3c2410wdt_stop();  
    else {  
        dev_err(wdt_dev, "Unexpected close, not stopping watchdog\n");  
        s3c2410wdt_keepalive();  
    }  
    expect_close = 0;  
    clear_bit(0, &open_lock);  
    return 0;  
}  
如果kill喂狗程序后,执行echo 0 > /dev/watchdog,就会调用s3c2410wdt_open(),重新打开看门狗定时器,15秒之后系统重启。
执行echo –n V > /dev/watchdog,关闭看门狗,系统不会重启。
然后通过别的方式停止喂狗来验证看门狗功能,系统可正常重启。通过kill喂狗程序无法验证。
但是不知道kill喂狗程序为什么会调用s3c2410wdt_release()???
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-6-15 20:00 , Processed in 1.031250 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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